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 2018/04/12 14:49:15 UTC

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

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site f50447c3e -> d220bc5e7


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    } else if (recentlyModified) {<a name="li

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/client/HBaseAdmin.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/HBaseAdmin.html b/devapidocs/org/apache/hadoop/hbase/client/HBaseAdmin.html
index 4521542..d57ab81 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/HBaseAdmin.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/HBaseAdmin.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":9,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":42,"i28":42,"i29":42,"i30":42,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":42,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":9,"i83":10,"i84":10,"i85":10,"i86":10,"i87":9,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":10,"i97":41,"i98":10,"i99":10,"i100":10,"i101":10,"i102":42,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i109
 ":10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":9,"i118":10,"i119":10,"i120":10,"i121":42,"i122":10,"i123":10,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":10,"i130":10,"i131":10,"i132":10,"i133":10,"i134":10,"i135":10,"i136":10,"i137":10,"i138":10,"i139":10,"i140":10,"i141":10,"i142":10,"i143":10,"i144":10,"i145":10,"i146":10,"i147":10,"i148":10,"i149":10,"i150":10,"i151":10,"i152":10,"i153":10,"i154":10,"i155":10,"i156":10,"i157":10,"i158":10,"i159":10,"i160":10,"i161":10,"i162":10,"i163":10,"i164":10,"i165":10,"i166":10,"i167":10,"i168":10,"i169":10,"i170":10,"i171":10,"i172":10,"i173":42,"i174":10,"i175":10,"i176":10,"i177":10,"i178":10,"i179":10,"i180":10,"i181":10,"i182":10,"i183":10,"i184":10,"i185":10,"i186":10,"i187":10,"i188":10,"i189":10,"i190":10,"i191":10,"i192":10,"i193":10,"i194":10,"i195":10,"i196":10,"i197":10,"i198":10,"i199":10,"i200":42,"i201":10,"i202":10,"i203":10,"i204":10,"i205":10,"i206":10,"i207":10,"i208":10,"i2
 09":10,"i210":10,"i211":10,"i212":10,"i213":10,"i214":10,"i215":10,"i216":10,"i217":10,"i218":10,"i219":10,"i220":10,"i221":10,"i222":10,"i223":10,"i224":10,"i225":10,"i226":10,"i227":10,"i228":10,"i229":10,"i230":10,"i231":10,"i232":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":9,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":42,"i29":42,"i30":42,"i31":42,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":42,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":9,"i84":10,"i85":10,"i86":10,"i87":10,"i88":9,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":10,"i97":10,"i98":41,"i99":10,"i100":10,"i101":10,"i102":10,"i103":42,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i109
 ":10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":9,"i119":10,"i120":10,"i121":10,"i122":42,"i123":10,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":10,"i130":10,"i131":10,"i132":10,"i133":10,"i134":10,"i135":10,"i136":10,"i137":10,"i138":10,"i139":10,"i140":10,"i141":10,"i142":10,"i143":10,"i144":10,"i145":10,"i146":10,"i147":10,"i148":10,"i149":10,"i150":10,"i151":10,"i152":10,"i153":10,"i154":10,"i155":10,"i156":10,"i157":10,"i158":10,"i159":10,"i160":10,"i161":10,"i162":10,"i163":10,"i164":10,"i165":10,"i166":10,"i167":10,"i168":10,"i169":10,"i170":10,"i171":10,"i172":10,"i173":10,"i174":42,"i175":10,"i176":10,"i177":10,"i178":10,"i179":10,"i180":10,"i181":10,"i182":10,"i183":10,"i184":10,"i185":10,"i186":10,"i187":10,"i188":10,"i189":10,"i190":10,"i191":10,"i192":10,"i193":10,"i194":10,"i195":10,"i196":10,"i197":10,"i198":10,"i199":10,"i200":10,"i201":42,"i202":10,"i203":10,"i204":10,"i205":10,"i206":10,"i207":10,"i208":10,"i2
 09":10,"i210":10,"i211":10,"i212":10,"i213":10,"i214":10,"i215":10,"i216":10,"i217":10,"i218":10,"i219":10,"i220":10,"i221":10,"i222":10,"i223":10,"i224":10,"i225":10,"i226":10,"i227":10,"i228":10,"i229":10,"i230":10,"i231":10,"i232":10,"i233":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -503,57 +503,65 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
 </tr>
 <tr id="i26" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#close--">close</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;newTableName,
+                boolean&nbsp;preserveSplits)</code>
+<div class="block">Create a new table by cloning the existent table schema.</div>
+</td>
 </tr>
 <tr id="i27" class="rowColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#close--">close</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i28" class="altColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#closeRegion-byte:A-java.lang.String-">closeRegion</a></span>(byte[]&nbsp;regionName,
            <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;unused)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#closeRegion-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.HRegionInfo-">closeRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;unused,
            <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#closeRegion-java.lang.String-java.lang.String-">closeRegion</a></span>(<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;regionName,
            <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;unused)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#closeRegionWithEncodedRegionName-java.lang.String-java.lang.String-">closeRegionWithEncodedRegionName</a></span>(<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;encodedRegionName,
                                 <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;unused)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compact-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface-org.apache.hadoop.hbase.client.RegionInfo-boolean-byte:A-">compact</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface&nbsp;admin,
        <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
        boolean&nbsp;major,
        byte[]&nbsp;family)</code>&nbsp;</td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily)</code>
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-boolean-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily,
@@ -562,7 +570,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily,
@@ -570,27 +578,27 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compactRegion-byte:A-">compactRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Compact an individual region.</div>
 </td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compactRegion-byte:A-byte:A-">compactRegion</a></span>(byte[]&nbsp;regionName,
              byte[]&nbsp;columnFamily)</code>
 <div class="block">Compact a column family within a region.</div>
 </td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compactRegion-byte:A-byte:A-boolean-">compactRegion</a></span>(byte[]&nbsp;regionName,
              byte[]&nbsp;columnFamily,
@@ -598,52 +606,52 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
 <div class="block">Compact an individual region.</div>
 </td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compactRegionServer-org.apache.hadoop.hbase.ServerName-">compactRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Compact all regions on the region server.</div>
 </td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ipc/CoprocessorRpcChannel.html" title="interface in org.apache.hadoop.hbase.ipc">CoprocessorRpcChannel</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#coprocessorService--">coprocessorService</a></span>()</code>
 <div class="block">Creates and returns a <code>RpcChannel</code> instance connected to the active
  master.</div>
 </td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ipc/CoprocessorRpcChannel.html" title="interface in org.apache.hadoop.hbase.ipc">CoprocessorRpcChannel</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#coprocessorService-org.apache.hadoop.hbase.ServerName-">coprocessorService</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Creates and returns a <code>RpcChannel</code> instance
  connected to the passed region server.</div>
 </td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#createNamespace-org.apache.hadoop.hbase.NamespaceDescriptor-">createNamespace</a></span>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;descriptor)</code>
 <div class="block">Create a new namespace.</div>
 </td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#createNamespaceAsync-org.apache.hadoop.hbase.NamespaceDescriptor-">createNamespaceAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;descriptor)</code>
 <div class="block">Create a new namespace.</div>
 </td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</code>
 <div class="block">Creates a new table.</div>
 </td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-byte:A:A-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
            byte[][]&nbsp;splitKeys)</code>
 <div class="block">Creates a new table with an initial set of empty regions defined by the specified split keys.</div>
 </td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-byte:A-byte:A-int-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
            byte[]&nbsp;startKey,
@@ -652,14 +660,14 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
 <div class="block">Creates a new table with the specified number of regions.</div>
 </td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#createTableAsync-org.apache.hadoop.hbase.client.TableDescriptor-byte:A:A-">createTableAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
                 byte[][]&nbsp;splitKeys)</code>
 <div class="block">Creates a new table but does not block and wait for it to come online.</div>
 </td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#decommissionRegionServers-java.util.List-boolean-">decommissionRegionServers</a></span>(<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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers,
                          boolean&nbsp;offload)</code>
@@ -667,7 +675,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
  assigned to them.</div>
 </td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteColumn-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumn</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
             byte[]&nbsp;columnFamily)</code>
@@ -677,81 +685,81 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
 </div>
 </td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteColumnFamily-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumnFamily</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   byte[]&nbsp;columnFamily)</code>
 <div class="block">Delete a column family from a table.</div>
 </td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteColumnFamilyAsync-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumnFamilyAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                        byte[]&nbsp;columnFamily)</code>
 <div class="block">Delete a column family from a table.</div>
 </td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteNamespace-java.lang.String-">deleteNamespace</a></span>(<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;name)</code>
 <div class="block">Delete an existing namespace.</div>
 </td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteNamespaceAsync-java.lang.String-">deleteNamespaceAsync</a></span>(<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;name)</code>
 <div class="block">Delete an existing namespace.</div>
 </td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteSnapshot-byte:A-">deleteSnapshot</a></span>(byte[]&nbsp;snapshotName)</code>
 <div class="block">Delete an existing snapshot.</div>
 </td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteSnapshot-java.lang.String-">deleteSnapshot</a></span>(<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;snapshotName)</code>
 <div class="block">Delete an existing snapshot.</div>
 </td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteSnapshots-java.util.regex.Pattern-">deleteSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">Delete existing snapshots whose names match the pattern passed.</div>
 </td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteSnapshots-java.lang.String-">deleteSnapshots</a></span>(<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;regex)</code>
 <div class="block">Delete existing snapshots whose names match the pattern passed.</div>
 </td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteTable-org.apache.hadoop.hbase.TableName-">deleteTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Deletes a table.</div>
 </td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i61" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteTableAsync-org.apache.hadoop.hbase.TableName-">deleteTableAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Deletes the table but does not block and wait for it to be completely removed.</div>
 </td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i62" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteTables-java.util.regex.Pattern-">deleteTables</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">Delete tables matching the passed in pattern and wait on completion.</div>
 </td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteTables-java.lang.String-">deleteTables</a></span>(<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;regex)</code>
 <div class="block">Deletes tables matching the passed in pattern and wait on completion.</div>
 </td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteTableSnapshots-java.util.regex.Pattern-java.util.regex.Pattern-">deleteTableSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;snapshotNamePattern)</code>
@@ -759,7 +767,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
  name regular expression.</div>
 </td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteTableSnapshots-java.lang.String-java.lang.String-">deleteTableSnapshots</a></span>(<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;tableNameRegex,
                     <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;snapshotNameRegex)</code>
@@ -767,91 +775,91 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
  name regular expression.</div>
 </td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#disableReplicationPeer-java.lang.String-">disableReplicationPeer</a></span>(<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;peerId)</code>
 <div class="block">Stop the replication stream to the specified peer.</div>
 </td>
 </tr>
-<tr id="i66" class="altColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#disableReplicationPeerAsync-java.lang.String-">disableReplicationPeerAsync</a></span>(<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;peerId)</code>
 <div class="block">Disable a replication peer but does not block and wait for it.</div>
 </td>
 </tr>
-<tr id="i67" class="rowColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#disableTable-org.apache.hadoop.hbase.TableName-">disableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable table and wait on completion.</div>
 </td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#disableTableAsync-org.apache.hadoop.hbase.TableName-">disableTableAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable the table but does not block and wait for it to be completely disabled.</div>
 </td>
 </tr>
-<tr id="i69" class="rowColor">
+<tr id="i70" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#disableTableReplication-org.apache.hadoop.hbase.TableName-">disableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable a table's replication switch.</div>
 </td>
 </tr>
-<tr id="i70" class="altColor">
+<tr id="i71" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#disableTables-java.util.regex.Pattern-">disableTables</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">Disable tables matching the passed in pattern and wait on completion.</div>
 </td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i72" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#disableTables-java.lang.String-">disableTables</a></span>(<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;regex)</code>
 <div class="block">Disable tables matching the passed in pattern and wait on completion.</div>
 </td>
 </tr>
-<tr id="i72" class="altColor">
+<tr id="i73" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#enableReplicationPeer-java.lang.String-">enableReplicationPeer</a></span>(<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;peerId)</code>
 <div class="block">Restart the replication stream to the specified peer.</div>
 </td>
 </tr>
-<tr id="i73" class="rowColor">
+<tr id="i74" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#enableReplicationPeerAsync-java.lang.String-">enableReplicationPeerAsync</a></span>(<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;peerId)</code>
 <div class="block">Enable a replication peer but does not block and wait for it.</div>
 </td>
 </tr>
-<tr id="i74" class="altColor">
+<tr id="i75" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#enableTable-org.apache.hadoop.hbase.TableName-">enableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table.</div>
 </td>
 </tr>
-<tr id="i75" class="rowColor">
+<tr id="i76" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#enableTableAsync-org.apache.hadoop.hbase.TableName-">enableTableAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable the table but does not block and wait for it to be completely enabled.</div>
 </td>
 </tr>
-<tr id="i76" class="altColor">
+<tr id="i77" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#enableTableReplication-org.apache.hadoop.hbase.TableName-">enableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table's replication switch.</div>
 </td>
 </tr>
-<tr id="i77" class="rowColor">
+<tr id="i78" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#enableTables-java.util.regex.Pattern-">enableTables</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">Enable tables matching the passed in pattern and wait on completion.</div>
 </td>
 </tr>
-<tr id="i78" class="altColor">
+<tr id="i79" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#enableTables-java.lang.String-">enableTables</a></span>(<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;regex)</code>
 <div class="block">Enable tables matching the passed in pattern and wait on completion.</div>
 </td>
 </tr>
-<tr id="i79" class="rowColor">
+<tr id="i80" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#execProcedure-java.lang.String-java.lang.String-java.util.Map-">execProcedure</a></span>(<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;signature,
              <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;instance,
@@ -859,7 +867,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
 <div class="block">Execute a distributed procedure on a cluster.</div>
 </td>
 </tr>
-<tr id="i80" class="altColor">
+<tr id="i81" class="rowColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#execProcedureWithReturn-java.lang.String-java.lang.String-java.util.Map-">execProcedureWithReturn</a></span>(<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;signature,
                        <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;instance,
@@ -867,41 +875,41 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
 <div class="block">Execute a distributed procedure on a cluster.</div>
 </td>
 </tr>
-<tr id="i81" class="rowColor">
+<tr id="i82" class="altColor">
 <td class="colFirst"><code>private &lt;C extends <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallable.html" title="interface in org.apache.hadoop.hbase.client">RetryingCallable</a>&lt;V&gt; &amp; <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>,V&gt;<br>V</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#executeCallable-C-">executeCallable</a></span>(C&nbsp;callable)</code>&nbsp;</td>
 </tr>
-<tr id="i82" class="altColor">
+<tr id="i83" class="rowColor">
 <td class="colFirst"><code>private static &lt;C extends <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallable.html" title="interface in org.apache.hadoop.hbase.client">RetryingCallable</a>&lt;V&gt; &amp; <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>,V&gt;<br>V</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#executeCallable-C-org.apache.hadoop.hbase.client.RpcRetryingCallerFactory-int-int-">executeCallable</a></span>(C&nbsp;callable,
                <a href="../../../../../org/apache/hadoop/hbase/client/RpcRetryingCallerFactory.html" title="class in org.apache.hadoop.hbase.client">RpcRetryingCallerFactory</a>&nbsp;rpcCallerFactory,
                int&nbsp;operationTimeout,
                int&nbsp;rpcTimeout)</code>&nbsp;</td>
 </tr>
-<tr id="i83" class="rowColor">
+<tr id="i84" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#flush-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface-org.apache.hadoop.hbase.client.RegionInfo-">flush</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface&nbsp;admin,
      <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info)</code>&nbsp;</td>
 </tr>
-<tr id="i84" class="altColor">
+<tr id="i85" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#flush-org.apache.hadoop.hbase.TableName-">flush</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Flush a table.</div>
 </td>
 </tr>
-<tr id="i85" class="rowColor">
+<tr id="i86" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#flushRegion-byte:A-">flushRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Flush an individual region.</div>
 </td>
 </tr>
-<tr id="i86" class="altColor">
+<tr id="i87" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#flushRegionServer-org.apache.hadoop.hbase.ServerName-">flushRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Flush all regions on the region server.</div>
 </td>
 </tr>
-<tr id="i87" class="rowColor">
+<tr id="i88" class="altColor">
 <td class="colFirst"><code>private static &lt;T&gt;&nbsp;T</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#get-java.util.concurrent.Future-long-java.util.concurrent.TimeUnit-">get</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;T&gt;&nbsp;future,
    long&nbsp;timeout,
@@ -909,60 +917,60 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
 <div class="block">Do a get with a timeout against the passed in <code>future</code>.</div>
 </td>
 </tr>
-<tr id="i88" class="altColor">
+<tr id="i89" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getAlterStatus-byte:A-">getAlterStatus</a></span>(byte[]&nbsp;tableName)</code>
 <div class="block">Get the status of <code>alter</code> (a.k.a <code>modify</code>) command - indicates how many
  regions have received the updated schema Asynchronous operation.</div>
 </td>
 </tr>
-<tr id="i89" class="rowColor">
+<tr id="i90" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getAlterStatus-org.apache.hadoop.hbase.TableName-">getAlterStatus</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the status of an <code>alter</code> (a.k.a <code>modify</code>) command - indicates how
  many regions have received the updated schema Asynchronous operation.</div>
 </td>
 </tr>
-<tr id="i90" class="altColor">
+<tr id="i91" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getClusterMetrics-java.util.EnumSet-">getClusterMetrics</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase">ClusterMetrics.Option</a>&gt;&nbsp;options)</code>
 <div class="block">Get cluster status with a set of <a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><code>ClusterMetrics.Option</code></a> to get desired status.</div>
 </td>
 </tr>
-<tr id="i91" class="rowColor">
+<tr id="i92" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getCompactionState-org.apache.hadoop.hbase.TableName-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr id="i92" class="altColor">
+<tr id="i93" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getCompactionState-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr id="i93" class="rowColor">
+<tr id="i94" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getCompactionStateForRegion-byte:A-">getCompactionStateForRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Get the current compaction state of region.</div>
 </td>
 </tr>
-<tr id="i94" class="altColor">
+<tr id="i95" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.conf.Configuration</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getConfiguration--">getConfiguration</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i95" class="rowColor">
+<tr id="i96" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getConnection--">getConnection</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i96" class="altColor">
+<tr id="i97" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getDescriptor-org.apache.hadoop.hbase.TableName-">getDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get a table descriptor.</div>
 </td>
 </tr>
-<tr id="i97" class="rowColor">
+<tr id="i98" class="altColor">
 <td class="colFirst"><code>(package private) static <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getHTableDescriptor-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.client.RpcRetryingCallerFactory-org.apache.hadoop.hbase.ipc.RpcControllerFactory-int-int-">getHTableDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                    <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
@@ -977,7 +985,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
 </div>
 </td>
 </tr>
-<tr id="i98" class="altColor">
+<tr id="i99" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getLastMajorCompactionTimestamp-org.apache.hadoop.hbase.TableName-">getLastMajorCompactionTimestamp</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the timestamp of the last major compaction for the passed table
@@ -986,25 +994,25 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
  or 0 if no such HFile could be found.</div>
 </td>
 </tr>
-<tr id="i99" class="rowColor">
+<tr id="i100" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getLastMajorCompactionTimestampForRegion-byte:A-">getLastMajorCompactionTimestampForRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Get the timestamp of the last major compaction for the passed region.</div>
 </td>
 </tr>
-<tr id="i100" class="altColor">
+<tr id="i101" 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/client/HBaseAdmin.html#getLocks--">getLocks</a></span>()</code>
 <div class="block">Get locks.</div>
 </td>
 </tr>
-<tr id="i101" class="rowColor">
+<tr id="i102" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getNamespaceDescriptor-java.lang.String-">getNamespaceDescriptor</a></span>(<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;name)</code>
 <div class="block">Get a namespace descriptor by name.</div>
 </td>
 </tr>
-<tr id="i102" class="altColor">
+<tr id="i103" class="rowColor">
 <td class="colFirst"><code><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/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getOnlineRegions-org.apache.hadoop.hbase.ServerName-">getOnlineRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -1013,84 +1021,84 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
 </div>
 </td>
 </tr>
-<tr id="i103" class="rowColor">
+<tr id="i104" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getOperationTimeout--">getOperationTimeout</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i104" class="altColor">
+<tr id="i105" class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getPauseTime-int-">getPauseTime</a></span>(int&nbsp;tries)</code>&nbsp;</td>
 </tr>
-<tr id="i105" class="rowColor">
+<tr id="i106" class="altColor">
 <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/client/HBaseAdmin.html#getProcedures--">getProcedures</a></span>()</code>
 <div class="block">Get procedures.</div>
 </td>
 </tr>
-<tr id="i106" class="altColor">
+<tr id="i107" class="rowColor">
 <td class="colFirst"><code><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/quotas/QuotaSettings.html" title="class in org.apache.hadoop.hbase.quotas">QuotaSettings</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getQuota-org.apache.hadoop.hbase.quotas.QuotaFilter-">getQuota</a></span>(<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaFilter.html" title="class in org.apache.hadoop.hbase.quotas">QuotaFilter</a>&nbsp;filter)</code>
 <div class="block">List the quotas based on the filter.</div>
 </td>
 </tr>
-<tr id="i107" class="rowColor">
+<tr id="i108" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaRetriever.html" title="class in org.apache.hadoop.hbase.quotas">QuotaRetriever</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getQuotaRetriever-org.apache.hadoop.hbase.quotas.QuotaFilter-">getQuotaRetriever</a></span>(<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaFilter.html" title="class in org.apache.hadoop.hbase.quotas">QuotaFilter</a>&nbsp;filter)</code>
 <div class="block">Return a QuotaRetriever to list the quotas based on the filter.</div>
 </td>
 </tr>
-<tr id="i108" class="altColor">
+<tr id="i109" class="rowColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getRegion-byte:A-">getRegion</a></span>(byte[]&nbsp;regionName)</code>&nbsp;</td>
 </tr>
-<tr id="i109" class="rowColor">
+<tr id="i110" class="altColor">
 <td class="colFirst"><code><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/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getRegionMetrics-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.TableName-">getRegionMetrics</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                 <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get <a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase"><code>RegionMetrics</code></a> of all regions hosted on a regionserver for a table.</div>
 </td>
 </tr>
-<tr id="i110" class="altColor">
+<tr id="i111" class="rowColor">
 <td class="colFirst"><code>private byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getRegionName-byte:A-">getRegionName</a></span>(byte[]&nbsp;regionNameOrEncodedRegionName)</code>
 <div class="block">If the input is a region name, it is returned as is.</div>
 </td>
 </tr>
-<tr id="i111" class="rowColor">
+<tr id="i112" class="altColor">
 <td class="colFirst"><code><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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getRegions-org.apache.hadoop.hbase.ServerName-">getRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</code>
 <div class="block">Get all the online regions on a region server.</div>
 </td>
 </tr>
-<tr id="i112" class="altColor">
+<tr id="i113" class="rowColor">
 <td class="colFirst"><code><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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getRegions-org.apache.hadoop.hbase.TableName-">getRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the regions of a given table.</div>
 </td>
 </tr>
-<tr id="i113" class="rowColor">
+<tr id="i114" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getReplicationPeerConfig-java.lang.String-">getReplicationPeerConfig</a></span>(<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;peerId)</code>
 <div class="block">Returns the configured ReplicationPeerConfig for the specified peer.</div>
 </td>
 </tr>
-<tr id="i114" class="altColor">
+<tr id="i115" class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcControllerFactory.html" title="class in org.apache.hadoop.hbase.ipc">RpcControllerFactory</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getRpcControllerFactory--">getRpcControllerFactory</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i115" class="rowColor">
+<tr id="i116" class="altColor">
 <td class="colFirst"><code><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/security/SecurityCapability.html" title="enum in org.apache.hadoop.hbase.client.security">SecurityCapability</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getSecurityCapabilities--">getSecurityCapabilities</a></span>()</code>
 <div class="block">Return the set of supported security capabilities.</div>
 </td>
 </tr>
-<tr id="i116" class="altColor">
+<tr id="i117" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getTableDescriptor-org.apache.hadoop.hbase.TableName-">getTableDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get a table descriptor.</div>
 </td>
 </tr>
-<tr id="i117" class="rowColor">
+<tr id="i118" class="altColor">
 <td class="colFirst"><code>(package private) static <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getTableDescriptor-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.client.RpcRetryingCallerFactory-org.apache.hadoop.hbase.ipc.RpcControllerFactory-int-int-">getTableDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
@@ -1099,23 +1107,23 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
                   int&nbsp;operationTimeout,
                   int&nbsp;rpcTimeout)</code>&nbsp;</td>
 </tr>
-<tr id="i118" class="altColor">
+<tr id="i119" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getTableDescriptors-java.util.List-">getTableDescriptors</a></span>(<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="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;names)</code>
 <div class="block">Get tableDescriptors.</div>
 </td>
 </tr>
-<tr id="i119" class="rowColor">
+<tr id="i120" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getTableDescriptorsByTableName-java.util.List-">getTableDescriptorsByTableName</a></span>(<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tableNames)</code>
 <div class="block">Get tableDescriptors.</div>
 </td>
 </tr>
-<tr id="i120" class="altColor">
+<tr id="i121" class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getTableNameBeforeRestoreSnapshot-java.lang.String-">getTableNameBeforeRestoreSnapshot</a></span>(<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;snapshotName)</code>&nbsp;</td>
 </tr>
-<tr id="i121" class="rowColor">
+<tr id="i122" class="altColor">
 <td class="colFirst"><code><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/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getTableRegions-org.apache.hadoop.hbase.TableName-">getTableRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -1124,15 +1132,15 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
 </div>
 </td>
 </tr>
-<tr id="i122" class="altColor">
+<tr id="i123" class="rowColor">
 <td class="colFirst"><code>private byte[][]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getTableSplits-org.apache.hadoop.hbase.TableName-">getTableSplits</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i123" class="rowColor">
+<tr id="i124" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#internalDeleteSnapshot-org.apache.hadoop.hbase.client.SnapshotDescription-">internalDeleteSnapshot</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&nbsp;snapshot)</code>&nbsp;</td>
 </tr>
-<tr id="i124" class="altColor">
+<tr id="i125" class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#internalRestoreSnapshotAsync-java.lang.String-org.apache.hadoop.hbase.TableName-boolean-">internalRestoreSnapshotAsync</a></span>(<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;snapshotName,
                             <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -1140,49 +1148,49 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
 <div class="block">Execute Restore/Clone snapshot and wait for the server to complete (blocking).</div>
 </td>
 </tr>
-<tr id="i125" class="rowColor">
+<tr id="i126" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#isAborted--">isAborted</a></span>()</code>
 <div class="block">Check if the server or client was aborted.</div>
 </td>
 </tr>
-<tr id="i126" class="altColor">
+<tr id="i127" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#isBalancerEnabled--">isBalancerEnabled</a></span>()</code>
 <div class="block">Query the current state of the balancer.</div>
 </td>
 </tr>
-<tr id="i127" class="rowColor">
+<tr id="i128" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#isCatalogJanitorEnabled--">isCatalogJanitorEnabled</a></span>()</code>
 <div class="block">Query on the catalog janitor state (Enabled/Disabled?).</div>
 </td>
 </tr>
-<tr id="i128" class="altColor">
+<tr id="i129" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#isCleanerChoreEnabled--">isCleanerChoreEnabled</a></span>()</code>
 <div class="block">Query on the cleaner chore state (Enabled/Disabled?).</div>
 </td>
 </tr>
-<tr id="i129" class="rowColor">
+<tr id="i130" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#isMasterInMaintenanceMode--">isMasterInMaintenanceMode</a></span>()</code>
 <div class="block">Check whether Master is in maintenance mode.</div>
 </td>
 </tr>
-<tr id="i130" class="altColor">
+<tr id="i131" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#isMergeEnabled--">isMergeEnabled</a></span>()</code>
 <div class="block">Query the current state of the merge switch.</div>
 </td>
 </tr>
-<tr id="i131" class="rowColor">
+<tr id="i132" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#isNormalizerEnabled--">isNormalizerEnabled</a></span>()</code>
 <div class="block">Query the current state of the region normalizer.</div>
 </td>
 </tr>
-<tr id="i132" class="altColor">
+<tr id="i133" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#isProcedureFinished-java.lang.String-java.lang.String-java.util.Map-">isProcedureFinished</a></span>(<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;signature,
                    <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;instance,
@@ -1190,23 +1198,23 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
 <div class="block">Check the current state of the specified procedure.</div>
 </td>
 </tr>
-<tr id="i133" class="rowColor">
+<tr id="i134" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#isSnapshotFinished-org.apache.hadoop.hbase.client.SnapshotDescription-">isSnapshotFinished</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&nbsp;snapshotDesc)</code>
 <div class="block">Check the current state of the passed snapshot.</div>
 </td>
 </tr>
-<tr id="i134" class="altColor">
+<tr id="i135" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#isSplitEnabled--">isSplitEnabled</a></span>()</code>
 <div class="block">Query the current state of the split switch.</div>
 </td>
 </tr>
-<tr id="i135" class="rowColor">
+<tr id="i136" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#isTableAvailable-org.apache.hadoop.hbase.TableName-">isTableAvailable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i136" class="altColor">
+<tr id="i137" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#isTableAvailable-org.apache.hadoop.hbase.TableName-byte:A:A-">isTableAvailable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 byte[][]&nbsp;splitKeys)</code>
@@ -1214,170 +1222,170 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
  which was used while creating the given table.</div>
 </td>
 </tr>
-<tr id="i137" class="rowColor">
+<tr id="i138" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#isTableDisabled-org.apache.hadoop.hbase.TableName-">isTableDisabled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i138" class="altColor">
+<tr id="i139" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#isTableEnabled-org.apache.hadoop.hbase.TableName-">isTableEnabled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i139" class="rowColor">
+<tr id="i140" class="altColor">
 <td class="colFirst"><code><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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#listDecommissionedRegionServers--">listDecommissionedRegionServers</a></span>()</code>
 <div class="block">List region servers marked as decommissioned, which can not be assigned regions.</div>
 </td>
 </tr>
-<tr id="i140" class="altColor">
+<tr id="i141" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#listNamespaceDescriptors--">listNamespaceDescriptors</a></span>()</code>
 <div class="block">List available namespace descriptors.</div>
 </td>
 </tr>
-<tr id="i141" class="rowColor">
+<tr id="i142" class="altColor">
 <td class="colFirst"><code><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/replication/TableCFs.html" title="class in org.apache.hadoop.hbase.client.replication">TableCFs</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#listReplicatedTableCFs--">listReplicatedTableCFs</a></span>()</code>
 <div class="block">Find all table and column families that are replicated from this cluster</div>
 </td>
 </tr>
-<tr id="i142" class="altColor">
+<tr id="i143" class="rowColor">
 <td class="colFirst"><code><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/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#listReplicationPeers--">listReplicationPeers</a></span>()</code>
 <div class="block">Return a list of replication peers.</div>
 </td>
 </tr>
-<tr id="i143" class="rowColor">
+<tr id="i144" class="altColor">
 <td class="colFirst"><code><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/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#listReplicationPeers-java.util.regex.Pattern-">listReplicationPeers</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">Return a list of replication peers.</div>
 </td>
 </tr>
-<tr id="i144" class="altColor">
+<tr id="i145" class="rowColor">
 <td class="colFirst"><code><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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#listSnapshots--">listSnapshots</a></span>()</code>
 <div class="block">List completed snapshots.</div>
 </td>
 </tr>
-<tr id="i145" class="rowColor">
+<tr id="i146" class="altColor">
 <td class="colFirst"><code><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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#listSnapshots-java.util.regex.Pattern-">listSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">List all the completed snapshots matching the given pattern.</div>
 </td>
 </tr>
-<tr id="i146" class="altColor">
+<tr id="i147" class="rowColor">
 <td class="colFirst"><code><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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#listSnapshots-java.lang.String-">listSnapshots</a></span>(<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;regex)</code>
 <div class="block">List all the completed snapshots matching the given regular expression.</div>
 </td>
 </tr>
-<tr id="i147" class="rowColor">
+<tr id="i148" class="altColor">
 <td class="colFirst"><code><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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#listTableDescriptors--">listTableDescriptors</a></span>()</code>
 <div class="block">List all the userspace tables.</div>
 </td>
 </tr>
-<tr id="i148" class="altColor">
+<tr id="i149" class="rowColor">
 <td class="colFirst"><code><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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#listTableDescriptors-java.util.List-">listTableDescriptors</a></span>(<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tableNames)</code>
 <div class="block">Get tableDescriptors.</div>
 </td>
 </tr>
-<tr id="i149" class="rowColor">
+<tr id="i150" class="altColor">
 <td class="colFirst"><code><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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#listTableDescriptors-java.util.regex.Pattern-">listTableDescriptors</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">List all the userspace tab

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    } else if (recentlyModified) {<a name="line.2391"></a>
+<span clas

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    } else if (recentlyModified) {<a name="line.2391"></a>
+

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index e532323..7563962 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,16 +5,16 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20180411144616+00'00')
-/CreationDate (D:20180411144616+00'00')
+/ModDate (D:20180412144701+00'00')
+/CreationDate (D:20180412144701+00'00')
 >>
 endobj
 2 0 obj
 << /Type /Catalog
 /Pages 3 0 R
 /Names 26 0 R
-/Outlines 4595 0 R
-/PageLabels 4821 0 R
+/Outlines 4610 0 R
+/PageLabels 4836 0 R
 /PageMode /UseOutlines
 /OpenAction [7 0 R /FitH 842.89]
 /ViewerPreferences << /DisplayDocTitle true
@@ -23,8 +23,8 @@ endobj
 endobj
 3 0 obj
 << /Type /Pages
-/Count 718
-/Kids [7 0 R 12 0 R 14 0 R 16 0 R 18 0 R 20 0 R 22 0 R 24 0 R 44 0 R 47 0 R 50 0 R 54 0 R 61 0 R 63 0 R 67 0 R 69 0 R 71 0 R 78 0 R 81 0 R 83 0 R 89 0 R 92 0 R 94 0 R 96 0 R 103 0 R 109 0 R 114 0 R 116 0 R 132 0 R 137 0 R 144 0 R 153 0 R 161 0 R 170 0 R 181 0 R 185 0 R 187 0 R 191 0 R 200 0 R 209 0 R 217 0 R 226 0 R 231 0 R 240 0 R 248 0 R 257 0 R 270 0 R 277 0 R 287 0 R 295 0 R 303 0 R 310 0 R 318 0 R 324 0 R 330 0 R 337 0 R 345 0 R 356 0 R 365 0 R 377 0 R 385 0 R 393 0 R 400 0 R 409 0 R 417 0 R 427 0 R 435 0 R 442 0 R 451 0 R 463 0 R 472 0 R 479 0 R 487 0 R 495 0 R 504 0 R 511 0 R 516 0 R 520 0 R 525 0 R 529 0 R 545 0 R 556 0 R 560 0 R 575 0 R 580 0 R 585 0 R 587 0 R 589 0 R 592 0 R 594 0 R 596 0 R 604 0 R 610 0 R 615 0 R 620 0 R 627 0 R 637 0 R 645 0 R 649 0 R 653 0 R 655 0 R 665 0 R 679 0 R 687 0 R 694 0 R 706 0 R 714 0 R 730 0 R 744 0 R 750 0 R 756 0 R 759 0 R 763 0 R 767 0 R 770 0 R 773 0 R 775 0 R 778 0 R 782 0 R 784 0 R 788 0 R 794 0 R 799 0 R 803 0 R 806 0 R 812 0 R 814 0 R
  818 0 R 826 0 R 828 0 R 831 0 R 834 0 R 837 0 R 840 0 R 854 0 R 862 0 R 872 0 R 883 0 R 889 0 R 899 0 R 910 0 R 913 0 R 917 0 R 920 0 R 925 0 R 934 0 R 942 0 R 946 0 R 950 0 R 955 0 R 959 0 R 961 0 R 976 0 R 987 0 R 992 0 R 999 0 R 1002 0 R 1010 0 R 1018 0 R 1023 0 R 1028 0 R 1033 0 R 1035 0 R 1037 0 R 1039 0 R 1049 0 R 1057 0 R 1061 0 R 1068 0 R 1075 0 R 1083 0 R 1087 0 R 1093 0 R 1098 0 R 1106 0 R 1110 0 R 1115 0 R 1117 0 R 1123 0 R 1131 0 R 1138 0 R 1145 0 R 1156 0 R 1160 0 R 1162 0 R 1164 0 R 1168 0 R 1171 0 R 1176 0 R 1179 0 R 1191 0 R 1195 0 R 1201 0 R 1209 0 R 1214 0 R 1218 0 R 1222 0 R 1224 0 R 1227 0 R 1230 0 R 1233 0 R 1237 0 R 1241 0 R 1245 0 R 1250 0 R 1254 0 R 1257 0 R 1259 0 R 1269 0 R 1272 0 R 1280 0 R 1289 0 R 1295 0 R 1299 0 R 1301 0 R 1312 0 R 1315 0 R 1321 0 R 1329 0 R 1332 0 R 1339 0 R 1347 0 R 1349 0 R 1351 0 R 1360 0 R 1362 0 R 1364 0 R 1367 0 R 1369 0 R 1371 0 R 1373 0 R 1375 0 R 1378 0 R 1382 0 R 1387 0 R 1389 0 R 1391 0 R 1393 0 R 1398 0 R 1405 0 R 1411 0 R
  1414 0 R 1416 0 R 1419 0 R 1423 0 R 1427 0 R 1430 0 R 1432 0 R 1434 0 R 1437 0 R 1442 0 R 1448 0 R 1456 0 R 1470 0 R 1484 0 R 1487 0 R 1492 0 R 1505 0 R 1510 0 R 1525 0 R 1533 0 R 1537 0 R 1546 0 R 1561 0 R 1575 0 R 1587 0 R 1592 0 R 1598 0 R 1608 0 R 1613 0 R 1618 0 R 1626 0 R 1629 0 R 1638 0 R 1644 0 R 1649 0 R 1661 0 R 1666 0 R 1672 0 R 1674 0 R 1680 0 R 1688 0 R 1696 0 R 1700 0 R 1702 0 R 1704 0 R 1716 0 R 1722 0 R 1731 0 R 1737 0 R 1750 0 R 1756 0 R 1762 0 R 1773 0 R 1779 0 R 1784 0 R 1789 0 R 1792 0 R 1795 0 R 1800 0 R 1805 0 R 1812 0 R 1816 0 R 1821 0 R 1830 0 R 1835 0 R 1840 0 R 1842 0 R 1851 0 R 1858 0 R 1864 0 R 1869 0 R 1873 0 R 1876 0 R 1881 0 R 1886 0 R 1892 0 R 1894 0 R 1896 0 R 1899 0 R 1910 0 R 1913 0 R 1920 0 R 1928 0 R 1933 0 R 1937 0 R 1942 0 R 1944 0 R 1947 0 R 1952 0 R 1955 0 R 1957 0 R 1960 0 R 1963 0 R 1966 0 R 1976 0 R 1981 0 R 1986 0 R 1988 0 R 1996 0 R 2003 0 R 2010 0 R 2016 0 R 2021 0 R 2023 0 R 2032 0 R 2042 0 R 2052 0 R 2058 0 R 2065 0 R 2067 0 R 2072 0
  R 2074 0 R 2076 0 R 2080 0 R 2083 0 R 2086 0 R 2091 0 R 2095 0 R 2106 0 R 2109 0 R 2114 0 R 2117 0 R 2119 0 R 2124 0 R 2134 0 R 2136 0 R 2138 0 R 2140 0 R 2142 0 R 2145 0 R 2147 0 R 2149 0 R 2152 0 R 2154 0 R 2156 0 R 2161 0 R 2166 0 R 2175 0 R 2177 0 R 2179 0 R 2185 0 R 2187 0 R 2192 0 R 2194 0 R 2196 0 R 2203 0 R 2208 0 R 2212 0 R 2217 0 R 2221 0 R 2223 0 R 2225 0 R 2229 0 R 2232 0 R 2234 0 R 2236 0 R 2240 0 R 2242 0 R 2245 0 R 2247 0 R 2249 0 R 2251 0 R 2258 0 R 2261 0 R 2266 0 R 2268 0 R 2270 0 R 2272 0 R 2274 0 R 2282 0 R 2293 0 R 2307 0 R 2318 0 R 2322 0 R 2327 0 R 2331 0 R 2334 0 R 2339 0 R 2345 0 R 2347 0 R 2350 0 R 2352 0 R 2354 0 R 2356 0 R 2361 0 R 2363 0 R 2376 0 R 2379 0 R 2387 0 R 2393 0 R 2405 0 R 2419 0 R 2432 0 R 2449 0 R 2453 0 R 2455 0 R 2459 0 R 2477 0 R 2483 0 R 2495 0 R 2499 0 R 2503 0 R 2512 0 R 2524 0 R 2529 0 R 2539 0 R 2552 0 R 2571 0 R 2580 0 R 2583 0 R 2592 0 R 2609 0 R 2616 0 R 2619 0 R 2624 0 R 2628 0 R 2631 0 R 2640 0 R 2648 0 R 2652 0 R 2654 0 R 2658
  0 R 2672 0 R 2681 0 R 2686 0 R 2690 0 R 2693 0 R 2695 0 R 2697 0 R 2699 0 R 2704 0 R 2717 0 R 2727 0 R 2735 0 R 2741 0 R 2747 0 R 2757 0 R 2764 0 R 2770 0 R 2772 0 R 2781 0 R 2790 0 R 2792 0 R 2800 0 R 2808 0 R 2810 0 R 2819 0 R 2822 0 R 2832 0 R 2836 0 R 2844 0 R 2852 0 R 2857 0 R 2861 0 R 2865 0 R 2867 0 R 2873 0 R 2877 0 R 2881 0 R 2887 0 R 2893 0 R 2896 0 R 2902 0 R 2906 0 R 2915 0 R 2920 0 R 2925 0 R 2935 0 R 2941 0 R 2948 0 R 2951 0 R 2954 0 R 2961 0 R 2966 0 R 2969 0 R 2974 0 R 2984 0 R 2989 0 R 2991 0 R 2995 0 R 3002 0 R 3005 0 R 3016 0 R 3022 0 R 3031 0 R 3034 0 R 3044 0 R 3049 0 R 3053 0 R 3061 0 R 3067 0 R 3071 0 R 3073 0 R 3084 0 R 3089 0 R 3092 0 R 3094 0 R 3096 0 R 3106 0 R 3113 0 R 3117 0 R 3120 0 R 3126 0 R 3130 0 R 3133 0 R 3137 0 R 3142 0 R 3150 0 R 3155 0 R 3160 0 R 3165 0 R 3167 0 R 3170 0 R 3172 0 R 3176 0 R 3187 0 R 3189 0 R 3193 0 R 3196 0 R 3200 0 R 3203 0 R 3207 0 R 3209 0 R 3222 0 R 3227 0 R 3232 0 R 3238 0 R 3246 0 R 3248 0 R 3256 0 R 3274 0 R 3285 0 R 32
 92 0 R 3308 0 R 3311 0 R 3316 0 R 3318 0 R 3325 0 R 3330 0 R 3333 0 R 3335 0 R 3337 0 R 3339 0 R 3342 0 R 3360 0 R 3363 0 R 3368 0 R 3374 0 R 3384 0 R 3389 0 R 3399 0 R 3409 0 R 3417 0 R 3426 0 R 3431 0 R 3434 0 R 3442 0 R 3446 0 R 3451 0 R 3456 0 R 3469 0 R 3472 0 R 3478 0 R 3483 0 R 3492 0 R 3502 0 R 3508 0 R 3517 0 R 3526 0 R 3531 0 R 3537 0 R 3543 0 R 3548 0 R 3550 0 R 3556 0 R 3563 0 R 3565 0 R 3572 0 R 3574 0 R 3580 0 R 3588 0 R 3594 0 R 3603 0 R 3610 0 R 3621 0 R 3630 0 R 3641 0 R 3654 0 R 3657 0 R 3659 0 R 3664 0 R 3677 0 R 3682 0 R 3688 0 R 3692 0 R 3695 0 R 3700 0 R 3702 0 R 3706 0 R 3708 0 R 3712 0 R 3715 0 R 3718 0 R 3726 0 R 3728 0 R 3732 0 R 3735 0 R 3743 0 R 3750 0 R 3754 0 R 3757 0 R 3759 0 R 3763 0 R 3768 0 R 3773 0 R 3776 0 R 3785 0 R 3790 0 R 3794 0 R 3797 0 R 3805 0 R 3810 0 R 3818 0 R 3823 0 R 3825 0 R 3831 0 R 3833 0 R 3838 0 R 3842 0 R 3848 0 R 3852 0 R 3864 0 R 3880 0 R 3895 0 R 3900 0 R 3903 0 R 3906 0 R 3912 0 R 3917 0 R 3919 0 R 3921 0 R 3923 0 R 3925 0 R 
 3927 0 R 3936 0 R 3940 0 R 3944 0 R 3948 0 R 3950 0 R 3957 0 R 3967 0 R 3974 0 R 3977 0 R 3980 0 R 3982 0 R 3989 0 R 3996 0 R 4006 0 R 4010 0 R 4013 0 R 4017 0 R 4021 0 R 4027 0 R 4030 0 R 4046 0 R 4051 0 R 4074 0 R 4078 0 R 4085 0 R 4096 0 R 4105 0 R 4108 0 R 4111 0 R 4114 0 R 4130 0 R 4136 0 R 4143 0 R]
+/Count 720
+/Kids [7 0 R 12 0 R 14 0 R 16 0 R 18 0 R 20 0 R 22 0 R 24 0 R 44 0 R 47 0 R 50 0 R 54 0 R 61 0 R 63 0 R 67 0 R 69 0 R 71 0 R 78 0 R 81 0 R 83 0 R 89 0 R 92 0 R 94 0 R 96 0 R 103 0 R 110 0 R 115 0 R 117 0 R 133 0 R 138 0 R 146 0 R 155 0 R 163 0 R 172 0 R 183 0 R 187 0 R 189 0 R 193 0 R 202 0 R 211 0 R 219 0 R 228 0 R 233 0 R 242 0 R 250 0 R 259 0 R 272 0 R 279 0 R 289 0 R 297 0 R 305 0 R 312 0 R 320 0 R 326 0 R 332 0 R 339 0 R 347 0 R 358 0 R 367 0 R 379 0 R 387 0 R 395 0 R 402 0 R 411 0 R 419 0 R 429 0 R 437 0 R 444 0 R 453 0 R 465 0 R 474 0 R 481 0 R 489 0 R 497 0 R 506 0 R 513 0 R 518 0 R 522 0 R 527 0 R 531 0 R 547 0 R 558 0 R 562 0 R 577 0 R 582 0 R 587 0 R 589 0 R 591 0 R 594 0 R 596 0 R 598 0 R 606 0 R 612 0 R 617 0 R 622 0 R 629 0 R 639 0 R 647 0 R 651 0 R 655 0 R 657 0 R 667 0 R 681 0 R 690 0 R 699 0 R 709 0 R 720 0 R 731 0 R 750 0 R 756 0 R 759 0 R 765 0 R 768 0 R 772 0 R 776 0 R 779 0 R 782 0 R 784 0 R 787 0 R 791 0 R 793 0 R 797 0 R 803 0 R 808 0 R 812 0 R 815 0 R 821 0 R
  823 0 R 827 0 R 835 0 R 837 0 R 840 0 R 843 0 R 846 0 R 849 0 R 863 0 R 871 0 R 882 0 R 893 0 R 899 0 R 909 0 R 920 0 R 923 0 R 927 0 R 930 0 R 935 0 R 944 0 R 952 0 R 956 0 R 960 0 R 965 0 R 969 0 R 971 0 R 987 0 R 998 0 R 1003 0 R 1010 0 R 1013 0 R 1021 0 R 1029 0 R 1034 0 R 1039 0 R 1044 0 R 1046 0 R 1048 0 R 1050 0 R 1060 0 R 1068 0 R 1072 0 R 1079 0 R 1086 0 R 1094 0 R 1098 0 R 1104 0 R 1109 0 R 1117 0 R 1121 0 R 1126 0 R 1128 0 R 1134 0 R 1142 0 R 1148 0 R 1155 0 R 1166 0 R 1170 0 R 1172 0 R 1174 0 R 1178 0 R 1181 0 R 1186 0 R 1189 0 R 1201 0 R 1205 0 R 1211 0 R 1219 0 R 1224 0 R 1228 0 R 1232 0 R 1234 0 R 1237 0 R 1240 0 R 1243 0 R 1247 0 R 1251 0 R 1255 0 R 1260 0 R 1264 0 R 1267 0 R 1269 0 R 1279 0 R 1282 0 R 1290 0 R 1299 0 R 1305 0 R 1309 0 R 1311 0 R 1322 0 R 1325 0 R 1331 0 R 1339 0 R 1342 0 R 1349 0 R 1357 0 R 1359 0 R 1361 0 R 1370 0 R 1372 0 R 1374 0 R 1377 0 R 1379 0 R 1381 0 R 1383 0 R 1385 0 R 1388 0 R 1392 0 R 1397 0 R 1399 0 R 1401 0 R 1403 0 R 1408 0 R 1415 0 
 R 1421 0 R 1424 0 R 1426 0 R 1429 0 R 1433 0 R 1437 0 R 1440 0 R 1442 0 R 1444 0 R 1447 0 R 1452 0 R 1458 0 R 1466 0 R 1480 0 R 1494 0 R 1497 0 R 1502 0 R 1515 0 R 1520 0 R 1535 0 R 1543 0 R 1547 0 R 1556 0 R 1571 0 R 1585 0 R 1597 0 R 1602 0 R 1608 0 R 1618 0 R 1623 0 R 1628 0 R 1636 0 R 1639 0 R 1648 0 R 1654 0 R 1658 0 R 1670 0 R 1675 0 R 1681 0 R 1683 0 R 1690 0 R 1698 0 R 1706 0 R 1710 0 R 1712 0 R 1714 0 R 1726 0 R 1732 0 R 1741 0 R 1747 0 R 1760 0 R 1766 0 R 1772 0 R 1783 0 R 1789 0 R 1794 0 R 1799 0 R 1802 0 R 1805 0 R 1810 0 R 1815 0 R 1822 0 R 1826 0 R 1831 0 R 1840 0 R 1845 0 R 1850 0 R 1852 0 R 1861 0 R 1868 0 R 1874 0 R 1879 0 R 1883 0 R 1887 0 R 1892 0 R 1897 0 R 1903 0 R 1905 0 R 1907 0 R 1910 0 R 1921 0 R 1924 0 R 1931 0 R 1939 0 R 1944 0 R 1948 0 R 1953 0 R 1955 0 R 1958 0 R 1963 0 R 1966 0 R 1968 0 R 1971 0 R 1974 0 R 1977 0 R 1987 0 R 1992 0 R 1997 0 R 1999 0 R 2007 0 R 2014 0 R 2021 0 R 2027 0 R 2032 0 R 2034 0 R 2043 0 R 2053 0 R 2063 0 R 2069 0 R 2076 0 R 2078 
 0 R 2083 0 R 2085 0 R 2087 0 R 2091 0 R 2094 0 R 2097 0 R 2102 0 R 2106 0 R 2117 0 R 2120 0 R 2125 0 R 2128 0 R 2130 0 R 2135 0 R 2145 0 R 2147 0 R 2149 0 R 2151 0 R 2153 0 R 2156 0 R 2158 0 R 2160 0 R 2163 0 R 2165 0 R 2167 0 R 2171 0 R 2176 0 R 2185 0 R 2187 0 R 2189 0 R 2195 0 R 2197 0 R 2202 0 R 2204 0 R 2206 0 R 2213 0 R 2218 0 R 2222 0 R 2227 0 R 2231 0 R 2233 0 R 2235 0 R 2239 0 R 2242 0 R 2244 0 R 2246 0 R 2250 0 R 2252 0 R 2255 0 R 2257 0 R 2259 0 R 2261 0 R 2268 0 R 2271 0 R 2276 0 R 2278 0 R 2280 0 R 2282 0 R 2284 0 R 2292 0 R 2303 0 R 2317 0 R 2328 0 R 2332 0 R 2337 0 R 2341 0 R 2344 0 R 2349 0 R 2355 0 R 2357 0 R 2360 0 R 2362 0 R 2364 0 R 2366 0 R 2371 0 R 2373 0 R 2386 0 R 2389 0 R 2397 0 R 2403 0 R 2415 0 R 2429 0 R 2442 0 R 2459 0 R 2463 0 R 2465 0 R 2469 0 R 2487 0 R 2493 0 R 2505 0 R 2509 0 R 2513 0 R 2522 0 R 2534 0 R 2539 0 R 2549 0 R 2562 0 R 2581 0 R 2590 0 R 2593 0 R 2602 0 R 2619 0 R 2626 0 R 2629 0 R 2634 0 R 2638 0 R 2641 0 R 2650 0 R 2659 0 R 2662 0 R 266
 4 0 R 2668 0 R 2682 0 R 2691 0 R 2696 0 R 2700 0 R 2703 0 R 2705 0 R 2707 0 R 2709 0 R 2714 0 R 2727 0 R 2737 0 R 2745 0 R 2751 0 R 2756 0 R 2767 0 R 2774 0 R 2780 0 R 2782 0 R 2791 0 R 2799 0 R 2801 0 R 2809 0 R 2817 0 R 2819 0 R 2828 0 R 2831 0 R 2841 0 R 2845 0 R 2854 0 R 2862 0 R 2867 0 R 2871 0 R 2875 0 R 2877 0 R 2883 0 R 2887 0 R 2891 0 R 2897 0 R 2903 0 R 2906 0 R 2912 0 R 2916 0 R 2925 0 R 2930 0 R 2935 0 R 2945 0 R 2951 0 R 2958 0 R 2961 0 R 2964 0 R 2971 0 R 2976 0 R 2979 0 R 2984 0 R 2994 0 R 2999 0 R 3001 0 R 3005 0 R 3012 0 R 3015 0 R 3026 0 R 3029 0 R 3036 0 R 3044 0 R 3048 0 R 3058 0 R 3063 0 R 3067 0 R 3075 0 R 3081 0 R 3085 0 R 3087 0 R 3098 0 R 3103 0 R 3106 0 R 3108 0 R 3110 0 R 3120 0 R 3127 0 R 3131 0 R 3134 0 R 3140 0 R 3144 0 R 3147 0 R 3151 0 R 3156 0 R 3164 0 R 3169 0 R 3174 0 R 3179 0 R 3181 0 R 3184 0 R 3186 0 R 3190 0 R 3201 0 R 3203 0 R 3207 0 R 3210 0 R 3214 0 R 3217 0 R 3221 0 R 3223 0 R 3236 0 R 3241 0 R 3246 0 R 3252 0 R 3260 0 R 3262 0 R 3270 0 R 3
 288 0 R 3299 0 R 3306 0 R 3322 0 R 3325 0 R 3330 0 R 3332 0 R 3339 0 R 3344 0 R 3347 0 R 3349 0 R 3351 0 R 3353 0 R 3356 0 R 3374 0 R 3377 0 R 3382 0 R 3388 0 R 3398 0 R 3403 0 R 3413 0 R 3423 0 R 3431 0 R 3440 0 R 3445 0 R 3448 0 R 3456 0 R 3460 0 R 3465 0 R 3470 0 R 3483 0 R 3486 0 R 3492 0 R 3497 0 R 3506 0 R 3516 0 R 3522 0 R 3531 0 R 3540 0 R 3545 0 R 3551 0 R 3557 0 R 3562 0 R 3564 0 R 3570 0 R 3577 0 R 3579 0 R 3585 0 R 3587 0 R 3593 0 R 3601 0 R 3607 0 R 3616 0 R 3623 0 R 3634 0 R 3644 0 R 3655 0 R 3668 0 R 3671 0 R 3673 0 R 3678 0 R 3691 0 R 3696 0 R 3702 0 R 3706 0 R 3709 0 R 3714 0 R 3716 0 R 3720 0 R 3722 0 R 3726 0 R 3729 0 R 3732 0 R 3740 0 R 3742 0 R 3746 0 R 3749 0 R 3757 0 R 3765 0 R 3769 0 R 3772 0 R 3774 0 R 3778 0 R 3783 0 R 3788 0 R 3791 0 R 3800 0 R 3805 0 R 3809 0 R 3812 0 R 3820 0 R 3825 0 R 3833 0 R 3838 0 R 3840 0 R 3846 0 R 3848 0 R 3853 0 R 3857 0 R 3863 0 R 3867 0 R 3879 0 R 3895 0 R 3910 0 R 3915 0 R 3918 0 R 3921 0 R 3927 0 R 3932 0 R 3934 0 R 3936 0 R
  3938 0 R 3940 0 R 3942 0 R 3951 0 R 3955 0 R 3959 0 R 3963 0 R 3965 0 R 3972 0 R 3982 0 R 3989 0 R 3992 0 R 3995 0 R 3997 0 R 4004 0 R 4011 0 R 4021 0 R 4025 0 R 4028 0 R 4032 0 R 4036 0 R 4042 0 R 4045 0 R 4061 0 R 4066 0 R 4089 0 R 4093 0 R 4100 0 R 4111 0 R 4120 0 R 4123 0 R 4126 0 R 4129 0 R 4145 0 R 4151 0 R 4158 0 R]
 >>
 endobj
 4 0 obj
@@ -187,11 +187,11 @@ endobj
 << /Type /Font
 /BaseFont /71be00+NotoSerif
 /Subtype /TrueType
-/FontDescriptor 4823 0 R
+/FontDescriptor 4838 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4825 0 R
-/ToUnicode 4824 0 R
+/Widths 4840 0 R
+/ToUnicode 4839 0 R
 >>
 endobj
 11 0 obj
@@ -927,7 +927,7 @@ ET
 BT
 529.4315 437.696 Td
 /F1.0 10.5 Tf
-<313033> Tj
+<313034> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -967,7 +967,7 @@ ET
 BT
 529.4315 419.216 Td
 /F1.0 10.5 Tf
-<313034> Tj
+<313035> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1007,7 +1007,7 @@ ET
 BT
 529.4315 400.736 Td
 /F1.0 10.5 Tf
-<313035> Tj
+<313036> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1047,7 +1047,7 @@ ET
 BT
 529.4315 382.256 Td
 /F1.0 10.5 Tf
-<313036> Tj
+<313037> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1087,7 +1087,7 @@ ET
 BT
 529.4315 363.776 Td
 /F1.0 10.5 Tf
-<313038> Tj
+<313039> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1127,7 +1127,7 @@ ET
 BT
 529.4315 345.296 Td
 /F1.0 10.5 Tf
-<313130> Tj
+<313131> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1167,7 +1167,7 @@ ET
 BT
 529.4315 326.816 Td
 /F1.0 10.5 Tf
-<313131> Tj
+<313132> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1207,7 +1207,7 @@ ET
 BT
 529.4315 308.336 Td
 /F1.0 10.5 Tf
-<313137> Tj
+<313138> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1247,7 +1247,7 @@ ET
 BT
 529.4315 289.856 Td
 /F1.0 10.5 Tf
-<313138> Tj
+<313139> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1287,7 +1287,7 @@ ET
 BT
 529.4315 271.376 Td
 /F1.0 10.5 Tf
-<313230> Tj
+<313231> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1327,7 +1327,7 @@ ET
 BT
 529.4315 252.896 Td
 /F1.0 10.5 Tf
-<313231> Tj
+<313232> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1367,7 +1367,7 @@ ET
 BT
 529.4315 234.416 Td
 /F1.0 10.5 Tf
-<313233> Tj
+<313234> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1407,7 +1407,7 @@ ET
 BT
 529.4315 215.936 Td
 /F1.0 10.5 Tf
-<313234> Tj
+<313235> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1447,7 +1447,7 @@ ET
 BT
 529.4315 197.456 Td
 /F1.0 10.5 Tf
-<313235> Tj
+<313236> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1487,7 +1487,7 @@ ET
 BT
 529.4315 178.976 Td
 /F1.0 10.5 Tf
-<313236> Tj
+<313237> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1527,7 +1527,7 @@ ET
 BT
 529.4315 160.496 Td
 /F1.0 10.5 Tf
-<313237> Tj
+<313238> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1567,7 +1567,7 @@ ET
 BT
 529.4315 142.016 Td
 /F1.0 10.5 Tf
-<313239> Tj
+<313330> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1607,7 +1607,7 @@ ET
 BT
 529.4315 123.536 Td
 /F1.0 10.5 Tf
-<313334> Tj
+<313335> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1647,7 +1647,7 @@ ET
 BT
 529.4315 105.056 Td
 /F1.0 10.5 Tf
-<313335> Tj
+<313336> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1687,7 +1687,7 @@ ET
 BT
 529.4315 86.576 Td
 /F1.0 10.5 Tf
-<313336> Tj
+<313337> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1727,7 +1727,7 @@ ET
 BT
 529.4315 68.096 Td
 /F1.0 10.5 Tf
-<313337> Tj
+<313338> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1750,7 +1750,7 @@ endobj
 /F1.0 10 0 R
 >>
 >>
-/Annots [4145 0 R 4146 0 R 4147 0 R 4148 0 R 4149 0 R 4150 0 R 4151 0 R 4152 0 R 4153 0 R 4154 0 R 4155 0 R 4156 0 R 4157 0 R 4158 0 R 4159 0 R 4160 0 R 4161 0 R 4162 0 R 4163 0 R 4164 0 R 4165 0 R 4166 0 R 4167 0 R 4168 0 R 4169 0 R 4170 0 R 4171 0 R 4172 0 R 4173 0 R 4174 0 R 4175 0 R 4176 0 R 4177 0 R 4178 0 R 4179 0 R 4180 0 R 4181 0 R 4182 0 R 4183 0 R 4184 0 R 4185 0 R 4186 0 R 4187 0 R 4188 0 R 4189 0 R 4190 0 R 4191 0 R 4192 0 R 4193 0 R 4194 0 R 4195 0 R 4196 0 R 4197 0 R 4198 0 R 4199 0 R 4200 0 R 4201 0 R 4202 0 R 4203 0 R 4204 0 R 4205 0 R 4206 0 R 4207 0 R 4208 0 R 4209 0 R 4210 0 R 4211 0 R 4212 0 R 4213 0 R 4214 0 R 4215 0 R 4216 0 R 4217 0 R 4218 0 R 4219 0 R 4220 0 R]
+/Annots [4160 0 R 4161 0 R 4162 0 R 4163 0 R 4164 0 R 4165 0 R 4166 0 R 4167 0 R 4168 0 R 4169 0 R 4170 0 R 4171 0 R 4172 0 R 4173 0 R 4174 0 R 4175 0 R 4176 0 R 4177 0 R 4178 0 R 4179 0 R 4180 0 R 4181 0 R 4182 0 R 4183 0 R 4184 0 R 4185 0 R 4186 0 R 4187 0 R 4188 0 R 4189 0 R 4190 0 R 4191 0 R 4192 0 R 4193 0 R 4194 0 R 4195 0 R 4196 0 R 4197 0 R 4198 0 R 4199 0 R 4200 0 R 4201 0 R 4202 0 R 4203 0 R 4204 0 R 4205 0 R 4206 0 R 4207 0 R 4208 0 R 4209 0 R 4210 0 R 4211 0 R 4212 0 R 4213 0 R 4214 0 R 4215 0 R 4216 0 R 4217 0 R 4218 0 R 4219 0 R 4220 0 R 4221 0 R 4222 0 R 4223 0 R 4224 0 R 4225 0 R 4226 0 R 4227 0 R 4228 0 R 4229 0 R 4230 0 R 4231 0 R 4232 0 R 4233 0 R 4234 0 R 4235 0 R]
 >>
 endobj
 13 0 obj
@@ -1795,7 +1795,7 @@ ET
 BT
 529.4315 794.676 Td
 /F1.0 10.5 Tf
-<313338> Tj
+<313339> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1835,7 +1835,7 @@ ET
 BT
 529.4315 776.196 Td
 /F1.0 10.5 Tf
-<313339> Tj
+<313430> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1875,7 +1875,7 @@ ET
 BT
 529.4315 757.716 Td
 /F1.0 10.5 Tf
-<313430> Tj
+<313431> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1915,7 +1915,7 @@ ET
 BT
 529.4315 739.236 Td
 /F1.0 10.5 Tf
-<313431> Tj
+<313432> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1955,7 +1955,7 @@ ET
 BT
 529.4315 720.756 Td
 /F1.0 10.5 Tf
-<313432> Tj
+<313433> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1995,7 +1995,7 @@ ET
 BT
 529.4315 702.276 Td
 /F1.0 10.5 Tf
-<313433> Tj
+<313434> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2035,7 +2035,7 @@ ET
 BT
 529.4315 683.796 Td
 /F1.0 10.5 Tf
-<313530> Tj
+<313531> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2075,7 +2075,7 @@ ET
 BT
 529.4315 665.316 Td
 /F1.0 10.5 Tf
-<313531> Tj
+<313532> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2115,7 +2115,7 @@ ET
 BT
 529.4315 646.836 Td
 /F1.0 10.5 Tf
-<313532> Tj
+<313533> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2155,7 +2155,7 @@ ET
 BT
 529.4315 628.356 Td
 /F1.0 10.5 Tf
-<313533> Tj
+<313534> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2195,7 +2195,7 @@ ET
 BT
 529.4315 609.876 Td
 /F1.0 10.5 Tf
-<313534> Tj
+<313535> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2235,7 +2235,7 @@ ET
 BT
 529.4315 591.396 Td
 /F1.0 10.5 Tf
-<313538> Tj
+<313539> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2275,7 +2275,7 @@ ET
 BT
 529.4315 572.916 Td
 /F1.0 10.5 Tf
-<313630> Tj
+<313631> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2315,7 +2315,7 @@ ET
 BT
 529.4315 554.436 Td
 /F1.0 10.5 Tf
-<313631> Tj
+<313632> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2355,7 +2355,7 @@ ET
 BT
 529.4315 535.956 Td
 /F1.0 10.5 Tf
-<313731> Tj
+<313732> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2395,7 +2395,7 @@ ET
 BT
 529.4315 517.476 Td
 /F1.0 10.5 Tf
-<313734> Tj
+<313735> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2435,7 +2435,7 @@ ET
 BT
 529.4315 498.996 Td
 /F1.0 10.5 Tf
-<313735> Tj
+<313736> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2475,7 +2475,7 @@ ET
 BT
 529.4315 480.516 Td
 /F1.0 10.5 Tf
-<313736> Tj
+<313737> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2515,7 +2515,7 @@ ET
 BT
 529.4315 462.036 Td
 /F1.0 10.5 Tf
-<313831> Tj
+<313832> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2555,7 +2555,7 @@ ET
 BT
 529.4315 443.556 Td
 /F1.0 10.5 Tf
-<313832> Tj
+<313833> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2595,7 +2595,7 @@ ET
 BT
 529.4315 425.076 Td
 /F1.0 10.5 Tf
-<313833> Tj
+<313834> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2635,7 +2635,7 @@ ET
 BT
 529.4315 406.596 Td
 /F1.0 10.5 Tf
-<313834> Tj
+<313835> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2675,7 +2675,7 @@ ET
 BT
 529.4315 388.116 Td
 /F1.0 10.5 Tf
-<313835> Tj
+<313836> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2715,7 +2715,7 @@ ET
 BT
 529.4315 369.636 Td
 /F1.0 10.5 Tf
-<313836> Tj
+<313837> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2755,7 +2755,7 @@ ET
 BT
 529.4315 351.156 Td
 /F1.0 10.5 Tf
-<313837> Tj
+<313838> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2795,7 +2795,7 @@ ET
 BT
 529.4315 332.676 Td
 /F1.0 10.5 Tf
-<313934> Tj
+<313935> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2835,7 +2835,7 @@ ET
 BT
 529.4315 314.196 Td
 /F1.0 10.5 Tf
-<313935> Tj
+<313936> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2875,7 +2875,7 @@ ET
 BT
 529.4315 295.716 Td
 /F1.0 10.5 Tf
-<313936> Tj
+<313937> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2915,7 +2915,7 @@ ET
 BT
 529.4315 277.236 Td
 /F1.0 10.5 Tf
-<313937> Tj
+<313938> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2955,7 +2955,7 @@ ET
 BT
 529.4315 258.756 Td
 /F1.0 10.5 Tf
-<313938> Tj
+<313939> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2995,7 +2995,7 @@ ET
 BT
 529.4315 240.276 Td
 /F1.0 10.5 Tf
-<313939> Tj
+<323030> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3035,7 +3035,7 @@ ET
 BT
 529.4315 221.796 Td
 /F1.0 10.5 Tf
-<323031> Tj
+<323032> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3075,7 +3075,7 @@ ET
 BT
 529.4315 203.316 Td
 /F1.0 10.5 Tf
-<323038> Tj
+<323039> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3115,7 +3115,7 @@ ET
 BT
 529.4315 184.836 Td
 /F1.0 10.5 Tf
-<323131> Tj
+<323132> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3155,7 +3155,7 @@ ET
 BT
 529.4315 166.356 Td
 /F1.0 10.5 Tf
-<323133> Tj
+<323134> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3195,7 +3195,7 @@ ET
 BT
 529.4315 147.876 Td
 /F1.0 10.5 Tf
-<323339> Tj
+<323430> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3235,7 +3235,7 @@ ET
 BT
 529.4315 129.396 Td
 /F1.0 10.5 Tf
-<323432> Tj
+<323433> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3275,7 +3275,7 @@ ET
 BT
 529.4315 110.916 Td
 /F1.0 10.5 Tf
-<323433> Tj
+<323434> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3315,7 +3315,7 @@ ET
 BT
 529.4315 92.436 Td
 /F1.0 10.5 Tf
-<323435> Tj
+<323436> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3355,7 +3355,7 @@ ET
 BT
 529.4315 73.956 Td
 /F1.0 10.5 Tf
-<323436> Tj
+<323437> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3395,7 +3395,7 @@ ET
 BT
 529.4315 55.476 Td
 /F1.0 10.5 Tf
-<323530> Tj
+<323531> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3417,7 +3417,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4221 0 R 4222 0 R 4223 0 R 4224 0 R 4225 0 R 4226 0 R 4227 0 R 4228 0 R 4229 0 R 4230 0 R 4231 0 R 4232 0 R 4233 0 R 4234 0 R 4235 0 R 4236 0 R 4237 0 R 4238 0 R 4239 0 R 4240 0 R 4241 0 R 4242 0 R 4243 0 R 4244 0 R 4245 0 R 4246 0 R 4247 0 R 4248 0 R 4249 0 R 4250 0 R 4251 0 R 4252 0 R 4253 0 R 4254 0 R 4255 0 R 4256 0 R 4257 0 R 4258 0 R 4259 0 R 4260 0 R 4261 0 R 4262 0 R 4263 0 R 4264 0 R 4265 0 R 4266 0 R 4267 0 R 4268 0 R 4269 0 R 4270 0 R 4271 0 R 4272 0 R 4273 0 R 4274 0 R 4275 0 R 4276 0 R 4277 0 R 4278 0 R 4279 0 R 4280 0 R 4281 0 R 4282 0 R 4283 0 R 4284 0 R 4285 0 R 4286 0 R 4287 0 R 4288 0 R 4289 0 R 4290 0 R 4291 0 R 4292 0 R 4293 0 R 4294 0 R 4295 0 R 4296 0 R 4297 0 R 4298 0 R 4299 0 R 4300 0 R 4301 0 R 4302 0 R]
+/Annots [4236 0 R 4237 0 R 4238 0 R 4239 0 R 4240 0 R 4241 0 R 4242 0 R 4243 0 R 4244 0 R 4245 0 R 4246 0 R 4247 0 R 4248 0 R 4249 0 R 4250 0 R 4251 0 R 4252 0 R 4253 0 R 4254 0 R 4255 0 R 4256 0 R 4257 0 R 4258 0 R 4259 0 R 4260 0 R 4261 0 R 4262 0 R 4263 0 R 4264 0 R 4265 0 R 4266 0 R 4267 0 R 4268 0 R 4269 0 R 4270 0 R 4271 0 R 4272 0 R 4273 0 R 4274 0 R 4275 0 R 4276 0 R 4277 0 R 4278 0 R 4279 0 R 4280 0 R 4281 0 R 4282 0 R 4283 0 R 4284 0 R 4285 0 R 4286 0 R 4287 0 R 4288 0 R 4289 0 R 4290 0 R 4291 0 R 4292 0 R 4293 0 R 4294 0 R 4295 0 R 4296 0 R 4297 0 R 4298 0 R 4299 0 R 4300 0 R 4301 0 R 4302 0 R 4303 0 R 4304 0 R 4305 0 R 4306 0 R 4307 0 R 4308 0 R 4309 0 R 4310 0 R 4311 0 R 4312 0 R 4313 0 R 4314 0 R 4315 0 R 4316 0 R 4317 0 R]
 >>
 endobj
 15 0 obj
@@ -3462,7 +3462,7 @@ ET
 BT
 529.4315 794.676 Td
 /F1.0 10.5 Tf
-<323536> Tj
+<323537> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3502,7 +3502,7 @@ ET
 BT
 529.4315 776.196 Td
 /F1.0 10.5 Tf
-<323537> Tj
+<323538> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3542,7 +3542,7 @@ ET
 BT
 529.4315 757.716 Td
 /F1.0 10.5 Tf
-<323734> Tj
+<323735> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3582,7 +3582,7 @@ ET
 BT
 529.4315 739.236 Td
 /F1.0 10.5 Tf
-<333031> Tj
+<333032> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3622,7 +3622,7 @@ ET
 BT
 529.4315 720.756 Td
 /F1.0 10.5 Tf
-<333033> Tj
+<333034> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3662,7 +3662,7 @@ ET
 BT
 529.4315 702.276 Td
 /F1.0 10.5 Tf
-<333034> Tj
+<333035> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3702,7 +3702,7 @@ ET
 BT
 529.4315 683.796 Td
 /F1.0 10.5 Tf
-<333136> Tj
+<333137> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3742,7 +3742,7 @@ ET
 BT
 529.4315 665.316 Td
 /F1.0 10.5 Tf
-<333231> Tj
+<333232> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3782,7 +3782,7 @@ ET
 BT
 529.4315 646.836 Td
 /F1.0 10.5 Tf
-<333232> Tj
+<333233> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3822,7 +3822,7 @@ ET
 BT
 529.4315 628.356 Td
 /F1.0 10.5 Tf
-<333233> Tj
+<333234> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3862,7 +3862,7 @@ ET
 BT
 529.4315 609.876 Td
 /F1.0 10.5 Tf
-<333235> Tj
+<333236> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3902,7 +3902,7 @@ ET
 BT
 529.4315 591.396 Td
 /F1.0 10.5 Tf
-<333236> Tj
+<333237> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3942,7 +3942,7 @@ ET
 BT
 529.4315 572.916 Td
 /F1.0 10.5 Tf
-<333237> Tj
+<333238> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3982,7 +3982,7 @@ ET
 BT
 529.4315 554.436 Td
 /F1.0 10.5 Tf
-<333238> Tj
+<333239> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4022,7 +4022,7 @@ ET
 BT
 529.4315 535.956 Td
 /F1.0 10.5 Tf
-<333330> Tj
+<333331> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4062,7 +4062,7 @@ ET
 BT
 529.4315 517.476 Td
 /F1.0 10.5 Tf
-<333332> Tj
+<333333> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4102,7 +4102,7 @@ ET
 BT
 529.4315 498.996 Td
 /F1.0 10.5 Tf
-<333338> Tj
+<333339> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4142,7 +4142,7 @@ ET
 BT
 529.4315 480.516 Td
 /F1.0 10.5 Tf
-<333431> Tj
+<333432> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4182,7 +4182,7 @@ ET
 BT
 529.4315 462.036 Td
 /F1.0 10.5 Tf
-<333432> Tj
+<333433> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4222,7 +4222,7 @@ ET
 BT
 529.4315 443.556 Td
 /F1.0 10.5 Tf
-<333434> Tj
+<333435> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4262,7 +4262,7 @@ ET
 BT
 529.4315 425.076 Td
 /F1.0 10.5 Tf
-<333437> Tj
+<333438> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4302,7 +4302,7 @@ ET
 BT
 529.4315 406.596 Td
 /F1.0 10.5 Tf
-<333438> Tj
+<333439> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4342,7 +4342,7 @@ ET
 BT
 529.4315 388.116 Td
 /F1.0 10.5 Tf
-<333439> Tj
+<333530> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4382,7 +4382,7 @@ ET
 BT
 529.4315 369.636 Td
 /F1.0 10.5 Tf
-<333530> Tj
+<333531> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4422,7 +4422,7 @@ ET
 BT
 529.4315 351.156 Td
 /F1.0 10.5 Tf
-<333532> Tj
+<333533> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4462,7 +4462,7 @@ ET
 BT
 529.4315 332.676 Td
 /F1.0 10.5 Tf
-<333534> Tj
+<333535> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4502,7 +4502,7 @@ ET
 BT
 529.4315 314.196 Td
 /F1.0 10.5 Tf
-<333535> Tj
+<333536> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4542,7 +4542,7 @@ ET
 BT
 529.4315 295.716 Td
 /F1.0 10.5 Tf
-<333537> Tj
+<333538> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4582,7 +4582,7 @@ ET
 BT
 529.4315 277.236 Td
 /F1.0 10.5 Tf
-<333538> Tj
+<333539> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4622,7 +4622,7 @@ ET
 BT
 529.4315 258.756 Td
 /F1.0 10.5 Tf
-<333639> Tj
+<333730> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4662,7 +4662,7 @@ ET
 BT
 529.4315 240.276 Td
 /F1.0 10.5 Tf
-<333730> Tj
+<333731> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4702,7 +4702,7 @@ ET
 BT
 529.4315 221.796 Td
 /F1.0 10.5 Tf
-<333731> Tj
+<333732> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4742,7 +4742,7 @@ ET
 BT
 529.4315 203.316 Td
 /F1.0 10.5 Tf
-<333734> Tj
+<333735> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4782,7 +4782,7 @@ ET
 BT
 529.4315 184.836 Td
 /F1.0 10.5 Tf
-<333736> Tj
+<333737> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4822,7 +4822,7 @@ ET
 BT
 529.4315 166.356 Td
 /F1.0 10.5 Tf
-<333739> Tj
+<333830> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4862,7 +4862,7 @@ ET
 BT
 529.4315 147.876 Td
 /F1.0 10.5 Tf
-<333830> Tj
+<333831> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4902,7 +4902,7 @@ ET
 BT
 529.4315 129.396 Td
 /F1.0 10.5 Tf
-<333836> Tj
+<333837> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4942,7 +4942,7 @@ ET
 BT
 529.4315 110.916 Td
 /F1.0 10.5 Tf
-<333837> Tj
+<333838> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4982,7 +4982,7 @@ ET
 BT
 529.4315 92.436 Td
 /F1.0 10.5 Tf
-<333930> Tj
+<333931> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5022,7 +5022,7 @@ ET
 BT
 529.4315 73.956 Td
 /F1.0 10.5 Tf
-<333932> Tj
+<333933> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5062,7 +5062,7 @@ ET
 BT
 529.4315 55.476 Td
 /F1.0 10.5 Tf
-<333936> Tj
+<333937> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5084,7 +5084,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4303 0 R 4304 0 R 4305 0 R 4306 0 R 4307 0 R 4308 0 R 4309 0 R 4310 0 R 4311 0 R 4312 0 R 4313 0 R 4314 0 R 4315 0 R 4316 0 R 4317 0 R 4318 0 R 4319 0 R 4320 0 R 4321 0 R 4322 0 R 4323 0 R 4324 0 R 4325 0 R 4326 0 R 4327 0 R 4328 0 R 4329 0 R 4330 0 R 4331 0 R 4332 0 R 4333 0 R 4334 0 R 4335 0 R 4336 0 R 4337 0 R 4338 0 R 4339 0 R 4340 0 R 4341 0 R 4342 0 R 4343 0 R 4344 0 R 4345 0 R 4346 0 R 4347 0 R 4348 0 R 4349 0 R 4350 0 R 4351 0 R 4352 0 R 4353 0 R 4354 0 R 4355 0 R 4356 0 R 4357 0 R 4358 0 R 4359 0 R 4360 0 R 4361 0 R 4362 0 R 4363 0 R 4364 0 R 4365 0 R 4366 0 R 4367 0 R 4368 0 R 4369 0 R 4370 0 R 4371 0 R 4372 0 R 4373 0 R 4374 0 R 4375 0 R 4376 0 R 4377 0 R 4378 0 R 4379 0 R 4380 0 R 4381 0 R 4382 0 R 4383 0 R 4384 0 R]
+/Annots [4318 0 R 4319 0 R 4320 0 R 4321 0 R 4322 0 R 4323 0 R 4324 0 R 4325 0 R 4326 0 R 4327 0 R 4328 0 R 4329 0 R 4330 0 R 4331 0 R 4332 0 R 4333 0 R 4334 0 R 4335 0 R 4336 0 R 4337 0 R 4338 0 R 4339 0 R 4340 0 R 4341 0 R 4342 0 R 4343 0 R 4344 0 R 4345 0 R 4346 0 R 4347 0 R 4348 0 R 4349 0 R 4350 0 R 4351 0 R 4352 0 R 4353 0 R 4354 0 R 4355 0 R 4356 0 R 4357 0 R 4358 0 R 4359 0 R 4360 0 R 4361 0 R 4362 0 R 4363 0 R 4364 0 R 4365 0 R 4366 0 R 4367 0 R 4368 0 R 4369 0 R 4370 0 R 4371 0 R 4372 0 R 4373 0 R 4374 0 R 4375 0 R 4376 0 R 4377 0 R 4378 0 R 4379 0 R 4380 0 R 4381 0 R 4382 0 R 4383 0 R 4384 0 R 4385 0 R 4386 0 R 4387 0 R 4388 0 R 4389 0 R 4390 0 R 4391 0 R 4392 0 R 4393 0 R 4394 0 R 4395 0 R 4396 0 R 4397 0 R 4398 0 R 4399 0 R]
 >>
 endobj
 17 0 obj
@@ -5129,7 +5129,7 @@ ET
 BT
 529.4315 794.676 Td
 /F1.0 10.5 Tf
-<343033> Tj
+<343034> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5169,7 +5169,7 @@ ET
 BT
 529.4315 776.196 Td
 /F1.0 10.5 Tf
-<343034> Tj
+<343035> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5209,7 +5209,7 @@ ET
 BT
 529.4315 757.716 Td
 /F1.0 10.5 Tf
-<343035> Tj
+<343036> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5249,7 +5249,7 @@ ET
 BT
 529.4315 739.236 Td
 /F1.0 10.5 Tf
-<343037> Tj
+<343038> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5289,7 +5289,7 @@ ET
 BT
 529.4315 720.756 Td
 /F1.0 10.5 Tf
-<343132> Tj
+<343133> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5329,7 +5329,7 @@ ET
 BT
 529.4315 702.276 Td
 /F1.0 10.5 Tf
-<343138> Tj
+<343139> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5369,7 +5369,7 @@ ET
 BT
 529.4315 683.796 Td
 /F1.0 10.5 Tf
-<343230> Tj
+<343231> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5409,7 +5409,7 @@ ET
 BT
 529.4315 665.316 Td
 /F1.0 10.5 Tf
-<343231> Tj
+<343232> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5449,7 +5449,7 @@ ET
 BT
 529.4315 646.836 Td
 /F1.0 10.5 Tf
-<343232> Tj
+<343233> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5489,7 +5489,7 @@ ET
 BT
 529.4315 628.356 Td
 /F1.0 10.5 Tf
-<343233> Tj
+<343234> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5529,7 +5529,7 @@ ET
 BT
 529.4315 609.876 Td
 /F1.0 10.5 Tf
-<343235> Tj
+<343236> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5569,7 +5569,7 @@ ET
 BT
 529.4315 591.396 Td
 /F1.0 10.5 Tf
-<343236> Tj
+<343237> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5609,7 +5609,7 @@ ET
 BT
 529.4315 572.916 Td
 /F1.0 10.5 Tf
-<343330> Tj
+<343331> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5649,7 +5649,7 @@ ET
 BT
 529.4315 554.436 Td
 /F1.0 10.5 Tf
-<343331> Tj
+<343332> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5689,7 +5689,7 @@ ET
 BT
 529.4315 535.956 Td
 /F1.0 10.5 Tf
-<343335> Tj
+<343336> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5729,7 +5729,7 @@ ET
 BT
 529.4315 517.476 Td
 /F1.0 10.5 Tf
-<343336> Tj
+<343337> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5769,7 +5769,7 @@ ET
 BT
 529.4315 498.996 Td
 /F1.0 10.5 Tf
-<343339> Tj
+<343430> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5809,7 +5809,7 @@ ET
 BT
 529.4315 480.516 Td
 /F1.0 10.5 Tf
-<343434> Tj
+<343435> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5849,7 +5849,7 @@ ET
 BT
 529.4315 462.036 Td
 /F1.0 10.5 Tf
-<343435> Tj
+<343436> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5889,7 +5889,7 @@ ET
 BT
 529.4315 443.556 Td
 /F1.0 10.5 Tf
-<343437> Tj
+<343438> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5929,7 +5929,7 @@ ET
 BT
 529.4315 425.076 Td
 /F1.0 10.5 Tf
-<343438> Tj
+<343439> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5969,7 +5969,7 @@ ET
 BT
 529.4315 406.596 Td
 /F1.0 10.5 Tf
-<343439> Tj
+<343530> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6009,7 +6009,7 @@ ET
 BT
 529.4315 388.116 Td
 /F1.0 10.5 Tf
-<343530> Tj
+<343531> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6049,7 +6049,7 @@ ET
 BT
 529.4315 369.636 Td
 /F1.0 10.5 Tf
-<343531> Tj
+<343532> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6089,7 +6089,7 @@ ET
 BT
 529.4315 351.156 Td
 /F1.0 10.5 Tf
-<343532> Tj
+<343533> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6129,7 +6129,7 @@ ET
 BT
 529.4315 332.676 Td
 /F1.0 10.5 Tf
-<343536> Tj
+<343537> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6169,7 +6169,7 @@ ET
 BT
 529.4315 314.196 Td
 /F1.0 10.5 Tf
-<343537> Tj
+<343538> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6209,7 +6209,7 @@ ET
 BT
 529.4315 295.716 Td
 /F1.0 10.5 Tf
-<343635> Tj
+<343636> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6249,7 +6249,7 @@ ET
 BT
 529.4315 277.236 Td
 /F1.0 10.5 Tf
-<343639> Tj
+<343730> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6289,7 +6289,7 @@ ET
 BT
 529.4315 258.756 Td
 /F1.0 10.5 Tf
-<343731> Tj
+<343732> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6329,7 +6329,7 @@ ET
 BT
 529.4315 240.276 Td
 /F1.0 10.5 Tf
-<343734> Tj
+<343735> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6369,7 +6369,7 @@ ET
 BT
 529.4315 221.796 Td
 /F1.0 10.5 Tf
-<343735> Tj
+<343736> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6409,7 +6409,7 @@ ET
 BT
 529.4315 203.316 Td
 /F1.0 10.5 Tf
-<343832> Tj
+<343833> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6449,7 +6449,7 @@ ET
 BT
 529.4315 184.836 Td
 /F1.0 10.5 Tf
-<343834> Tj
+<343835> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6489,7 +6489,7 @@ ET
 BT
 529.4315 166.356 Td
 /F1.0 10.5 Tf
-<343835> Tj
+<343836> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6529,7 +6529,7 @@ ET
 BT
 529.4315 147.876 Td
 /F1.0 10.5 Tf
-<343836> Tj
+<343837> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6569,7 +6569,7 @@ ET
 BT
 529.4315 129.396 Td
 /F1.0 10.5 Tf
-<343837> Tj
+<343838> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6609,7 +6609,7 @@ ET
 BT
 529.4315 110.916 Td
 /F1.0 10.5 Tf
-<343930> Tj
+<343931> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6649,7 +6649,7 @@ ET
 BT
 529.4315 92.436 Td
 /F1.0 10.5 Tf
-<343931> Tj
+<343932> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6689,7 +6689,7 @@ ET
 BT
 529.4315 73.956 Td
 /F1.0 10.5 Tf
-<343932> Tj
+<343933> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6729,7 +6729,7 @@ ET
 BT
 529.4315 55.476 Td
 /F1.0 10.5 Tf
-<343933> Tj
+<343934> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6751,7 +6751,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4385 0 R 4386 0 R 4387 0 R 4388 0 R 4389 0 R 4390 0 R 4391 0 R 4392 0 R 4393 0 R 4394 0 R 4395 0 R 4396 0 R 4397 0 R 4398 0 R 4399 0 R 4400 0 R 4401 0 R 4402 0 R 4403 0 R 4404 0 R 4405 0 R 4406 0 R 4407 0 R 4408 0 R 4409 0 R 4410 0 R 4411 0 R 4412 0 R 4413 0 R 4414 0 R 4415 0 R 4416 0 R 4417 0 R 4418 0 R 4419 0 R 4420 0 R 4421 0 R 4422 0 R 4423 0 R 4424 0 R 4425 0 R 4426 0 R 4427 0 R 4428 0 R 4429 0 R 4430 0 R 4431 0 R 4432 0 R 4433 0 R 4434 0 R 4435 0 R 4436 0 R 4437 0 R 4438 0 R 4439 0 R 4440 0 R 4441 0 R 4442 0 R 4443 0 R 4444 0 R 4445 0 R 4446 0 R 4447 0 R 4448 0 R 4449 0 R 4450 0 R 4451 0 R 4452 0 R 4453 0 R 4454 0 R 4455 0 R 4456 0 R 4457 0 R 4458 0 R 4459 0 R 4460 0 R 4461 0 R 4462 0 R 4463 0 R 4464 0 R 4465 0 R 4466 0 R]
+/Annots [4400 0 R 4401 0 R 4402 0 R 4403 0 R 4404 0 R 4405 0 R 4406 0 R 4407 0 R 4408 0 R 4409 0 R 4410 0 R 4411 0 R 4412 0 R 4413 0 R 4414 0 R 4415 0 R 4416 0 R 4417 0 R 4418 0 R 4419 0 R 4420 0 R 4421 0 R 4422 0 R 4423 0 R 4424 0 R 4425 0 R 4426 0 R 4427 0 R 4428 0 R 4429 0 R 4430 0 R 4431 0 R 4432 0 R 4433 0 R 4434 0 R 4435 0 R 4436 0 R 4437 0 R 4438 0 R 4439 0 R 4440 0 R 4441 0 R 4442 0 R 4443 0 R 4444 0 R 4445 0 R 4446 0 R 4447 0 R 4448 0 R 4449 0 R 4450 0 R 4451 0 R 4452 0 R 4453 0 R 4454 0 R 4455 0 R 4456 0 R 4457 0 R 4458 0 R 4459 0 R 4460 0 R 4461 0 R 4462 0 R 4463 0 R 4464 0 R 4465 0 R 4466 0 R 4467 0 R 4468 0 R 4469 0 R 4470 0 R 4471 0 R 4472 0 R 4473 0 R 4474 0 R 4475 0 R 4476 0 R 4477 0 R 4478 0 R 4479 0 R 4480 0 R 4481 0 R]
 >>
 endobj
 19 0 obj
@@ -6796,7 +6796,7 @@ ET
 BT
 529.4315 794.676 Td
 /F1.0 10.5 Tf
-<343934> Tj
+<343935> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6836,7 +6836,7 @@ ET
 BT
 529.4315 776.196 Td
 /F1.0 10.5 Tf
-<343935> Tj
+<343936> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6876,7 +6876,7 @@ ET
 BT
 529.4315 757.716 Td
 /F1.0 10.5 Tf
-<343936> Tj
+<343937> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6916,7 +6916,7 @@ ET
 BT
 529.4315 739.236 Td
 /F1.0 10.5 Tf
-<343937> Tj
+<343938> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6956,7 +6956,7 @@ ET
 BT
 529.4315 720.756 Td
 /F1.0 10.5 Tf
-<343938> Tj
+<343939> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6996,7 +6996,7 @@ ET
 BT
 529.4315 702.276 Td
 /F1.0 10.5 Tf
-<353032> Tj
+<353033> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7036,7 +7036,7 @@ ET
 BT
 529.4315 683.796 Td
 /F1.0 10.5 Tf
-<353033> Tj
+<353034> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7076,7 +7076,7 @@ ET
 BT
 529.4315 665.316 Td
 /F1.0 10.5 Tf
-<353230> Tj
+<353232> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7116,7 +7116,7 @@ ET
 BT
 529.4315 646.836 Td
 /F1.0 10.5 Tf
-<353231> Tj
+<353233> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7156,7 +7156,7 @@ ET
 BT
 529.4315 628.356 Td
 /F1.0 10.5 Tf
-<353237> Tj
+<353239> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7196,7 +7196,7 @@ ET
 BT
 529.4315 609.876 Td
 /F1.0 10.5 Tf
-<353332> Tj
+<353334> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7236,7 +7236,7 @@ ET
 BT
 529.4315 591.396 Td
 /F1.0 10.5 Tf
-<353336> Tj
+<353338> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7276,7 +7276,7 @@ ET
 BT
 529.4315 572.916 Td
 /F1.0 10.5 Tf
-<353439> Tj
+<353531> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7316,7 +7316,7 @@ ET
 BT
 529.4315 554.436 Td
 /F1.0 10.5 Tf
-<353537> Tj
+<353539> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7356,7 +7356,7 @@ ET
 BT
 529.4315 535.956 Td
 /F1.0 10.5 Tf
-<353539> Tj
+<353631> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7396,7 +7396,7 @@ ET
 BT
 529.4315 517.476 Td
 /F1.0 10.5 Tf
-<353633> Tj
+<353635> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7436,7 +7436,7 @@ ET
 BT
 529.4315 498.996 Td
 /F1.0 10.5 Tf
-<353634> Tj
+<353636> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7476,7 +7476,7 @@ ET
 BT
 529.4315 480.516 Td
 /F1.0 10.5 Tf
-<353638> Tj
+<353730> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7516,7 +7516,7 @@ ET
 BT
 529.4315 462.036 Td
 /F1.0 10.5 Tf
-<353639> Tj
+<353731> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7556,7 +7556,7 @@ ET
 BT
 529.4315 443.556 Td
 /F1.0 10.5 Tf
-<353732> Tj
+<353734> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7596,7 +7596,7 @@ ET
 BT
 529.4315 425.076 Td
 /F1.0 10.5 Tf
-<353737> Tj
+<353739> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7636,7 +7636,7 @@ ET
 BT
 529.4315 406.596 Td
 /F1.0 10.5 Tf
-<353738> Tj
+<353830> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7676,7 +7676,7 @@ ET
 BT
 529.4315 388.116 Td
 /F1.0 10.5 Tf
-<353831> Tj
+<353833> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7716,7 +7716,7 @@ ET
 BT
 529.4315 369.636 Td
 /F1.0 10.5 Tf
-<353832> Tj
+<353834> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7756,7 +7756,7 @@ ET
 BT
 529.4315 351.156 Td
 /F1.0 10.5 Tf
-<353835> Tj
+<353837> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7796,7 +7796,7 @@ ET
 BT
 529.4315 332.676 Td
 /F1.0 10.5 Tf
-<353838> Tj
+<353930> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7836,7 +7836,7 @@ ET
 BT
 529.4315 314.196 Td
 /F1.0 10.5 Tf
-<353936> Tj
+<353938> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7876,7 +7876,7 @@ ET
 BT
 529.4315 295.716 Td
 /F1.0 10.5 Tf
-<353937> Tj
+<353939> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7927,7 +7927,7 @@ ET
 BT
 529.4315 277.236 Td
 /F1.0 10.5 Tf
-<353938> Tj
+<363030> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7967,7 +7967,7 @@ ET
 BT
 529.4315 258.756 Td
 /F1.0 10.5 Tf
-<353939> Tj
+<363031> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8007,7 +8007,7 @@ ET
 BT
 529.4315 240.276 Td
 /F1.0 10.5 Tf
-<363133> Tj
+<363135> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8047,7 +8047,7 @@ ET
 BT
 529.4315 221.796 Td
 /F1.0 10.5 Tf
-<363237> Tj
+<363239> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8087,7 +8087,7 @@ ET
 BT
 529.4315 203.316 Td
 /F1.0 10.5 Tf
-<363238> Tj
+<363330> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8127,7 +8127,7 @@ ET
 BT
 529.4315 184.836 Td
 /F1.0 10.5 Tf
-<363330> Tj
+<363332> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8167,7 +8167,7 @@ ET
 BT
 529.4315 166.356 Td
 /F1.0 10.5 Tf
-<363332> Tj
+<363334> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8207,7 +8207,7 @@ ET
 BT
 529.4315 147.876 Td
 /F1.0 10.5 Tf
-<363334> Tj
+<363336> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8247,7 +8247,7 @@ ET
 BT
 529.4315 129.396 Td
 /F1.0 10.5 Tf
-<363336> Tj
+<363338> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8287,7 +8287,7 @@ ET
 BT
 529.4315 110.916 Td
 /F1.0 10.5 Tf
-<363337> Tj
+<363339> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8327,7 +8327,7 @@ ET
 BT
 529.4315 92.436 Td
 /F1.0 10.5 Tf
-<363339> Tj
+<363431> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8367,7 +8367,7 @@ ET
 BT
 529.4315 73.956 Td
 /F1.0 10.5 Tf
-<363431> Tj
+<363433> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8407,7 +8407,7 @@ ET
 BT
 529.4315 55.476 Td
 /F1.0 10.5 Tf
-<363432> Tj
+<363434> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8429,7 +8429,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4467 0 R 4468 0 R 4469 0 R 4470 0 R 4471 0 R 4472 0 R 4473 0 R 4474 0 R 4475 0 R 4476 0 R 4477 0 R 4478 0 R 4479 0 R 4480 0 R 4481 0 R 4482 0 R 4483 0 R 4484 0 R 4485 0 R 4486 0 R 4487 0 R 4488 0 R 4489 0 R 4490 0 R 4491 0 R 4492 0 R 4493 0 R 4494 0 R 4495 0 R 4496 0 R 4497 0 R 4498 0 R 4499 0 R 4500 0 R 4501 0 R 4502 0 R 4503 0 R 4504 0 R 4505 0 R 4506 0 R 4507 0 R 4508 0 R 4509 0 R 4510 0 R 4511 0 R 4512 0 R 4513 0 R 4514 0 R 4515 0 R 4516 0 R 4517 0 R 4518 0 R 4519 0 R 4520 0 R 4521 0 R 4522 0 R 4523 0 R 4524 0 R 4525 0 R 4526 0 R 4527 0 R 4528 0 R 4529 0 R 4530 0 R 4531 0 R 4532 0 R 4533 0 R 4534 0 R 4535 0 R 4536 0 R 4537 0 R 4538 0 R 4539 0 R 4540 0 R 4541 0 R 4542 0 R 4543 0 R 4544 0 R 4545 0 R 4546 0 R 4547 0 R 4548 0 R 4549 0 R 4550 0 R]
+/Annots [4482 0 R 4483 0 R 4484 0 R 4485 0 R 4486 0 R 4487 0 R 4488 0 R 4489 0 R 4490 0 R 4491 0 R 4492 0 R 4493 0 R 4494 0 R 4495 0 R 4496 0 R 4497 0 R 4498 0 R 4499 0 R 4500 0 R 4501 0 R 4502 0 R 4503 0 R 4504 0 R 4505 0 R 4506 0 R 4507 0 R 4508 0 R 4509 0 R 4510 0 R 4511 0 R 4512 0 R 4513 0 R 4514 0 R 4515 0 R 4516 0 R 4517 0 R 4518 0 R 4519 0 R 4520 0 R 4521 0 R 4522 0 R 4523 0 R 4524 0 R 4525 0 R 4526 0 R 4527 0 R 4528 0 R 4529 0 R 4530 0 R 4531 0 R 4532 0 R 4533 0 R 4534 0 R 4535 0 R 4536 0 R 4537 0 R 4538 0 R 4539 0 R 4540 0 R 4541 0 R 4542 0 R 4543 0 R 4544 0 R 4545 0 R 4546 0 R 4547 0 R 4548 0 R 4549 0 R 4550 0 R 4551 0 R 4552 0 R 4553 0 R 4554 0 R 4555 0 R 4556 0 R 4557 0 R 4558 0 R 4559 0 R 4560 0 R 4561 0 R 4562 0 R 4563 0 R 4564 0 R 4565 0 R]
 >>
 endobj
 21 0 obj
@@ -8474,7 +8474,7 @@ ET
 BT
 529.4315 794.676 Td
 /F1.0 10.5 Tf
-<363439> Tj
+<363531> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8514,7 +8514,7 @@ ET
 BT
 529.4315 776.196 Td
 /F1.0 10.5 Tf
-<363530> Tj
+<363532> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8554,7 +8554,7 @@ ET
 BT
 529.4315 757.716 Td
 /F1.0 10.5 Tf
-<363531> Tj
+<363533> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8594,7 +8594,7 @@ ET
 BT
 529.4315 739.236 Td
 /F1.0 10.5 Tf
-<363532> Tj
+<363534> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8634,7 +8634,7 @@ ET
 BT
 529.4315 720.756 Td
 /F1.0 10.5 Tf
-<363533> Tj
+<363535> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8674,7 +8674,7 @@ ET
 BT
 529.4315 702.276 Td
 /F1.0 10.5 Tf
-<363534> Tj
+<363536> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8714,7 +8714,7 @@ ET
 BT
 529.4315 683.796 Td
 /F1.0 10.5 Tf
-<363635> Tj
+<363637> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8754,7 +8754,7 @@ ET
 BT
 529.4315 665.316 Td
 /F1.0 10.5 Tf
-<363638> Tj
+<363730> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8794,7 +8794,7 @@ ET
 BT
 529.4315 646.836 Td
 /F1.0 10.5 Tf
-<363732> Tj
+<363734> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8834,7 +8834,7 @@ ET
 BT
 529.4315 628.356 Td
 /F1.0 10.5 Tf
-<363738> Tj
+<363830> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8874,7 +8874,7 @@ ET
 BT
 529.4315 609.876 Td
 /F1.0 10.5 Tf
-<363839> Tj
+<363931> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8914,7 +8914,7 @@ ET
 BT
 529.4315 591.396 Td
 /F1.0 10.5 Tf
-<363930> Tj
+<363932> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8954,7 +8954,7 @@ ET
 BT
 529.4315 572.916 Td
 /F1.0 10.5 Tf
-<363931> Tj
+<363933> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8994,7 +8994,7 @@ ET
 BT
 529.4315 554.436 Td
 /F1.0 10.5 Tf
-<373030> Tj
+<373032> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9034,7 +9034,7 @@ ET
 BT
 529.4315 535.956 Td
 /F1.0 10.5 Tf
-<373031> Tj
+<373033> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9074,7 +9074,7 @@ ET
 BT
 529.4315 517.476 Td
 /F1.0 10.5 Tf
-<373032> Tj
+<373034> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9114,7 +9114,7 @@ ET
 BT
 529.4315 498.996 Td
 /F1.0 10.5 Tf
-<373033> Tj
+<373035> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9154,7 +9154,7 @@ ET
 BT
 529.4315 480.516 Td
 /F1.0 10.5 Tf
-<373034> Tj
+<373036> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9194,7 +9194,7 @@ ET
 BT
 529.4315 462.036 Td
 /F1.0 10.5 Tf
-<373036> Tj
+<373038> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9234,7 +9234,7 @@ ET
 BT
 529.4315 443.556 Td
 /F1.0 10.5 Tf
-<373037> Tj
+<373039> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9274,7 +9274,7 @@ ET
 BT
 529.4315 425.076 Td
 /F1.0 10.5 Tf
-<373038> Tj
+<373130> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9296,7 +9296,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4551 0 R 4552 0 R 4553 0 R 4554 0 R 4555 0 R 4556 0 R 4557 0 R 4558 0 R 4559 0 R 4560 0 R 4561 0 R 4562 0 R 4563 0 R 4564 0 R 4565 0 R 4566 0 R 4567 0 R 4568 0 R 4569 0 R 4570 0 R 4571 0 R 4572 0 R 4573 0 R 4574 0 R 4575 0 R 4576 0 R 4577 0 R 4578 0 R 4579 0 R 4580 0 R 4581 0 R 4582 0 R 4583 0 R 4584 0 R 4585 0 R 4586 0 R 4587 0 R 4588 0 R 4589 0 R 4590 0 R 4591 0 R 4592 0 R]
+/Annots [4566 0 R 4567 0 R 4568 0 R 4569 0 R 4570 0 R 4571 0 R 4572 0 R 4573 0 R 4574 0 R 4575 0 R 4576 0 R 4577 0 R 4578 0 R 4579 0 R 4580 0 R 4581 0 R 4582 0 R 4583 0 R 4584 0 R 4585 0 R 4586 0 R 4587 0 R 4588 0 R 4589 0 R 4590 0 R 4591 0 R 4592 0 R 4593 0 R 4594 0 R 4595 0 R 4596 0 R 4597 0 R 4598 0 R 4599 0 R 4600 0 R 4601 0 R 4602 0 R 4603 0 R 4604 0 R 4605 0 R 4606 0 R 4607 0 R]
 >>
 endobj
 23 0 obj
@@ -10108,7 +10108,7 @@ endobj
 /F4.0 35 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp1 4593 0 R
+/XObject << /Stamp1 4608 0 R
 >>
 >>
 /Annots [30 0 R 31 0 R 32 0 R 34 0 R 36 0 R 37 0 R 39 0 R 40 0 R 41 0 R]
@@ -10123,7 +10123,7 @@ endobj
 >>
 endobj
 27 0 obj
-<< /Kids [640 0 R 3619 0 R 1903 0 R 641 0 R 3546 0 R 1148 0 R 2519 0 R]
+<< /Kids [642 0 R 3632 0 R 1914 0 R 643 0 R 3560 0 R 1158 0 R 2529 0 R 3760 0 R]
 >>
 endobj
 28 0 obj
@@ -10133,11 +10133,11 @@ endobj
 << /Type /Font
 /BaseFont /358635+NotoSerif-Bold
 /Subtype /TrueType
-/FontDescriptor 4827 0 R
+/FontDescriptor 4842 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4829 0 R
-/ToUnicode 4828 0 R
+/Widths 4844 0 R
+/ToUnicode 4843 0 R
 >>
 endobj
 30 0 obj
@@ -10177,11 +10177,11 @@ endobj
 << /Type /Font
 /BaseFont /260f03+NotoSerif-Italic
 /Subtype /TrueType
-/FontDescriptor 4831 0 R
+/FontDescriptor 4846 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4833 0 R
-/ToUnicode 4832 0 R
+/Widths 4848 0 R
+/ToUnicode 4847 0 R
 >>
 endobj
 34 0 obj
@@ -10199,11 +10199,11 @@ endobj
 << /Type /Font
 /BaseFont /c7d210+mplus1mn-regular
 /Subtype /TrueType
-/FontDescriptor 4835 0 R
+/FontDescriptor 4850 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4837 0 R
-/ToUnicode 4836 0 R
+/Widths 4852 0 R
+/ToUnicode 4851 0 R
 >>
 endobj
 36 0 obj
@@ -10229,11 +10229,11 @@ endobj
 << /Type /Font
 /BaseFont /34c70d+NotoSerif
 /Subtype /TrueType
-/FontDescriptor 4839 0 R
+/FontDescriptor 4854 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4841 0 R
-/ToUnicode 4840 0 R
+/Widths 4856 0 R
+/ToUnicode 4855 0 R
 >>
 endobj
 39 0 obj
@@ -10667,7 +10667,7 @@ endobj
 /F5.1 45 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4594 0 R
+/XObject << /Stamp2 4609 0 R
 >>
 >>
 >>
@@ -10676,11 +10676,11 @@ endobj
 << /Type /Font
 /BaseFont /26ec65+FontAwesome
 /Subtype /TrueType
-/FontDescriptor 4843 0 R
+/FontDescriptor 4858 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4845 0 R
-/ToUnicode 4844 0 R
+/Widths 4860 0 R
+/ToUnicode 4859 0 R
 >>
 endobj
 46 0 obj
@@ -10738,7 +10738,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4593 0 R
+/XObject << /Stamp1 4608 0 R
 >>
 >>
 >>
@@ -10823,7 +10823,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4594 0 R
+/XObject << /Stamp2 4609 0 R
 >>
 >>
 /Annots [52 0 R]
@@ -12396,7 +12396,7 @@ endobj
 /F1.1 38 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4593 0 R
+/XObject << /Stamp1 4608 0 R
 >>
 >>
 /Annots [57 0 R 59 0 R]
@@ -13516,7 +13516,7 @@ endobj
 /F1.0 10 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4594 0 R
+/XObject << /Stamp2 4609 0 R
 >>
 >>
 >>
@@ -14395,7 +14395,7 @@ endobj
 /F3.0 33 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4593 0 R
+/XObject << /Stamp1 4608 0 R
 >>
 >>
 /Annots [64 0 R]
@@ -15185,7 +15185,7 @@ endobj
 /Font << /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4594 0 R
+/XObject << /Stamp2 4609 0 R
 >>
 >>
 >>
@@ -15904,7 +15904,7 @@ endobj
 /Font << /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4593 0 R
+/XObject << /Stamp1 4608 0 R
 >>
 >>
 >>
@@ -16780,7 +16780,7 @@ endobj
 /F2.0 29 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4594 0 R
+/XObject << /Stamp2 4609 0 R
 >>
 >>
 /Annots [73 0 R 74 0 R 75 0 R 76 0 R]
@@ -17770,7 +17770,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4593 0 R
+/XObject << /Stamp1 4608 0 R
 >>
 >>
 /Annots [79 0 R]
@@ -18693,7 +18693,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4594 0 R
+/XObject << /Stamp2 4609 0 R
 >>
 >>
 >>
@@ -20204,7 +20204,7 @@ endobj
 /F4.0 35 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4593 0 R
+/XObject << /Stamp1 4608 0 R
 >>
 >>
 /Annots [84 0 R 86 0 R]
@@ -21552,7 +21552,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4594 0 R
+/XObject << /Stamp2 4609 0 R
 >>
 >>
 /Annots [90 0 R]
@@ -22626,7 +22626,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4593 0 R
+/XObject << /Stamp1 4608 0 R
 >>
 >>
 >>
@@ -23310,7 +23310,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4594 0 R
+/XObject << /Stamp2 4609 0 R
 >>
 >>
 >>
@@ -24101,7 +24101,7 @@ endobj
 /F1.0 10 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4593 0 R
+/XObject << /Stamp1 4608 0 R
 >>
 >>
 /Annots [97 0 R 98 0 R 99 0 R 101 0 R]
@@ -24149,7 +24149,7 @@ endobj
 >>
 endobj
 102 0 obj
-<< /Length 2288
+<< /Length 2391
 >>
 stream
 q
@@ -24259,12 +24259,27 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-2.5355 Tw
+3.6172 Tw
 
 BT
 48.24 714.846 Td
 /F1.0 10.5 Tf
-[<48426173652074657374696e6720616e64206465706c6f> 20.0195 <796d656e7420676f657320736d6f6f74686c79> 89.8438 <2c20616e642070726576656e742064617461206c6f73732e2046> 40.0391 <616d696c696172697a6520796f757273656c662077697468>] TJ
+[<48426173652074657374696e6720616e64206465706c6f> 20.0195 <796d656e7420676f657320736d6f6f74686c79> 89.8438 <2e2046> 40.0391 <616d696c696172697a6520796f757273656c66207769746820>] TJ
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2588 0.5451 0.7922 scn
+0.2588 0.5451 0.7922 SCN
+
+3.6172 Tw
+
+BT
+439.3918 714.846 Td
+/F1.0 10.5 Tf
+[<537570706f727420616e642054> 29.7852 <657374696e67>] TJ
 ET
 
 
@@ -24277,7 +24292,7 @@ ET
 BT
 48.24 699.066 Td
 /F1.0 10.5 Tf
-[<537570706f727420616e642054> 29.7852 <657374696e67204578706563746174696f6e73>] TJ
+<4578706563746174696f6e73> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -24286,7 +24301,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-215.4128 699.066 Td
+112.2795 699.066 Td
 /F1.0 10.5 Tf
 <2061732077656c6c2e> Tj
 ET
@@ -24330,10 +24345,10 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4594 0 R
+/XObject << /Stamp2 4609 0 R
 >>
 >>
-/Annots [105 0 R 106 0 R 107 0 R]
+/Annots [105 0 R 106 0 R 107 0 R 108 0 R]
 >>
 endobj
 104 0 obj
@@ -24359,11 +24374,19 @@ endobj
 << /Border [0 0 0]
 /Dest (hbase_supported_tested_definitions)
 /Subtype /Link
-/Rect [48.24 696.0 215.4128 710.28]
+/Rect [439.3918 711.78 547.04 726.06]
 /Type /Annot
 >>
 endobj
 108 0 obj
+<< /Border [0 0 0]
+/Dest (hbase_supported_tested_definitions)
+/Subtype /Link
+/Rect [48.24 696.0 112.2795 710.28]
+/Type /Annot
+>>
+endobj
+109 0 obj
 << /Length 12480
 >>
 stream
@@ -25178,7 +25201,7 @@ Q
 
 endstream
 endobj
-109 0 obj
+110 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -25186,7 +25209,7 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 108 0 R
+/Contents 109 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
@@ -25194,16 +25217,16 @@ endobj
 /F4.0 35 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4593 0 R
+/XObject << /Stamp1 4608 0 R
 >>
 >>
-/Annots [111 0 R 112 0 R]
+/Annots [112 0 R 113 0 R]
 >>
 endobj
-110 0 obj
-[109 0 R /XYZ 0 841.89 null]
-endobj
 111 0 obj
+[110 0 R /XYZ 0 841.89 null]
+endobj
+112 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -25214,7 +25237,7 @@ endobj
 /Type /Annot
 >>
 endobj
-112 0 obj
+113 0 obj
 << /Border [0 0 0]
 /Dest (security)
 /Subtype /Link
@@ -25222,7 +25245,7 @@ endobj
 /Type /Annot
 >>
 endobj
-113 0 obj
+114 0 obj
 << /Length 3240
 >>
 stream
@@ -25459,7 +25482,7 @@ Q
 
 endstream
 endobj
-114 0 obj
+115 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -25467,19 +25490,19 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 113 0 R
+/Contents 114 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F5.1 45 0 R
 /F3.0 33 0 R
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4594 0 R
+/XObject << /Stamp2 4609 0 R
 >>
 >>
 >>
 endobj
-115 0 obj
+116 0 obj
 << /Length 20350
 >>
 stream
@@ -26938,7 +26961,7 @@ Q
 
 endstream
 endobj
-116 0 obj
+117 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -26946,7 +26969,7 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 115 0 R
+/Contents 116 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
@@ -26954,19 +26977,19 @@ endobj
 /F5.1 45 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4593 0 R
+/XObject << /Stamp1 4608 0 R
 >>
 >>
-/Annots [119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 127 0 R 128 0 R 129 0 R 130 0 R]
+/Annots [120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 128 0 R 129 0 R 130 0 R 131 0 R]
 >>
 endobj
-117 0 obj
-[116 0 R /XYZ 0 841.89 null]
-endobj
 118 0 obj
-[116 0 R /XYZ 0 737.39 null]
+[117 0 R /XYZ 0 841.89 null]
 endobj
 119 0 obj
+[117 0 R /XYZ 0 737.39 null]
+endobj
+120 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -26977,7 +27000,7 @@ endobj
 /Type /Annot
 >>
 endobj
-120 0 obj
+121 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -26988,7 +27011,7 @@ endobj
 /Type /Annot
 >>
 endobj
-121 0 obj
+122 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -26999,7 +27022,7 @@ endobj
 /Type /Annot
 >>
 endobj
-122 0 obj
+123 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -27010,7 +27033,7 @@ endobj
 /Type /Annot
 >>
 endobj
-123 0 obj
+124 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -27021,7 +27044,7 @@ endobj
 /Type /Annot
 >>
 endobj
-124 0 obj
+125 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -27032,7 +27055,7 @@ endobj
 /Type /Annot
 >>
 endobj
-125 0 obj
+126 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -27043,10 +27066,10 @@ endobj
 /Type /Annot
 >>
 endobj
-126 0 obj
-[116 0 R /XYZ 0 294.377 null]
-endobj
 127 0 obj
+[117 0 R /XYZ 0 294.377 null]
+endobj
+128 0 obj
 << /Border [0 0 0]
 /Dest (passwordless.ssh.quickstart)
 /Subtype /Link
@@ -27054,7 +27077,7 @@ endobj
 /Type /Annot
 >>
 endobj
-128 0 obj
+129 0 obj
 << /Border [0 0 0]
 /Dest (passwordless.ssh.quickstart)
 /Subtype /Link
@@ -27062,7 +27085,7 @@ endobj
 /Type /Annot
 >>
 endobj
-129 0 obj
+130 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -27073,7 +27096,7 @@ endobj
 /Type /Annot
 >>
 endobj
-130 0 obj
+131 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -27084,8 +27107,8 @@ endobj
 /Type /Annot
 >>
 endobj
-131 0 obj
-<< /Length 15467
+132 0 obj
+<< /Length 14989
 >>
 stream
 q
@@ -27854,55 +27877,32 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.0631 Tw
-
 BT
 63.24 172.705 Td
 /F1.0 10.5 Tf
 <6c6f61642c206120> Tj
 ET
 
-
-0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
 0.6941 0.1294 0.2745 scn
 0.6941 0.1294 0.2745 SCN
 
-0.0631 Tw
-
 BT
-98.9823 172.705 Td
+98.856 172.705 Td
 /F4.0 10.5 Tf
 <756c696d6974202d75> Tj
 ET
 
-
-0.0 Tw
-0.0 0.0 0.0 SCN
-0.0 0.0 0.0 scn
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
-
-0.0631 Tw
-
-BT
-146.2954 172.705 Td
-/F1.0 10.5 Tf
-<207468617420697320746f6f206c6f772063616e206361757365204f75744f664d656d6f72794572726f7220657863657074696f6e732e20536565204a61636b204c6576696ed573206d616a6f72> Tj
-ET
-
-
-0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
 BT
-63.24 156.925 Td
+146.106 172.705 Td
 /F1.0 10.5 Tf
-<484446532069737375657320746872656164206f6e207468652068626173652d7573657273206d61696c696e67206c6973742c2066726f6d20323031312e> Tj
+<207468617420697320746f6f206c6f772063616e206361757365204f75744f664d656d6f72794572726f7220657863657074696f6e732e> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -27913,7 +27913,7 @@ ET
 0.3796 Tw
 
 BT
-63.24 129.145 Td
+63.24 144.925 Td
 /F1.0 10.5 Tf
 <436f6e6669677572696e6720746865206d6178696d756d206e756d626572206f662066696c652064657363726970746f727320616e642070726f63657373657320666f722074686520757365722077686f2069732072756e6e696e67> Tj
 ET
@@ -27928,7 +27928,7 @@ ET
 0.1 Tw
 
 BT
-63.24 113.365 Td
+63.24 129.145 Td
 /F1.0 10.5 Tf
 [<7468652048426173652070726f6365737320697320616e206f706572> 20.0195 <6174696e672073797374656d20636f6e6669677572> 20.0195 <6174696f6e2c2072> 20.0195 <6174686572207468616e20616e20484261736520636f6e6669677572> 20.0195 <6174696f6e2e204974206973>] TJ
 ET
@@ -27943,7 +27943,7 @@ ET
 0.4947 Tw
 
 BT
-63.24 97.585 Td
+63.24 113.365 Td
 /F1.0 10.5 Tf
 [<616c736f20696d706f7274616e7420746f20626520737572652074686174207468652073657474696e677320617265206368616e67656420666f7220746865207573657220746861742061637475616c6c792072756e732048426173652e2054> 29.7852 <6f>] TJ
 ET
@@ -27958,7 +27958,7 @@ ET
 1.2668 Tw
 
 BT
-63.24 81.805 Td
+63.24 97.585 Td
 /F1.0 10.5 Tf
 [<736565207768696368207573657220737461727465642048426173652c20616e6420746861742075736572> -29.7852 <d57320756c696d697420636f6e6669677572> 20.0195 <6174696f6e2c206c6f6f6b20617420746865206669727374206c696e65206f6620746865>] TJ
 ET
@@ -27970,16 +27970,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-2.9646 Tw
-
 BT
-63.24 66.025 Td
+63.24 81.805 Td
 /F1.0 10.5 Tf
-<4842617365206c6f6720666f72207468617420696e7374616e63652e20412075736566756c20726561642073657474696e6720636f6e666967206f6e20796f7572206861646f6f7020636c7573746572206973204161726f6e> Tj
+<4842617365206c6f6720666f72207468617420696e7374616e63652e> Tj
 ET
 
-
-0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
 q
@@ -28006,7 +28002,7 @@ Q
 
 endstream
 endobj
-132 0 obj
+133 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -28014,20 +28010,20 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 131 0 R
+/Contents 132 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 10 0 R
 /F3.0 33 0 R
 /F2.0 29 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4594 0 R
+/XObject << /Stamp2 4609 0 R
 >>
 >>
-/Annots [133 0 R 135 0 R]
+/Annots [134 0 R 136 0 R]
 >>
 endobj
-133 0 obj
+134 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -28038,10 +28034,10 @@ endobj
 /Type /Annot
 >>
 endobj
-134 0 obj
-[132 0 R /XYZ 0 699.96 null]
-endobj
 135 0 obj
+[133 0 R /XYZ 0 699.96 null]
+endobj
+136 0 obj
 << /Border [0 0 0]
 /Dest (trouble.rs.runtime.filehandles)
 /Subtype /Link
@@ -28049,8 +28045,8 @@ endobj
 /Type /Annot
 >>
 endobj
-136 0 obj
-<< /Length 11806
+137 0 obj
+<< /Length 11978
 >>
 stream
 q
@@ -28060,18 +28056,7 @@ q
 0.2 0.2 0.2 SCN
 
 BT
-63.24 794.676 Td
-/F1.0 10.5 Tf
-[<4b696d62616c6cd57320436f6e6669677572> 20.0195 <6174696f6e20506172> 20.0195 <616d65746572733a20576861742063616e20796f75206a7573742069676e6f72653f>] TJ
-ET
-
-0.0 0.0 0.0 SCN
-0.0 0.0 0.0 scn
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
-
-BT
-63.24 767.4942 Td
+63.24 794.5242 Td
 /F3.0 9.975 Tf
 <4578616d706c6520352e20> Tj
 ET
@@ -28082,7 +28067,7 @@ ET
 0.6941 0.1294 0.2745 SCN
 
 BT
-116.5364 767.4942 Td
+116.5364 794.5242 Td
 /F4.0 9.975 Tf
 <756c696d6974> Tj
 ET
@@ -28093,7 +28078,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-146.4614 767.4942 Td
+146.4614 794.5242 Td
 /F3.0 9.975 Tf
 <2053657474696e6773206f6e205562756e7475> Tj
 ET
@@ -28102,28 +28087,28 @@ ET
 0.0 0.0 0.0 scn
 q
 1.0 1.0 1.0 scn
-67.24 759.869 m
-543.04 759.869 l
-545.2491 759.869 547.04 758.0781 547.04 755.869 c
-547.04 489.409 l
-547.04 487.1999 545.2491 485.409 543.04 485.409 c
-67.24 485.409 l
-65.0309 485.409 63.24 487.1999 63.24 489.409 c
-63.24 755.869 l
-63.24 758.0781 65.0309 759.869 67.24 759.869 c
+67.24 786.899 m
+543.04 786.899 l
+545.2491 786.899 547.04 785.1081 547.04 782.899 c
+547.04 516.439 l
+547.04 514.2299 545.2491 512.439 543.04 512.439 c
+67.24 512.439 l
+65.0309 512.439 63.24 514.2299 63.24 516.439 c
+63.24 782.899 l
+63.24 785.1081 65.0309 786.899 67.24 786.899 c
 h
 f
 0.9333 0.9333 0.9333 SCN
 0.75 w
-67.24 759.869 m
-543.04 759.869 l
-545.2491 759.869 547.04 758.0781 547.04 755.869 c
-547.04 489.409 l
-547.04 487.1999 545.2491 485.409 543.04 485.409 c
-67.24 485.409 l
-65.0309 485.409 63.24 487.1999 63.24 489.409 c
-63.24 755.869 l
-63.24 758.0781 65.0309 759.869 67.24 759.869 c
+67.24 786.899 m
+543.04 786.899 l
+545.2491 786.899 547.04 785.1081 547.04 782.899 c
+547.04 516.439 l
+547.04 514.2299 545.2491 512.439 543.04 512.439 c
+67.24 512.439 l
+65.0309 512.439 63.24 514.2299 63.24 516.439 c
+63.24 782.899 l
+63.24 785.1081 65.0309 786.899 67.24 786.899 c
 h
 S
 Q
@@ -28133,7 +28118,7 @@ Q
 3.3688 Tw
 
 BT
-75.24 735.905 Td
+75.24 762.935 Td
 /F1.0 10.5 Tf
 [<54> 29.7852 <6f20636f6e66696775726520756c696d69742073657474696e6773206f6e205562756e74752c206564697420>] TJ
 ET
@@ -28148,7 +28133,7 @@ ET
 3.3688 Tw
 
 BT
-318.8831 735.905 Td
+318.8831 762.935 Td
 /F3.0 10.5 Tf
 <2f6574632f73656375726974792f6c696d6974732e636f6e66> Tj
 ET
@@ -28163,7 +28148,7 @@ ET
 3.3688 Tw
 
 BT
-432.0941 735.905 Td
+432.0941 762.935 Td
 /F1.0 10.5 Tf
 <2c20776869636820697320612073706163652d> Tj
 ET
@@ -28178,7 +28163,7 @@ ET
 0.5596 Tw
 
 BT
-75.24 720.125 Td
+75.24 747.155 Td
 /F1.0 10.5 Tf
 <64656c696d697465642066696c65207769746820666f757220636f6c756d6e732e20526566657220746f20746865206d616e207061676520666f7220> Tj
 ET
@@ -28193,7 +28178,7 @@ ET
 0.5596 Tw
 
 BT
-378.2625 720.125 Td
+378.2625 747.155 Td
 /F3.0 10.5 Tf
 <6c696d6974732e636f6e66> Tj
 ET
@@ -28208,7 +28193,7 @@ ET
 0.5596 Tw
 
 BT
-429.3345 720.125 Td
+429.3345 747.155 Td
 /F1.0 10.5 Tf
 <20666f722064657461696c732061626f757420746865> Tj
 ET
@@ -28223,7 +28208,7 @@ ET
 0.6445 Tw
 
 BT
-75.24 704.345 Td
+75.24 731.375 Td
 /F1.0 10.5 Tf
 <666f726d6174206f6620746869732066696c652e20496e2074686520666f6c6c6f77696e67206578616d706c652c20746865206669727374206c696e65207365747320626f746820736f667420616e642068617264206c696d69747320666f72> Tj
 ET
@@ -28238,7 +28223,7 @@ ET
 0.4826 Tw
 
 BT
-75.24 688.565 Td
+75.24 715.595 Td
 /F1.0 10.5 Tf
 [<746865206e756d626572206f66206f70656e2066696c657320286e6f66696c652920746f20333237363820666f7220746865206f706572> 20.0195 <6174696e672073797374656d207573657220776974682074686520757365726e616d65>] TJ
 ET
@@ -28251,7 +28236,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-75.24 672.785 Td
+75.24 699.815 Td
 /F1.0 10.5 Tf
 <6861646f6f702e20546865207365636f6e64206c696e65207365747320746865206e756d626572206f662070726f63657373657320746f20333230303020666f72207468652073616d6520757365722e> Tj
 ET
@@ -28260,28 +28245,28 @@ ET
 0.0 0.0 0.0 scn
 q
 0.9608 0.9608 0.9608 scn
-79.24 656.969 m
-531.04 656.969 l
-533.2491 656.969 535.04 655.1781 535.04 652.969 c
-535.04 609.489 l
-535.04 607.2799 533.2491 605.489 531.04 605.489 c
-79.24 605.489 l
-77.0309 605.489 75.24 607.2799 75.24 609.489 c
-75.24 652.969 l
-75.24 655.1781 77.0309 656.969 79.24 656.969 c
+79.24 683.999 m
+531.04 683.999 l
+533.2491 683.999 535.04 682.2081 535.04 679.999 c
+535.04 636.519 l
+535.04 634.3099 533.2491 632.519 531.04 632.519 c
+79.24 632.519 l
+77.0309 632.519 75.24 634.3099 75.24 636.519 c
+75.24 679.999 l
+75.24 682.2081 77.0309 683.999 79.24 683.999 c
 h
 f
 0.8 0.8 0.8 SCN
 0.75 w
-79.24 656.969 m
-531.04 656.969 l
-533.2491 656.969 535.04 655.1781 535.04 652.969 c
-535.04 609.489 l
-535.04 607.2799 533.2491 605.489 531.04 605.489 c
-79.24 605.489 l
-77.0309 605.489 75.24 607.2799 75.24 609.489 c
-75.24 652.969 l
-75.24 655.1781 77.0309 656.969 79.24 656.969 c
+79.24 683.999 m
+531.04 683.999 l
+533.2491 683.999 535.04 682.2081 535.04 679.999 c
+535.04 636.519 l
+535.04 634.3099 533.2491 632.519 531.04 632.519 c
+79.24 632.519 l
+77.0309 632.519 75.24 634.3099 75.24 636.519 c
+75.24 679.999 l
+75.24 682.2081 77.0309 683.999 79.24 683.999 c
 h
 S
 Q
@@ -28289,7 +28274,7 @@ Q
 0.2 0.2 0.2 SCN
 
 BT
-86.24 634.144 Td
+86.24 661.174 Td
 /F4.0 11 Tf
 <6861646f6f7020202d202020202020206e6f66696c6520203332373638> Tj
 ET
@@ -28300,7 +28285,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-86.24 619.404 Td
+86.24 646.434 Td
 /F4.0 11 Tf
 <6861646f6f7020202d202020202020206e70726f632020203332303030> Tj
 ET
@@ -28313,7 +28298,7 @@ ET
 0.492 Tw
 
 BT
-75.24 581.525 Td
+75.24 608.555 Td
 /F1.0 10.5 Tf
 [<5468652073657474696e677320617265206f6e6c79206170706c6965642069662074686520506c75676761626c652041> 20.0195 <757468656e7469636174696f6e204d6f64756c65202850> 49.8047 <414d2920656e7669726f6e6d656e74206973>] TJ
 ET
@@ -28328,7 +28313,7 @@ ET
 6.2805 Tw
 
 BT
-75.24 565.745 Td
+75.24 592.775 Td
 /F1.0 10.5 Tf
 [<646972656374656420746f20757365207468656d2e2054> 29.7852 <6f20636f6e6669677572652050> 49.8047 <414d20746f20757365207468657365206c696d6974732c2062652073757265207468617420746865>] TJ
 ET
@@ -28341,7 +28326,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-75.24 549.965 Td
+75.24 576.995 Td
 /F3.0 10.5 Tf
 <2f6574632f70616d2e642f636f6d6d6f6e2d73657373696f6e> Tj
 ET
@@ -28352,7 +28337,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-209.4615 549.965 Td
+209.4615 576.995 Td
 /F1.0 10.5 Tf
 <2066696c6520636f6e7461696e732074686520666f6c6c6f77696e67206c696e653a> Tj
 ET
@@ -28361,28 +28346,28 @@ ET
 0.0 0.0 0.0 scn
 q
 0.9608 0.9608 0.9608 scn
-79.24 534.149 m
-531.04 534.149 l
-533.2491 534.149 535.04 532.3581 535.04 530.149 c
-535.04 501.409 l
-535.04 499.1999 533.2491 497.409 531.04 497.409 c
-79.24 497.409 l
-77.0309 497.409 75.24 499.1999 75.24 501.409 c
-75.24 530.149 l
-75.24 532.3581 77.0309 534.149 79.24 534.149 c
+79.24 561.179 m
+531.04 561.179 l
+533.2491 561.179 535.04 559.3881 535.04 557.179 c
+535.04 528.439 l
+535.04 526.2299 533.2491 524.439 531.04 524.439 c
+79.24 524.439 l
+77.0309 524.439 75.24 526.2299 75.24 528.439 c
+75.24 557.179 l
+75.24 559.3881 77.0309 561.179 79.24 561.179 c
 h
 f
 0.8 0.8 0.8 SCN
 0.75 w
-79.24 534.149 m
-531.04 534.149 l
-533.2491 534.149 535.04 532.3581 535.04 530.149 c
-535.04 501.409 l
-535.04 499.1999 533.2491 497.409 531.04 497.409 c
-79.24 497.409 l
-77.0309 497.409 75.24 499.1999 75.24 501.409 c
-75.24 530.149 l
-75.24 532.3581 77.0309 534.149 79.24 534.149 c
+79.24 561.179 m
+531.04 561.179 l
+533.2491 561.179 535.04 559.3881 535.04 557.179 c
+535.04 528.439 l
+535.04 526.2299 533.2491 524.439 531.04 524.439 c
+79.24 524.439 l
+77.0309 524.439 75.24 526.2299 75.24 528.439 c
+75.24 557.179 l
+75.24 559.3881 77.0309 561.179 79.24 561.179 c
 h
 S
 Q
@@ -28390,7 +28375,7 @@ Q
 0.2 0.2 0.2 SCN
 
 BT
-86.24 511.324 Td
+86.24 538.354 Td
 /F4.0 11 Tf
 <73657373696f6e207265717569726564202070616d5f6c696d6974732e736f> Tj
 ET
@@ -28401,7 +28386,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 461.445 Td
+48.24 488.475 Td
 /F2.0 10.5 Tf
 <4c696e7578205368656c6c> Tj
 ET
@@ -28412,7 +28397,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-63.24 442.665 Td
+63.24 469.695 Td
 /F1.0 10.5 Tf
 <416c6c206f6620746865207368656c6c2073637269707473207468617420636f6d6520776974682048426173652072656c79206f6e2074686520> Tj
 ET
@@ -28423,7 +28408,7 @@ ET
 0.2588 0.5451 0.7922 SCN
 
 BT
-341.6895 442.665 Td
+341.6895 469.695 Td
 /F1.0 10.5 Tf
 <474e552042617368> Tj
 ET
@@ -28434,7 +28419,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-391.575 442.665 Td
+391.575 469.695 Td
 /F1.0 10.5 Tf
 <207368656c6c2e> Tj
 ET
@@ -28445,7 +28430,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 414.885 Td
+48.24 441.915 Td
 /F2.0 10.5 Tf
 <57696e646f7773> Tj
 ET
@@ -28456,7 +28441,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-63.24 396.105 Td
+63.24 423.135 Td
 /F1.0 10.5 Tf
 <52756e6e696e672070726f64756374696f6e2073797374656d73206f6e2057696e646f7773206d616368696e6573206973206e6f74207265636f6d6d656e6465642e> Tj
 ET
@@ -28467,7 +28452,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 356.265 Td
+48.24 383.295 Td
 /F2.0 18 Tf
 <342e312e20> Tj
 ET
@@ -28478,7 +28463,7 @@ ET
 0.2588 0.5451 0.7922 SCN
 
 BT
-83.574 356.265 Td
+83.574 383.295 Td
 /F2.0 18 Tf
 <4861646f6f70> Tj
 ET
@@ -28491,7 +28476,7 @@ ET
 1.9496 Tw
 
 BT
-48.24 328.245 Td
+48.24 355.275 Td
 /F1.0 10.5 Tf
 <54686520666f6c6c6f77696e67207461626c652073756d6d6172697a6573207468652076657273696f6e73206f66204861646f6f7020737570706f72746564207769746820656163682076657273696f6e206f662048426173652e> Tj
 ET
@@ -28506,7 +28491,7 @@ ET
 0.1315 Tw
 
 BT
-48.24 312.465 Td
+48.24 339.495 Td
 /F1.0 10.5 Tf
 [<4f6c6465722076657273696f6e73206e6f7420617070656172696e6720696e2074686973207461626c652061726520636f6e7369646572656420756e737570706f7274656420616e64206c696b> 20.0195 <656c79206d697373696e67206e6563657373617279>] TJ
 ET
@@ -28519,7 +28504,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 296.685 Td
+48.24 323.715 Td
 /F1.0 10.5 Tf
 [<66656174757265732c207768696c65206e657765722076657273696f6e732061726520756e74657374656420627574206d61> 20.0195 <79206265207375697461626c652e>] TJ
 ET
@@ -28532,7 +28517,7 @@ ET
 0.5667 Tw
 
 BT
-48.24 268.905 Td
+48.24 295.935 Td
 /F1.0 10.5 Tf
 [<4261736564206f6e207468652076657273696f6e206f662048426173652c20796f752073686f756c642073656c65637420746865206d6f737420617070726f7072696174652076657273696f6e206f66204861646f6f702e2059> 69.8242 <6f752063616e>] TJ
 ET
@@ -28547,7 +28532,7 @@ ET
 1.8984 Tw
 
 BT
-48.24 253.125 Td
+48.24 280.155 Td
 /F1.0 10.5 Tf
 [<75736520417061636865204861646f6f702c206f7220612076656e646f72> -29.7852 <d57320646973747269627574696f6e206f66204861646f6f702e204e6f2064697374696e6374696f6e206973206d61646520686572652e2053656520>] TJ
 ET
@@ -28562,7 +28547,7 @@ ET
 1.8984 Tw
 
 BT
-531.0695 253.125 Td
+531.0695 280.155 Td
 /F1.0 10.5 Tf
 <746865> Tj
 ET
@@ -28575,7 +28560,7 @@ ET
 0.2588 0.5451 0.7922 SCN
 
 BT
-48.24 237.345 Td
+48.24 264.375 Td
 /F1.0 10.5 Tf
 <4861646f6f702077696b69> Tj
 ET
@@ -28586,7 +28571,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-112.038 237.345 Td
+112.038 264.375 Td
 /F1.0 10.5 Tf
 <20666f7220696e666f726d6174696f6e2061626f75742076656e646f7273206f66204861646f6f702e> Tj
 ET
@@ -28596,15 +28581,15 @@ ET
 q
 0.5 w
 0.9333 0.9333 0.9333 SCN
-108.24 221.529 m
-108.24 72.078 l
+108.24 248.559 m
+108.24 99.108 l
 S
 Q
 0.0667 0.0667 0.0667 scn
 0.0667 0.0667 0.0667 SCN
 
 BT
-71.388 138.2355 Td
+71.388 165.2655 Td
 /F5.1 24 Tf
 <22> Tj
 ET
@@ -28615,7 +28600,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-120.24 206.1632 Td
+120.24 233.1932 Td
 /F3.0 9.975 Tf
 <4861646f6f7020322e78206973207265636f6d6d656e6465642e> Tj
 ET
@@ -28625,12 +28610,27 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.9343 Tw
+4.2475 Tw
+
+BT
+120.24 213.604 Td
+/F1.0 10.5 Tf
+<4861646f6f7020322e782069732066617374657220616e6420696e636c756465732066656174757265732c20737563682061732073686f72742d636972637569742072656164732028736565> Tj
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2588 0.5451 0.7922 scn
+0.2588 0.5451 0.7922 SCN
+
+0.8293 Tw
 
 BT
-120.24 186.574 Td
+120.24 197.824 Td
 /F1.0 10.5 Tf
-<4861646f6f7020322e782069732066617374657220616e6420696e636c756465732066656174757265732c20737563682061732073686f72742d636972637569742072656164732c2077686963682077696c6c> Tj
+[<4c65766572> 20.0195 <6167696e67206c6f63616c2064617461>] TJ
 ET
 
 
@@ -28640,12 +28640,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.0141 Tw
+0.8293 Tw
 
 BT
-120.24 170.794 Td
+228.8199 197.824 Td
 /F1.0 10.5 Tf
-[<68656c7020696d70726f766520796f75722048426173652072> 20.0195 <616e646f6d20726561642070726f66696c652e204861646f6f7020322e7820616c736f20696e636c7564657320696d706f7274616e74>] TJ
+[<292c2077686963682077696c6c2068656c7020696d70726f766520796f75722048426173652072> 20.0195 <616e646f6d20726561642070726f66696c652e>] TJ
 ET
 
 
@@ -28655,12 +28655,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.0847 Tw
+0.1783 Tw
 
 BT
-120.24 155.014 Td
+120.24 182.044 Td
 /F1.0 10.5 Tf
-[<62756720666978657320746861742077696c6c20696d70726f766520796f7572206f766572> 20.0195 <616c6c20484261736520657870657269656e63652e20484261736520646f6573206e6f7420737570706f7274>] TJ
+[<4861646f6f7020322e7820616c736f20696e636c7564657320696d706f7274616e742062756720666978657320746861742077696c6c20696d70726f766520796f7572206f766572> 20.0195 <616c6c204842617365>] TJ
 ET
 
 
@@ -28670,12 +28670,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-2.012 Tw
+0.8178 Tw
 
 BT
-120.24 139.234 Td
+120.24 166.264 Td
 /F1.0 10.5 Tf
-<72756e6e696e672077697468206561726c6965722076657273696f6e73206f66204861646f6f702e2053656520746865207461626c652062656c6f7720666f7220726571756972656d656e7473> Tj
+<657870657269656e63652e20484261736520646f6573206e6f7420737570706f72742072756e6e696e672077697468206561726c6965722076657273696f6e73206f66204861646f6f702e20536565> Tj
 ET
 
 
@@ -28686,9 +28686,9 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-120.24 123.454 Td
+120.24 150.484 Td
 /F1.0 10.5 Tf
-<737065636966696320746f20646966666572656e742048426173652076657273696f6e732e> Tj
+<746865207461626c652062656c6f7720666f7220726571756972656d656e747320737065636966696320746f20646966666572656e742048426173652076657273696f6e732e> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -28699,7 +28699,7 @@ ET
 0.7423 Tw
 
 BT
-120.24 95.674 Td
+120.24 122.704 Td
 /F1.0 10.5 Tf
 <4861646f6f7020332e78206973207374696c6c20696e206561726c79206163636573732072656c656173657320616e6420686173206e6f7420796574206265656e2073756666696369656e746c7920746573746564> Tj
 ET
@@ -28712,13 +28712,24 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-120.24 79.894 Td
+120.24 106.924 Td
 /F1.0 10.5 Tf
 [<62> 20.0195 <792074686520484261736520636f6d6d756e69747920666f722070726f64756374696f6e207573652063617365732e>] TJ
 ET
 
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+48.24 75.144 Td
+/F1.0 10.5 Tf
+<5573652074686520666f6c6c6f77696e67206c6567656e6420746f20696e746572707265742074686973207461626c653a> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
 q
 0.0 0.0 0.0 scn
 0.0 0.0 0.0 SCN
@@ -28743,7 +28754,7 @@ Q
 
 endstream
 endobj
-137 0 obj
+138 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -28751,69 +28762,77 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 136 0 R
+/Contents 137 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/Font << /F1.0 10 0 R
-/F3.0 33 0 R
+/Font << /F3.0 33 0 R
 /F4.0 35 0 R
+/F1.0 10 0 R
 /F2.0 29 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4593 0 R
+/XObject << /Stamp1 4608 0 R
 >>
 >>
-/Annots [138 0 R 140 0 R 141 0 R 142 0 R]
+/Annots [139 0 R 141 0 R 142 0 R 143 0 R 144 0 R]
 >>
 endobj
-138 0 obj
+139 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
 /URI (http://www.gnu.org/software/bash)
 >>
 /Subtype /Link
-/Rect [341.6895 439.599 391.575 453.879]
+/Rect [341.6895 466.629 391.575 480.909]
 /Type /Annot
 >>
 endobj
-139 0 obj
-[137 0 R /XYZ 0 380.289 null]
-endobj
 140 0 obj
+[138 0 R /XYZ 0 407.319 null]
+endobj
+141 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
 /URI (https://hadoop.apache.org)
 >>
 /Subtype /Link
-/Rect [83.574 351.009 154.386 375.489]
+/Rect [83.574 378.039 154.386 402.519]
 /Type /Annot
 >>
 endobj
-141 0 obj
+142 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
 /URI (https://wiki.apache.org/hadoop/Distributions%20and%20Commercial%20Support)
 >>
 /Subtype /Link
-/Rect [531.0695 250.059 547.04 264.339]
+/Rect [531.0695 277.089 547.04 291.369]
 /Type /Annot
 >>
 endobj
-142 0 obj
+143 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
 /URI (https://wiki.apache.org/hadoop/Distributions%20and%20Commercial%20Support)
 >>
 /Subtype /Link
-/Rect [48.24 234.279 112.038 248.559]
+/Rect [48.24 261.309 112.038 275.589]
 /Type /Annot
 >>
 endobj
-143 0 obj
-<< /Length 29101
+144 0 obj
+<< /Border [0 0 0]
+/Dest (perf.hdfs.configs.localread)
+/Subtype /Link
+/Rect [120.24 194.758 228.8199 209.038]
+/Type /Annot
+>>
+endobj
+145 0 obj
+<< /Length 31263
 >>
 stream
 q
@@ -28823,18 +28842,7 @@ q
 0.2 0.2 0.2 SCN
 
 BT
-48.24 794.676 Td
-/F1.0 10.5 Tf
-<5573652074686520666f6c6c6f77696e67206c6567656e6420746f20696e746572707265742074686973207461626c653a> Tj
-ET
-
-0.0 0.0 0.0 SCN
-0.0 0.0 0.0 scn
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
-
-BT
-48.24 767.4942 Td
+48.24 795.2367 Td
 /F3.0 9.975 Tf
 <4861646f6f702076657273696f6e20737570706f7274206d6174726978> Tj
 ET
@@ -28847,7 +28855,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-56.8805 747.905 Td
+56.8805 775.6475 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -28860,7 +28868,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 747.905 Td
+66.24 775.6475 Td
 /F1.0 10.5 Tf
 <225322203d20737570706f72746564> Tj
 ET
@@ -28873,7 +28881,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-56.8805 726.125 Td
+56.8805 753.8675 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -28886,7 +28894,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 726.125 Td
+66.24 753.8675 Td
 /F1.0 10.5 Tf
 <225822203d206e6f7420737570706f72746564> Tj
 ET
@@ -28899,7 +28907,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-56.8805 704.345 Td
+56.8805 732.0875 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -28912,7 +28920,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 704.345 Td
+66.24 732.0875 Td
 /F1.0 10.5 Tf
 <224e5422203d204e6f7420746573746564> Tj
 ET
@@ -28920,203 +28928,219 @@ ET
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-48.24 668.249 124.7 20.28 re
+48.24 695.9915 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-172.94 668.249 124.7 20.28 re
+172.94 695.9915 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-297.64 668.249 124.7 20.28 re
+297.64 695.9915 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-422.34 668.249 124.7 20.28 re
+422.34 695.9915 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-48.24 647.969 124.7 20.28 re
+48.24 675.7115 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-172.94 647.969 124.7 20.28 re
+172.94 675.7115 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-297.64 647.969 124.7 20.28 re
+297.64 675.7115 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-422.34 647.969 124.7 20.28 re
+422.34 675.7115 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-48.24 627.689 124.7 20.28 re
+48.24 655.4315 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-172.94 627.689 124.7 20.28 re
+172.94 655.4315 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-297.64 627.689 124.7 20.28 re
+297.64 655.4315 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-422.34 627.689 124.7 20.28 re
+422.34 655.4315 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-48.24 607.409 124.7 20.28 re
+48.24 635.1515 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-172.94 607.409 124.7 20.28 re
+172.94 635.1515 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-297.64 607.409 124.7 20.28 re
+297.64 635.1515 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-422.34 607.409 124.7 20.28 re
+422.34 635.1515 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-48.24 587.129 124.7 20.28 re
+48.24 614.8715 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-172.94 587.129 124.7 20.28 re
+172.94 614.8715 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-297.64 587.129 124.7 20.28 re
+297.64 614.8715 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-422.34 587.129 124.7 20.28 re
+422.34 614.8715 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-48.24 566.849 124.7 20.28 re
+48.24 594.5915 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-172.94 566.849 124.7 20.28 re
+172.94 594.5915 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-297.64 566.849 124.7 20.28 re
+297.64 594.5915 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-422.34 566.849 124.7 20.28 re
+422.34 594.5915 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-48.24 546.569 124.7 20.28 re
+48.24 574.3115 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-172.94 546.569 124.7 20.28 re
+172.94 574.3115 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-297.64 546.569 124.7 20.28 re
+297.64 574.3115 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-422.34 546.569 124.7 20.28 re
+422.34 574.3115 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-48.24 526.289 124.7 20.28 re
+48.24 554.0315 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-172.94 526.289 124.7 20.28 re
+172.94 554.0315 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-297.64 526.289 124.7 20.28 re
+297.64 554.0315 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-422.34 526.289 124.7 20.28 re
+422.34 554.0315 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-48.24 506.009 124.7 20.28 re
+48.24 533.7515 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-172.94 506.009 124.7 20.28 re
+172.94 533.7515 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-297.64 506.009 124.7 20.28 re
+297.64 533.7515 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-422.34 506.009 124.7 20.28 re
+422.34 533.7515 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-48.24 485.729 124.7 20.28 re
+48.24 513.4715 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-172.94 485.729 124.7 20.28 re
+172.94 513.4715 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-297.64 485.729 124.7 20.28 re
+297.64 513.4715 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 1.0 1.0 1.0 scn
-422.34 485.729 124.7 20.28 re
+422.34 513.4715 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-48.24 465.449 124.7 20.28 re
+48.24 493.1915 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-172.94 465.449 124.7 20.28 re
+172.94 493.1915 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-297.64 465.449 124.7 20.28 re
+297.64 493.1915 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.9765 0.9765 0.9765 scn
-422.34 465.449 124.7 20.28 re
+422.34 493.1915 124.7 20.28 re
+f
+0.0 0.0 0.0 scn
+1.0 1.0 1.0 scn
+48.24 472.9115 124.7 20.28 re
+f
+0.0 0.0 0.0 scn
+1.0 1.0 1.0 scn
+172.94 472.9115 124.7 20.28 re
+f
+0.0 0.0 0.0 scn
+1.0 1.0 1.0 scn
+297.64 472.9115 124.7 20.28 re
+f
+0.0 0.0 0.0 scn
+1.0 1.0 1.0 scn
+422.34 472.9115 124.7 20.28 re
 f
 0.0 0.0 0.0 scn
 0.5 w
 0.8667 0.8667 0.8667 SCN
-48.24 688.529 m
-172.94 688.529 l
+48.24 716.2715 m
+172.94 716.2715 l
 S
 [] 0 d
 1.25 w
 0.8667 0.8667 0.8667 SCN
-48.24 668.249 m
-172.94 668.249 l
+48.24 695.9915 m
+172.94 695.9915 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-48.24 688.779 m
-48.24 667.624 l
+48.24 716.5215 m
+48.24 695.3665 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-172.94 688.779 m
-172.94 667.624 l
+172.94 716.5215 m
+172.94 695.3665 l
 S
 [] 0 d
 1 w
@@ -29125,26 +29149,26 @@ S
 0.0 0.0 0.0 scn
 0.5 w
 0.8667 0.8667 0.8667 SCN
-172.94 688.529 m
-297.64 688.529 l
+172.94 716.2715 m
+297.64 716.2715 l
 S
 [] 0 d
 1.25 w
 0.8667 0.8667 0.8667 SCN
-172.94 668.249 m
-297.64 668.249 l
+172.94 695.9915 m
+297.64 695.9915 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-172.94 688.779 m
-172.94 667.624 l
+172.94 716.5215 m
+172.94 695.3665 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-297.64 688.779 m
-297.64 667.624 l
+297.64 716.5215 m
+297.64 695.3665 l
 S
 [] 0 d
 1 w
@@ -29152,7 +29176,7 @@ S
 0.2 0.2 0.2 scn
 
 BT
-175.94 674.315 Td
+175.94 702.0575 Td
 /F2.0 10.5 Tf
 <48426173652d312e322e78> Tj
 ET
@@ -29160,26 +29184,26 @@ ET
 0.0 0.0 0.0 scn
 0.5 w
 0.8667 0.8667 0.8667 SCN
-297.64 688.529 m
-422.34 688.529 l
+297.64 716.2715 m
+422.34 716.2715 l
 S
 [] 0 d
 1.25 w
 0.8667 0.8667 0.8667 SCN
-297.64 668.249 m
-422.34 668.249 l
+297.64 695.9915 m
+422.34 695.9915 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-297.64 688.779 m
-297.64 667.624 l
+297.64 716.5215 m
+297.64 695.3665 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-422.34 688.779 m
-422.34 667.624 l
+422.34 716.5215 m
+422.34 695.3665 l
 S
 [] 0 d
 1 w
@@ -29187,7 +29211,7 @@ S
 0.2 0.2 0.2 scn
 
 BT
-300.64 674.315 Td
+300.64 702.0575 Td
 /F2.0 10.5 Tf
 <48426173652d312e332e78> Tj
 ET
@@ -29195,26 +29219,26 @@ ET
 0.0 0.0 0.0 scn
 0.5 w
 0.8667 0.8667 0.8667 SCN
-422.34 688.529 m
-547.04 688.529 l
+422.34 716.2715 m
+547.04 716.2715 l
 S
 [] 0 d
 1.25 w
 0.8667 0.8667 0.8667 SCN
-422.34 668.249 m
-547.04 668.249 l
+422.34 695.9915 m
+547.04 695.9915 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-422.34 688.779 m
-422.34 667.624 l
+422.34 716.5215 m
+422.34 695.3665 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-547.04 688.779 m
-547.04 667.624 l
+547.04 716.5215 m
+547.04 695.3665 l
 S
 [] 0 d
 1 w
@@ -29222,7 +29246,7 @@ S
 0.2 0.2 0.2 scn
 
 BT
-425.34 674.315 Td
+425.34 702.0575 Td
 /F2.0 10.5 Tf
 <48426173652d322e302e78> Tj
 ET
@@ -29230,26 +29254,26 @@ ET
 0.0 0.0 0.0 scn
 1.25 w
 0.8667 0.8667 0.8667 SCN
-48.24 668.249 m
-172.94 668.249 l
+48.24 695.9915 m
+172.94 695.9915 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-48.24 647.969 m
-172.94 647.969 l
+48.24 675.7115 m
+172.94 675.7115 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-48.24 668.874 m
-48.24 647.719 l
+48.24 696.6165 m
+48.24 675.4615 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-172.94 668.874 m
-172.94 647.719 l
+172.94 696.6165 m
+172.94 675.4615 l
 S
 [] 0 d
 1 w
@@ -29257,7 +29281,7 @@ S
 0.2 0.2 0.2 scn
 
 BT
-51.24 654.035 Td
+51.24 681.7775 Td
 /F1.0 10.5 Tf
 <4861646f6f702d322e342e78> Tj
 ET
@@ -29265,26 +29289,26 @@ ET
 0.0 0.0 0.0 scn
 1.25 w
 0.8667 0.8667 0.8667 SCN
-172.94 668.249 m
-297.64 668.249 l
+172.94 695.9915 m
+297.64 695.9915 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-172.94 647.969 m
-297.64 647.969 l
+172.94 675.7115 m
+297.64 675.7115 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-172.94 668.874 m
-172.94 647.719 l
+172.94 696.6165 m
+172.94 675.4615 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-297.64 668.874 m
-297.64 647.719 l
+297.64 696.6165 m
+297.64 675.4615 l
 S
 [] 0 d
 1 w
@@ -29292,7 +29316,7 @@ S
 0.2 0.2 0.2 scn
 
 BT
-175.94 654.035 Td
+175.94 681.7775 Td
 /F1.0 10.5 Tf
 <53> Tj
 ET
@@ -29300,26 +29324,26 @@ ET
 0.0 0.0 0.0 scn
 1.25 w
 0.8667 0.8667 0.8667 SCN
-297.64 668.249 m
-422.34 668.249 l
+297.64 695.9915 m
+422.34 695.9915 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-297.64 647.969 m
-422.34 647.969 l
+297.64 675.7115 m
+422.34 675.7115 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-297.64 668.874 m
-297.64 647.719 l
+297.64 696.6165 m
+297.64 675.4615 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-422.34 668.874 m
-422.34 647.719 l
+422.34 696.6165 m
+422.34 675.4615 l
 S
 [] 0 d
 1 w
@@ -29327,7 +29351,7 @@ S
 0.2 0.2 0.2 scn
 
 BT
-300.64 654.035 Td
+300.64 681.7775 Td
 /F1.0 10.5 Tf
 <53> Tj
 ET
@@ -29335,26 +29359,26 @@ ET
 0.0 0.0 0.0 scn
 1.25 w
 0.8667 0.8667 0.8667 SCN
-422.34 668.249 m
-547.04 668.249 l
+422.34 695.9915 m
+547.04 695.9915 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-422.34 647.969 m
-547.04 647.969 l
+422.34 675.7115 m
+547.04 675.7115 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-422.34 668.874 m
-422.34 647.719 l
+422.34 696.6165 m
+422.34 675.4615 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-547.04 668.874 m
-547.04 647.719 l
+547.04 696.6165 m
+547.04 675.4615 l
 S
 [] 0 d
 1 w
@@ -29362,7 +29386,7 @@ S
 0.2 0.2 0.2 scn
 
 BT
-425.34 654.035 Td
+425.34 681.7775 Td
 /F1.0 10.5 Tf
 <58> Tj
 ET
@@ -29370,26 +29394,26 @@ ET
 0.0 0.0 0.0 scn
 0.5 w
 0.8667 0.8667 0.8667 SCN
-48.24 647.969 m
-172.94 647.969 l
+48.24 675.7115 m
+172.94 675.7115 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-48.24 627.689 m
-172.94 627.689 l
+48.24 655.4315 m
+172.94 655.4315 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-48.24 648.219 m
-48.24 627.439 l
+48.24 675.9615 m
+48.24 655.1815 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-172.94 648.219 m
-172.94 627.439 l
+172.94 675.9615 m
+172.94 655.1815 l
 S
 [] 0 d
 1 w
@@ -29397,7 +29421,7 @@ S
 0.2 0.2 0.2 scn
 
 BT
-51.24 633.755 Td
+51.24 661.4975 Td
 /F1.0 10.5 Tf
 <4861646f6f702d322e352e78> Tj
 ET
@@ -29405,26 +29429,26 @@ ET
 0.0 0.0 0.0 scn
 0.5 w
 0.8667 0.8667 0.8667 SCN
-172.94 647.969 m
-297.64 647.969 l
+172.94 675.7115 m
+297.64 675.7115 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-172.94 627.689 m
-297.64 627.689 l
+172.94 655.4315 m
+297.64 655.4315 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-172.94 648.219 m
-172.94 627.439 l
+172.94 675.9615 m
+172.94 655.1815 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-297.64 648.219 m
-297.64 627.439 l
+297.64 675.9615 m
+297.64 655.1815 l
 S
 [] 0 d
 1 w
@@ -29432,7 +29456,7 @@ S
 0.2 0.2 0.2 scn
 
 BT
-175.94 633.755 Td
+175.94 661.4975 Td
 /F1.0 10.5 Tf
 <53> Tj
 ET
@@ -29440,26 +29464,26 @@ ET
 0.0 0.0 0.0 scn
 0.5 w
 0.8667 0.8667 0.8667 SCN
-297.64 647.969 m
-422.34 647.969 l
+297.64 675.7115 m
+422.34 675.7115 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-297.64 627.689 m
-422.34 627.689 l
+297.64 655.4315 m
+422.34 655.4315 l
 S
 [] 0 d
 0.5 w
 0.8667 0.8667 0.8667 SCN
-297.64 648.219 m
-297.64 627.439 l
+297.64 675.9615 m
+297.64 655.1815 l
 S
 [] 0 d
 0.5 w
 0.8667 0

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/client/AsyncAdmin.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AsyncAdmin.html b/devapidocs/org/apache/hadoop/hbase/client/AsyncAdmin.html
index f481b56..8618b6c 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AsyncAdmin.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AsyncAdmin.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":6,"i1":6,"i2":18,"i3":6,"i4":6,"i5":6,"i6":18,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":18,"i16":18,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6,"i23":6,"i24":6,"i25":6,"i26":6,"i27":6,"i28":6,"i29":6,"i30":6,"i31":6,"i32":6,"i33":6,"i34":6,"i35":6,"i36":6,"i37":6,"i38":6,"i39":6,"i40":6,"i41":6,"i42":6,"i43":6,"i44":6,"i45":6,"i46":6,"i47":6,"i48":18,"i49":6,"i50":6,"i51":18,"i52":6,"i53":6,"i54":6,"i55":6,"i56":6,"i57":6,"i58":18,"i59":18,"i60":18,"i61":6,"i62":6,"i63":6,"i64":6,"i65":6,"i66":6,"i67":6,"i68":18,"i69":6,"i70":6,"i71":6,"i72":6,"i73":6,"i74":6,"i75":6,"i76":6,"i77":6,"i78":6,"i79":6,"i80":6,"i81":6,"i82":6,"i83":6,"i84":18,"i85":6,"i86":6,"i87":6,"i88":6,"i89":6,"i90":6,"i91":6,"i92":18,"i93":6,"i94":6,"i95":6,"i96":18,"i97":6,"i98":6,"i99":6,"i100":6,"i101":6,"i102":18,"i103":18,"i104":6,"i105":6,"i106":6,"i107":6,"i108":6,"i109":6,"i110":6,"i111":6,"i112":6,"i113":6,"i114":6,"i115":6,"i116":6,"i117":6,"i118":6,"i119"
 :6,"i120":6,"i121":6,"i122":6,"i123":6,"i124":6,"i125":6,"i126":6,"i127":6,"i128":6,"i129":6,"i130":18,"i131":18,"i132":6,"i133":6,"i134":6,"i135":6,"i136":6,"i137":6,"i138":6,"i139":6,"i140":6,"i141":6,"i142":6,"i143":6,"i144":6};
+var methods = {"i0":6,"i1":6,"i2":18,"i3":6,"i4":6,"i5":6,"i6":18,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":18,"i17":18,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6,"i23":6,"i24":6,"i25":6,"i26":6,"i27":6,"i28":6,"i29":6,"i30":6,"i31":6,"i32":6,"i33":6,"i34":6,"i35":6,"i36":6,"i37":6,"i38":6,"i39":6,"i40":6,"i41":6,"i42":6,"i43":6,"i44":6,"i45":6,"i46":6,"i47":6,"i48":6,"i49":18,"i50":6,"i51":6,"i52":18,"i53":6,"i54":6,"i55":6,"i56":6,"i57":6,"i58":6,"i59":18,"i60":18,"i61":18,"i62":6,"i63":6,"i64":6,"i65":6,"i66":6,"i67":6,"i68":6,"i69":18,"i70":6,"i71":6,"i72":6,"i73":6,"i74":6,"i75":6,"i76":6,"i77":6,"i78":6,"i79":6,"i80":6,"i81":6,"i82":6,"i83":6,"i84":6,"i85":18,"i86":6,"i87":6,"i88":6,"i89":6,"i90":6,"i91":6,"i92":6,"i93":18,"i94":6,"i95":6,"i96":6,"i97":18,"i98":6,"i99":6,"i100":6,"i101":6,"i102":6,"i103":18,"i104":18,"i105":6,"i106":6,"i107":6,"i108":6,"i109":6,"i110":6,"i111":6,"i112":6,"i113":6,"i114":6,"i115":6,"i116":6,"i117":6,"i118":6,"i119"
 :6,"i120":6,"i121":6,"i122":6,"i123":6,"i124":6,"i125":6,"i126":6,"i127":6,"i128":6,"i129":6,"i130":6,"i131":18,"i132":18,"i133":6,"i134":6,"i135":6,"i136":6,"i137":6,"i138":6,"i139":6,"i140":6,"i141":6,"i142":6,"i143":6,"i144":6,"i145":6};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -227,19 +227,27 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 </td>
 </tr>
 <tr id="i15" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;newTableName,
+                boolean&nbsp;preserveSplits)</code>
+<div class="block">Create a new table by cloning the existent table schema.</div>
+</td>
+</tr>
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compact-org.apache.hadoop.hbase.TableName-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily)</code>
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily,
@@ -247,40 +255,40 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <div class="block">Compact a column family within a table.</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/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compact-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compactRegion-byte:A-">compactRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Compact an individual region.</div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compactRegion-byte:A-byte:A-">compactRegion</a></span>(byte[]&nbsp;regionName,
              byte[]&nbsp;columnFamily)</code>
 <div class="block">Compact a column family within a region.</div>
 </td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compactRegionServer-org.apache.hadoop.hbase.ServerName-">compactRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Compact all regions on the region server.</div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>&lt;S,R&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;R&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#coprocessorService-java.util.function.Function-org.apache.hadoop.hbase.client.ServiceCaller-">coprocessorService</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java.util.function">Function</a>&lt;com.google.protobuf.RpcChannel,S&gt;&nbsp;stubMaker,
                   <a href="../../../../../org/apache/hadoop/hbase/client/ServiceCaller.html" title="interface in org.apache.hadoop.hbase.client">ServiceCaller</a>&lt;S,R&gt;&nbsp;callable)</code>
 <div class="block">Execute the given coprocessor call on the master.</div>
 </td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>&lt;S,R&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;R&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#coprocessorService-java.util.function.Function-org.apache.hadoop.hbase.client.ServiceCaller-org.apache.hadoop.hbase.ServerName-">coprocessorService</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java.util.function">Function</a>&lt;com.google.protobuf.RpcChannel,S&gt;&nbsp;stubMaker,
                   <a href="../../../../../org/apache/hadoop/hbase/client/ServiceCaller.html" title="interface in org.apache.hadoop.hbase.client">ServiceCaller</a>&lt;S,R&gt;&nbsp;callable,
@@ -288,26 +296,26 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <div class="block">Execute the given coprocessor call on the given region server.</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#createNamespace-org.apache.hadoop.hbase.NamespaceDescriptor-">createNamespace</a></span>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;descriptor)</code>
 <div class="block">Create a new namespace.</div>
 </td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</code>
 <div class="block">Creates a new table.</div>
 </td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-byte:A:A-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
            byte[][]&nbsp;splitKeys)</code>
 <div class="block">Creates a new table with an initial set of empty regions defined by the specified split keys.</div>
 </td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-byte:A-byte:A-int-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
            byte[]&nbsp;startKey,
@@ -316,7 +324,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <div class="block">Creates a new table with the specified number of regions.</div>
 </td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#decommissionRegionServers-java.util.List-boolean-">decommissionRegionServers</a></span>(<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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers,
                          boolean&nbsp;offload)</code>
@@ -324,50 +332,50 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
  assigned to them.</div>
 </td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteColumnFamily-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumnFamily</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   byte[]&nbsp;columnFamily)</code>
 <div class="block">Delete a column family from a table.</div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteNamespace-java.lang.String-">deleteNamespace</a></span>(<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;name)</code>
 <div class="block">Delete an existing namespace.</div>
 </td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteSnapshot-java.lang.String-">deleteSnapshot</a></span>(<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;snapshotName)</code>
 <div class="block">Delete an existing snapshot.</div>
 </td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteSnapshots--">deleteSnapshots</a></span>()</code>
 <div class="block">Delete all existing snapshots.</div>
 </td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteSnapshots-java.util.regex.Pattern-">deleteSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">Delete existing snapshots whose names match the pattern passed.</div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteTable-org.apache.hadoop.hbase.TableName-">deleteTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Deletes a table.</div>
 </td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteTableSnapshots-java.util.regex.Pattern-">deleteTableSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern)</code>
 <div class="block">Delete all existing snapshots matching the given table name pattern.</div>
 </td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteTableSnapshots-java.util.regex.Pattern-java.util.regex.Pattern-">deleteTableSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;snapshotNamePattern)</code>
@@ -375,43 +383,43 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
  name regular expression.</div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#disableReplicationPeer-java.lang.String-">disableReplicationPeer</a></span>(<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;peerId)</code>
 <div class="block">Stop the replication stream to the specified peer</div>
 </td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#disableTable-org.apache.hadoop.hbase.TableName-">disableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable a table.</div>
 </td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#disableTableReplication-org.apache.hadoop.hbase.TableName-">disableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable a table's replication switch.</div>
 </td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#enableReplicationPeer-java.lang.String-">enableReplicationPeer</a></span>(<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;peerId)</code>
 <div class="block">Restart the replication stream to the specified peer</div>
 </td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#enableTable-org.apache.hadoop.hbase.TableName-">enableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table.</div>
 </td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#enableTableReplication-org.apache.hadoop.hbase.TableName-">enableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table's replication switch.</div>
 </td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#execProcedure-java.lang.String-java.lang.String-java.util.Map-">execProcedure</a></span>(<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;signature,
              <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;instance,
@@ -419,7 +427,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <div class="block">Execute a distributed procedure on a cluster.</div>
 </td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;byte[]&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#execProcedureWithReturn-java.lang.String-java.lang.String-java.util.Map-">execProcedureWithReturn</a></span>(<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;signature,
                        <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;instance,
@@ -427,187 +435,187 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <div class="block">Execute a distributed procedure on a cluster.</div>
 </td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#flush-org.apache.hadoop.hbase.TableName-">flush</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Flush a table.</div>
 </td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#flushRegion-byte:A-">flushRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Flush an individual region.</div>
 </td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#flushRegionServer-org.apache.hadoop.hbase.ServerName-">flushRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Flush all region on the region server.</div>
 </td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getBackupMasters--">getBackupMasters</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getClusterMetrics--">getClusterMetrics</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getClusterMetrics-java.util.EnumSet-">getClusterMetrics</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase">ClusterMetrics.Option</a>&gt;&nbsp;options)</code>&nbsp;</td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getCompactionState-org.apache.hadoop.hbase.TableName-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getCompactionState-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getCompactionStateForRegion-byte:A-">getCompactionStateForRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Get the current compaction state of region.</div>
 </td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getDescriptor-org.apache.hadoop.hbase.TableName-">getDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Method for getting the tableDescriptor</div>
 </td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getLastMajorCompactionTimestamp-org.apache.hadoop.hbase.TableName-">getLastMajorCompactionTimestamp</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the timestamp of the last major compaction for the passed table.</div>
 </td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getLastMajorCompactionTimestampForRegion-byte:A-">getLastMajorCompactionTimestampForRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Get the timestamp of the last major compaction for the passed region.</div>
 </td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getLocks--">getLocks</a></span>()</code>
 <div class="block">List locks.</div>
 </td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getMaster--">getMaster</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getMasterCoprocessorNames--">getMasterCoprocessorNames</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i61" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getMasterInfoPort--">getMasterInfoPort</a></span>()</code>
 <div class="block">Get the info port of the current master if one is available.</div>
 </td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i62" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getNamespaceDescriptor-java.lang.String-">getNamespaceDescriptor</a></span>(<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;name)</code>
 <div class="block">Get a namespace descriptor by name</div>
 </td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getProcedures--">getProcedures</a></span>()</code>
 <div class="block">List procedures</div>
 </td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/quotas/QuotaSettings.html" title="class in org.apache.hadoop.hbase.quotas">QuotaSettings</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getQuota-org.apache.hadoop.hbase.quotas.QuotaFilter-">getQuota</a></span>(<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaFilter.html" title="class in org.apache.hadoop.hbase.quotas">QuotaFilter</a>&nbsp;filter)</code>
 <div class="block">List the quotas based on the filter.</div>
 </td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getRegionMetrics-org.apache.hadoop.hbase.ServerName-">getRegionMetrics</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Get a list of <a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase"><code>RegionMetrics</code></a> of all regions hosted on a region seerver.</div>
 </td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getRegionMetrics-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.TableName-">getRegionMetrics</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                 <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get a list of <a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase"><code>RegionMetrics</code></a> of all regions hosted on a region seerver for a table.</div>
 </td>
 </tr>
-<tr id="i66" class="altColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getRegions-org.apache.hadoop.hbase.ServerName-">getRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Get all the online regions on a region server.</div>
 </td>
 </tr>
-<tr id="i67" class="rowColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getRegions-org.apache.hadoop.hbase.TableName-">getRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the regions of a given table.</div>
 </td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getRegionServers--">getRegionServers</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i69" class="rowColor">
+<tr id="i70" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getReplicationPeerConfig-java.lang.String-">getReplicationPeerConfig</a></span>(<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;peerId)</code>
 <div class="block">Returns the configured ReplicationPeerConfig for the specified peer</div>
 </td>
 </tr>
-<tr id="i70" class="altColor">
+<tr id="i71" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/security/SecurityCapability.html" title="enum in org.apache.hadoop.hbase.client.security">SecurityCapability</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getSecurityCapabilities--">getSecurityCapabilities</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i72" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isBalancerEnabled--">isBalancerEnabled</a></span>()</code>
 <div class="block">Query the current state of the balancer.</div>
 </td>
 </tr>
-<tr id="i72" class="altColor">
+<tr id="i73" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isCatalogJanitorEnabled--">isCatalogJanitorEnabled</a></span>()</code>
 <div class="block">Query on the catalog janitor state.</div>
 </td>
 </tr>
-<tr id="i73" class="rowColor">
+<tr id="i74" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isCleanerChoreEnabled--">isCleanerChoreEnabled</a></span>()</code>
 <div class="block">Query the current state of the cleaner chore.</div>
 </td>
 </tr>
-<tr id="i74" class="altColor">
+<tr id="i75" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isMasterInMaintenanceMode--">isMasterInMaintenanceMode</a></span>()</code>
 <div class="block">Check whether master is in maintenance mode</div>
 </td>
 </tr>
-<tr id="i75" class="rowColor">
+<tr id="i76" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isMergeEnabled--">isMergeEnabled</a></span>()</code>
 <div class="block">Query the current state of the Merge switch.</div>
 </td>
 </tr>
-<tr id="i76" class="altColor">
+<tr id="i77" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isNormalizerEnabled--">isNormalizerEnabled</a></span>()</code>
 <div class="block">Query the current state of the region normalizer</div>
 </td>
 </tr>
-<tr id="i77" class="rowColor">
+<tr id="i78" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isProcedureFinished-java.lang.String-java.lang.String-java.util.Map-">isProcedureFinished</a></span>(<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;signature,
                    <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;instance,
@@ -615,23 +623,23 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <div class="block">Check the current state of the specified procedure.</div>
 </td>
 </tr>
-<tr id="i78" class="altColor">
+<tr id="i79" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isSnapshotFinished-org.apache.hadoop.hbase.client.SnapshotDescription-">isSnapshotFinished</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&nbsp;snapshot)</code>
 <div class="block">Check the current state of the passed snapshot.</div>
 </td>
 </tr>
-<tr id="i79" class="rowColor">
+<tr id="i80" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isSplitEnabled--">isSplitEnabled</a></span>()</code>
 <div class="block">Query the current state of the Split switch.</div>
 </td>
 </tr>
-<tr id="i80" class="altColor">
+<tr id="i81" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isTableAvailable-org.apache.hadoop.hbase.TableName-">isTableAvailable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i81" class="rowColor">
+<tr id="i82" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isTableAvailable-org.apache.hadoop.hbase.TableName-byte:A:A-">isTableAvailable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 byte[][]&nbsp;splitKeys)</code>
@@ -639,119 +647,119 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
  which was used while creating the given table.</div>
 </td>
 </tr>
-<tr id="i82" class="altColor">
+<tr id="i83" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isTableDisabled-org.apache.hadoop.hbase.TableName-">isTableDisabled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i83" class="rowColor">
+<tr id="i84" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isTableEnabled-org.apache.hadoop.hbase.TableName-">isTableEnabled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i84" class="altColor">
+<tr id="i85" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listDeadServers--">listDeadServers</a></span>()</code>
 <div class="block">List all the dead region servers.</div>
 </td>
 </tr>
-<tr id="i85" class="rowColor">
+<tr id="i86" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listDecommissionedRegionServers--">listDecommissionedRegionServers</a></span>()</code>
 <div class="block">List region servers marked as decommissioned, which can not be assigned regions.</div>
 </td>
 </tr>
-<tr id="i86" class="altColor">
+<tr id="i87" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listNamespaceDescriptors--">listNamespaceDescriptors</a></span>()</code>
 <div class="block">List available namespace descriptors</div>
 </td>
 </tr>
-<tr id="i87" class="rowColor">
+<tr id="i88" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/replication/TableCFs.html" title="class in org.apache.hadoop.hbase.client.replication">TableCFs</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listReplicatedTableCFs--">listReplicatedTableCFs</a></span>()</code>
 <div class="block">Find all table and column families that are replicated from this cluster</div>
 </td>
 </tr>
-<tr id="i88" class="altColor">
+<tr id="i89" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listReplicationPeers--">listReplicationPeers</a></span>()</code>
 <div class="block">Return a list of replication peers.</div>
 </td>
 </tr>
-<tr id="i89" class="rowColor">
+<tr id="i90" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listReplicationPeers-java.util.regex.Pattern-">listReplicationPeers</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">Return a list of replication peers.</div>
 </td>
 </tr>
-<tr id="i90" class="altColor">
+<tr id="i91" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listSnapshots--">listSnapshots</a></span>()</code>
 <div class="block">List completed snapshots.</div>
 </td>
 </tr>
-<tr id="i91" class="rowColor">
+<tr id="i92" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listSnapshots-java.util.regex.Pattern-">listSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">List all the completed snapshots matching the given pattern.</div>
 </td>
 </tr>
-<tr id="i92" class="altColor">
+<tr id="i93" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableDescriptors--">listTableDescriptors</a></span>()</code>
 <div class="block">List all the userspace tables.</div>
 </td>
 </tr>
-<tr id="i93" class="rowColor">
+<tr id="i94" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableDescriptors-boolean-">listTableDescriptors</a></span>(boolean&nbsp;includeSysTables)</code>
 <div class="block">List all the tables.</div>
 </td>
 </tr>
-<tr id="i94" class="altColor">
+<tr id="i95" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableDescriptors-java.util.regex.Pattern-boolean-">listTableDescriptors</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern,
                     boolean&nbsp;includeSysTables)</code>
 <div class="block">List all the tables matching the given pattern.</div>
 </td>
 </tr>
-<tr id="i95" class="rowColor">
+<tr id="i96" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableDescriptorsByNamespace-java.lang.String-">listTableDescriptorsByNamespace</a></span>(<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;name)</code>
 <div class="block">Get list of table descriptors by namespace.</div>
 </td>
 </tr>
-<tr id="i96" class="altColor">
+<tr id="i97" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableNames--">listTableNames</a></span>()</code>
 <div class="block">List all of the names of userspace tables.</div>
 </td>
 </tr>
-<tr id="i97" class="rowColor">
+<tr id="i98" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableNames-boolean-">listTableNames</a></span>(boolean&nbsp;includeSysTables)</code>
 <div class="block">List all of the names of tables.</div>
 </td>
 </tr>
-<tr id="i98" class="altColor">
+<tr id="i99" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableNames-java.util.regex.Pattern-boolean-">listTableNames</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern,
               boolean&nbsp;includeSysTables)</code>
 <div class="block">List all of the names of userspace tables.</div>
 </td>
 </tr>
-<tr id="i99" class="rowColor">
+<tr id="i100" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableNamesByNamespace-java.lang.String-">listTableNamesByNamespace</a></span>(<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;name)</code>
 <div class="block">Get list of table names by namespace.</div>
 </td>
 </tr>
-<tr id="i100" class="altColor">
+<tr id="i101" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableSnapshots-java.util.regex.Pattern-">listTableSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern)</code>
 <div class="block">List all the completed snapshots matching the given table name pattern.</div>
 </td>
 </tr>
-<tr id="i101" class="rowColor">
+<tr id="i102" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableSnapshots-java.util.regex.Pattern-java.util.regex.Pattern-">listTableSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;snapshotNamePattern)</code>
@@ -759,20 +767,20 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
  name regular expression.</div>
 </td>
 </tr>
-<tr id="i102" class="altColor">
+<tr id="i103" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompact-org.apache.hadoop.hbase.TableName-">majorCompact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Major compact a table.</div>
 </td>
 </tr>
-<tr id="i103" class="rowColor">
+<tr id="i104" class="altColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompact-org.apache.hadoop.hbase.TableName-byte:A-">majorCompact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
             byte[]&nbsp;columnFamily)</code>
 <div class="block">Major compact a column family within a table.</div>
 </td>
 </tr>
-<tr id="i104" class="altColor">
+<tr id="i105" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompact-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.CompactType-">majorCompact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
             byte[]&nbsp;columnFamily,
@@ -780,33 +788,33 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <div class="block">Major compact a column family within a table.</div>
 </td>
 </tr>
-<tr id="i105" class="rowColor">
+<tr id="i106" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompact-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">majorCompact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
             <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Major compact a table.</div>
 </td>
 </tr>
-<tr id="i106" class="altColor">
+<tr id="i107" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompactRegion-byte:A-">majorCompactRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Major compact a region.</div>
 </td>
 </tr>
-<tr id="i107" class="rowColor">
+<tr id="i108" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompactRegion-byte:A-byte:A-">majorCompactRegion</a></span>(byte[]&nbsp;regionName,
                   byte[]&nbsp;columnFamily)</code>
 <div class="block">Major compact a column family within region.</div>
 </td>
 </tr>
-<tr id="i108" class="altColor">
+<tr id="i109" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompactRegionServer-org.apache.hadoop.hbase.ServerName-">majorCompactRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serv

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    }

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>
+<sp

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.html
index 9573c5f..392306b 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.html
@@ -2068,7 +2068,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>cmp</h4>
-<pre>static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4016">cmp</a></pre>
+<pre>static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4018">cmp</a></pre>
 </li>
 </ul>
 </li>
@@ -2979,7 +2979,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>preCheckPermission</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2132">preCheckPermission</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2134">preCheckPermission</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="../../../../../org/apache/hadoop/hbase/security/AccessDeniedException.html" title="class in org.apache.hadoop.hbase.security">AccessDeniedException</a></pre>
 <dl>
@@ -2995,7 +2995,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteMetaRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2158">deleteMetaRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2160">deleteMetaRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi)
                        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">Deletes region from meta table</div>
 <dl>
@@ -3010,7 +3010,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteMetaRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2165">deleteMetaRegion</a>(byte[]&nbsp;metaKey)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2167">deleteMetaRegion</a>(byte[]&nbsp;metaKey)
                        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">Deletes region from meta table</div>
 <dl>
@@ -3025,7 +3025,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>resetSplitParent</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2174">resetSplitParent</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2176">resetSplitParent</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi)
                        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">Reset the split parent region info in meta table</div>
 <dl>
@@ -3040,7 +3040,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>offline</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2200">offline</a>(byte[]&nbsp;regionName)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2202">offline</a>(byte[]&nbsp;regionName)
               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">This backwards-compatibility wrapper for permanently offlining a region
  that should not be alive.  If the region server does not support the
@@ -3060,7 +3060,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>undeployRegions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2229">undeployRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2231">undeployRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi)
                       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>
@@ -3076,7 +3076,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>undeployRegionsForHbi</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2250">undeployRegionsForHbi</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2252">undeployRegionsForHbi</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi)
                             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>
@@ -3092,7 +3092,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2275">closeRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2277">closeRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi)
                   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>
 <div class="block">Attempts to undeploy a region from a region server based in information in
@@ -3118,7 +3118,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>tryAssignmentRepair</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2323">tryAssignmentRepair</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hbi,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2325">tryAssignmentRepair</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hbi,
                                  <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;msg)
                           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>,
                                  org.apache.zookeeper.KeeperException,
@@ -3137,7 +3137,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>checkRegionConsistency</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2359">checkRegionConsistency</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;key,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2361">checkRegionConsistency</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;key,
                                     <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hbi)
                              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>,
                                     org.apache.zookeeper.KeeperException,
@@ -3157,7 +3157,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>checkIntegrity</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2599">checkIntegrity</a>()
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2601">checkIntegrity</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>
 <div class="block">Checks tables integrity. Goes over all regions and scans the tables.
  Collects all the pieces for each table and checks if there are missing,
@@ -3174,7 +3174,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>loadTableInfosForTablesWithNoRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2666">loadTableInfosForTablesWithNoRegion</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2668">loadTableInfosForTablesWithNoRegion</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>
 <div class="block">Loads table info's for tables that may not have been included, since there are no
  regions reported for the table, but table dir is there in hdfs</div>
@@ -3190,7 +3190,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>mergeRegionDirs</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2686">mergeRegionDirs</a>(org.apache.hadoop.fs.Path&nbsp;targetRegionDir,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2688">mergeRegionDirs</a>(org.apache.hadoop.fs.Path&nbsp;targetRegionDir,
                            <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;contained)
                     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">Merge hdfs data by moving from contained HbckInfo into targetRegionDir.</div>
@@ -3208,7 +3208,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>dumpOverlapProblems</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3492">dumpOverlapProblems</a>(org.apache.hbase.thirdparty.com.google.common.collect.Multimap&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;regions)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3494">dumpOverlapProblems</a>(org.apache.hbase.thirdparty.com.google.common.collect.Multimap&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;regions)</pre>
 </li>
 </ul>
 <a name="dumpSidelinedRegions-java.util.Map-">
@@ -3217,7 +3217,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>dumpSidelinedRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3505">dumpSidelinedRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;org.apache.hadoop.fs.Path,<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;regions)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3507">dumpSidelinedRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;org.apache.hadoop.fs.Path,<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;regions)</pre>
 </li>
 </ul>
 <a name="getOverlapGroups-org.apache.hadoop.hbase.TableName-">
@@ -3226,7 +3226,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getOverlapGroups</h4>
-<pre>public&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.Multimap&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3517">getOverlapGroups</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
+<pre>public&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.Multimap&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3519">getOverlapGroups</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
 </li>
 </ul>
 <a name="getTables-java.util.concurrent.atomic.AtomicInteger-">
@@ -3235,7 +3235,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getTables</h4>
-<pre><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/util/HBaseFsck.html#line.3532">getTables</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a>&nbsp;numSkipped)</pre>
+<pre><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/util/HBaseFsck.html#line.3534">getTables</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a>&nbsp;numSkipped)</pre>
 <div class="block">Return a list of user-space table names whose metadata have not been
  modified in the last few milliseconds specified by timelag
  if any of the REGIONINFO_QUALIFIER, SERVER_QUALIFIER, STARTCODE_QUALIFIER,
@@ -3255,7 +3255,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableDescriptors</h4>
-<pre><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/util/HBaseFsck.html#line.3552">getTableDescriptors</a>(<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tableNames)</pre>
+<pre><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/util/HBaseFsck.html#line.3554">getTableDescriptors</a>(<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tableNames)</pre>
 </li>
 </ul>
 <a name="getOrCreateInfo-java.lang.String-">
@@ -3264,7 +3264,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getOrCreateInfo</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3569">getOrCreateInfo</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;name)</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3571">getOrCreateInfo</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;name)</pre>
 <div class="block">Gets the entry in regionInfo corresponding to the the given encoded
  region name. If the region has not been seen yet, a new entry is added
  and returned.</div>
@@ -3276,7 +3276,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndFixReplication</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3578">checkAndFixReplication</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3580">checkAndFixReplication</a>()
                              throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3290,7 +3290,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>checkMetaRegion</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3597">checkMetaRegion</a>()
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3599">checkMetaRegion</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>,
                         org.apache.zookeeper.KeeperException,
                         <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>
@@ -3312,7 +3312,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>unassignMetaReplica</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3651">unassignMetaReplica</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3653">unassignMetaReplica</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi)
                           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>,
                                  org.apache.zookeeper.KeeperException</pre>
@@ -3330,7 +3330,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>assignMetaReplica</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3657">assignMetaReplica</a>(int&nbsp;replicaId)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3659">assignMetaReplica</a>(int&nbsp;replicaId)
                         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>,
                                org.apache.zookeeper.KeeperException,
                                <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>
@@ -3348,7 +3348,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>loadMetaEntries</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3676">loadMetaEntries</a>()
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3678">loadMetaEntries</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>
 <div class="block">Scan hbase:meta, adding all regions found to the regionInfo map.</div>
 <dl>
@@ -3363,7 +3363,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>printTableSummary</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4067">printTableSummary</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&gt;&nbsp;tablesInfo)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4069">printTableSummary</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&gt;&nbsp;tablesInfo)</pre>
 <div class="block">Prints summary of all tables found on the system.</div>
 </li>
 </ul>
@@ -3373,7 +3373,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getErrorReporter</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4102">getErrorReporter</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4104">getErrorReporter</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
                                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3387,7 +3387,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setDisplayFullReport</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4501">setDisplayFullReport</a>()</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4503">setDisplayFullReport</a>()</pre>
 <div class="block">Display the full report from fsck. This displays all live and dead region
  servers, and all known regions.</div>
 </li>
@@ -3398,7 +3398,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setForceExclusive</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4508">setForceExclusive</a>()</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4510">setForceExclusive</a>()</pre>
 <div class="block">Set exclusive mode.</div>
 </li>
 </ul>
@@ -3408,7 +3408,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>isExclusive</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4515">isExclusive</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4517">isExclusive</a>()</pre>
 <div class="block">Only one instance of hbck can modify HBase at a time.</div>
 </li>
 </ul>
@@ -3418,7 +3418,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setSummary</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4523">setSummary</a>()</pre>
+<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4525">setSummary</a>()</pre>
 <div class="block">Set summary mode.
  Print only summary of the tables and status (OK or INCONSISTENT)</div>
 </li>
@@ -3429,7 +3429,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setCheckMetaOnly</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4531">setCheckMetaOnly</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4533">setCheckMetaOnly</a>()</pre>
 <div class="block">Set hbase:meta check mode.
  Print only info about hbase:meta table deployment/state</div>
 </li>
@@ -3440,7 +3440,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setRegionBoundariesCheck</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4538">setRegionBoundariesCheck</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4540">setRegionBoundariesCheck</a>()</pre>
 <div class="block">Set region boundaries check mode.</div>
 </li>
 </ul>
@@ -3450,7 +3450,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixReplication</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4545">setFixReplication</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4547">setFixReplication</a>(boolean&nbsp;shouldFix)</pre>
 <div class="block">Set replication fix mode.</div>
 </li>
 </ul>
@@ -3460,7 +3460,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setShouldRerun</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4556">setShouldRerun</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4558">setShouldRerun</a>()</pre>
 <div class="block">Check if we should rerun fsck again. This checks if we've tried to
  fix something and we should rerun fsck tool again.
  Display the full report from fsck. This displays all live and dead
@@ -3473,7 +3473,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldRerun</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4560">shouldRerun</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4562">shouldRerun</a>()</pre>
 </li>
 </ul>
 <a name="setFixAssignments-boolean-">
@@ -3482,7 +3482,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixAssignments</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4568">setFixAssignments</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4570">setFixAssignments</a>(boolean&nbsp;shouldFix)</pre>
 <div class="block">Fix inconsistencies found by fsck. This should try to fix errors (if any)
  found by fsck utility.</div>
 </li>
@@ -3493,7 +3493,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixAssignments</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4573">shouldFixAssignments</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4575">shouldFixAssignments</a>()</pre>
 </li>
 </ul>
 <a name="setFixMeta-boolean-">
@@ -3502,7 +3502,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixMeta</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4577">setFixMeta</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4579">setFixMeta</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixMeta--">
@@ -3511,7 +3511,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixMeta</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4582">shouldFixMeta</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4584">shouldFixMeta</a>()</pre>
 </li>
 </ul>
 <a name="setFixEmptyMetaCells-boolean-">
@@ -3520,7 +3520,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixEmptyMetaCells</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4586">setFixEmptyMetaCells</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4588">setFixEmptyMetaCells</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixEmptyMetaCells--">
@@ -3529,7 +3529,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixEmptyMetaCells</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4591">shouldFixEmptyMetaCells</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4593">shouldFixEmptyMetaCells</a>()</pre>
 </li>
 </ul>
 <a name="setCheckHdfs-boolean-">
@@ -3538,7 +3538,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setCheckHdfs</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4595">setCheckHdfs</a>(boolean&nbsp;checking)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4597">setCheckHdfs</a>(boolean&nbsp;checking)</pre>
 </li>
 </ul>
 <a name="shouldCheckHdfs--">
@@ -3547,7 +3547,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldCheckHdfs</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4599">shouldCheckHdfs</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4601">shouldCheckHdfs</a>()</pre>
 </li>
 </ul>
 <a name="setFixHdfsHoles-boolean-">
@@ -3556,7 +3556,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixHdfsHoles</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4603">setFixHdfsHoles</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4605">setFixHdfsHoles</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixHdfsHoles--">
@@ -3565,7 +3565,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixHdfsHoles</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4608">shouldFixHdfsHoles</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4610">shouldFixHdfsHoles</a>()</pre>
 </li>
 </ul>
 <a name="setFixTableOrphans-boolean-">
@@ -3574,7 +3574,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixTableOrphans</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4612">setFixTableOrphans</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4614">setFixTableOrphans</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixTableOrphans--">
@@ -3583,7 +3583,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixTableOrphans</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4617">shouldFixTableOrphans</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4619">shouldFixTableOrphans</a>()</pre>
 </li>
 </ul>
 <a name="setFixHdfsOverlaps-boolean-">
@@ -3592,7 +3592,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixHdfsOverlaps</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4621">setFixHdfsOverlaps</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4623">setFixHdfsOverlaps</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixHdfsOverlaps--">
@@ -3601,7 +3601,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixHdfsOverlaps</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4626">shouldFixHdfsOverlaps</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4628">shouldFixHdfsOverlaps</a>()</pre>
 </li>
 </ul>
 <a name="setFixHdfsOrphans-boolean-">
@@ -3610,7 +3610,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixHdfsOrphans</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4630">setFixHdfsOrphans</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4632">setFixHdfsOrphans</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixHdfsOrphans--">
@@ -3619,7 +3619,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixHdfsOrphans</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4635">shouldFixHdfsOrphans</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4637">shouldFixHdfsOrphans</a>()</pre>
 </li>
 </ul>
 <a name="setFixVersionFile-boolean-">
@@ -3628,7 +3628,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixVersionFile</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4639">setFixVersionFile</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4641">setFixVersionFile</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixVersionFile--">
@@ -3637,7 +3637,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixVersionFile</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4644">shouldFixVersionFile</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4646">shouldFixVersionFile</a>()</pre>
 </li>
 </ul>
 <a name="setSidelineBigOverlaps-boolean-">
@@ -3646,7 +3646,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setSidelineBigOverlaps</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4648">setSidelineBigOverlaps</a>(boolean&nbsp;sbo)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4650">setSidelineBigOverlaps</a>(boolean&nbsp;sbo)</pre>
 </li>
 </ul>
 <a name="shouldSidelineBigOverlaps--">
@@ -3655,7 +3655,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldSidelineBigOverlaps</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4652">shouldSidelineBigOverlaps</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4654">shouldSidelineBigOverlaps</a>()</pre>
 </li>
 </ul>
 <a name="setFixSplitParents-boolean-">
@@ -3664,7 +3664,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixSplitParents</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4656">setFixSplitParents</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4658">setFixSplitParents</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="setRemoveParents-boolean-">
@@ -3673,7 +3673,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setRemoveParents</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4661">setRemoveParents</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4663">setRemoveParents</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixSplitParents--">
@@ -3682,7 +3682,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixSplitParents</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4666">shouldFixSplitParents</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4668">shouldFixSplitParents</a>()</pre>
 </li>
 </ul>
 <a name="shouldRemoveParents--">
@@ -3691,7 +3691,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldRemoveParents</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4670">shouldRemoveParents</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4672">shouldRemoveParents</a>()</pre>
 </li>
 </ul>
 <a name="setFixReferenceFiles-boolean-">
@@ -3700,7 +3700,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixReferenceFiles</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4674">setFixReferenceFiles</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4676">setFixReferenceFiles</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixReferenceFiles--">
@@ -3709,7 +3709,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixReferenceFiles</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4679">shouldFixReferenceFiles</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4681">shouldFixReferenceFiles</a>()</pre>
 </li>
 </ul>
 <a name="setFixHFileLinks-boolean-">
@@ -3718,7 +3718,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixHFileLinks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4683">setFixHFileLinks</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4685">setFixHFileLinks</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixHFileLinks--">
@@ -3727,7 +3727,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixHFileLinks</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4688">shouldFixHFileLinks</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4690">shouldFixHFileLinks</a>()</pre>
 </li>
 </ul>
 <a name="shouldIgnorePreCheckPermission--">
@@ -3736,7 +3736,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldIgnorePreCheckPermission</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4692">shouldIgnorePreCheckPermission</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4694">shouldIgnorePreCheckPermission</a>()</pre>
 </li>
 </ul>
 <a name="setIgnorePreCheckPermission-boolean-">
@@ -3745,7 +3745,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setIgnorePreCheckPermission</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4696">setIgnorePreCheckPermission</a>(boolean&nbsp;ignorePreCheckPermission)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4698">setIgnorePreCheckPermission</a>(boolean&nbsp;ignorePreCheckPermission)</pre>
 </li>
 </ul>
 <a name="setMaxMerge-int-">
@@ -3754,7 +3754,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxMerge</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4703">setMaxMerge</a>(int&nbsp;mm)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4705">setMaxMerge</a>(int&nbsp;mm)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>mm</code> - maximum number of regions to merge into a single region.</dd>
@@ -3767,7 +3767,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxMerge</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4707">getMaxMerge</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4709">getMaxMerge</a>()</pre>
 </li>
 </ul>
 <a name="setMaxOverlapsToSideline-int-">
@@ -3776,7 +3776,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxOverlapsToSideline</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4711">setMaxOverlapsToSideline</a>(int&nbsp;mo)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4713">setMaxOverlapsToSideline</a>(int&nbsp;mo)</pre>
 </li>
 </ul>
 <a name="getMaxOverlapsToSideline--">
@@ -3785,7 +3785,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxOverlapsToSideline</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4715">getMaxOverlapsToSideline</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4717">getMaxOverlapsToSideline</a>()</pre>
 </li>
 </ul>
 <a name="isTableIncluded-org.apache.hadoop.hbase.TableName-">
@@ -3794,7 +3794,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>isTableIncluded</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4723">isTableIncluded</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4725">isTableIncluded</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
 <div class="block">Only check/fix tables specified by the list,
  Empty list means all tables are included.</div>
 </li>
@@ -3805,7 +3805,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>includeTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4727">includeTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4729">includeTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
 </li>
 </ul>
 <a name="getIncludedTables--">
@@ -3814,7 +3814,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getIncludedTables</h4>
-<pre><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;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4731">getIncludedTables</a>()</pre>
+<pre><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;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4733">getIncludedTables</a>()</pre>
 </li>
 </ul>
 <a name="setTimeLag-long-">
@@ -3823,7 +3823,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimeLag</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4740">setTimeLag</a>(long&nbsp;seconds)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4742">setTimeLag</a>(long&nbsp;seconds)</pre>
 <div class="block">We are interested in only those tables that have not changed their state in
  hbase:meta during the last few seconds specified by hbase.admin.fsck.timelag</div>
 <dl>
@@ -3838,7 +3838,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setSidelineDir</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4748">setSidelineDir</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;sidelineDir)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4750">setSidelineDir</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;sidelineDir)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>sidelineDir</code> - - HDFS path to sideline data</dd>
@@ -3851,7 +3851,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>createHFileCorruptionChecker</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.html" title="class in org.apache.hadoop.hbase.util.hbck">HFileCorruptionChecker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4752">createHFileCorruptionChecker</a>(boolean&nbsp;sidelineCorruptHFiles)
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.html" title="class in org.apache.hadoop.hbase.util.hbck">HFileCorruptionChecker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4754">createHFileCorruptionChecker</a>(boolean&nbsp;sidelineCorruptHFiles)
                                                        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>
@@ -3865,7 +3865,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getHFilecorruptionChecker</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.html" title="class in org.apache.hadoop.hbase.util.hbck">HFileCorruptionChecker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4756">getHFilecorruptionChecker</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.html" title="class in org.apache.hadoop.hbase.util.hbck">HFileCorruptionChecker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4758">getHFilecorruptionChecker</a>()</pre>
 </li>
 </ul>
 <a name="setHFileCorruptionChecker-org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker-">
@@ -3874,7 +3874,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setHFileCorruptionChecker</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4760">setHFileCorruptionChecker</a>(<a href="../../../../../org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.html" title="class in org.apache.hadoop.hbase.util.hbck">HFileCorruptionChecker</a>&nbsp;hfcc)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4762">setHFileCorruptionChecker</a>(<a href="../../../../../org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.html" title="class in org.apache.hadoop.hbase.util.hbck">HFileCorruptionChecker</a>&nbsp;hfcc)</pre>
 </li>
 </ul>
 <a name="setRetCode-int-">
@@ -3883,7 +3883,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>setRetCode</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4764">setRetCode</a>(int&nbsp;code)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4766">setRetCode</a>(int&nbsp;code)</pre>
 </li>
 </ul>
 <a name="getRetCode--">
@@ -3892,7 +3892,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getRetCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4768">getRetCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4770">getRetCode</a>()</pre>
 </li>
 </ul>
 <a name="printUsageAndExit--">
@@ -3901,7 +3901,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>printUsageAndExit</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4772">printUsageAndExit</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4774">printUsageAndExit</a>()</pre>
 </li>
 </ul>
 <a name="main-java.lang.String:A-">
@@ -3910,7 +3910,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4842">main</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;args)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4844">main</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;args)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Main program</div>
 <dl>
@@ -3927,7 +3927,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>exec</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4866">exec</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;exec,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4868">exec</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;exec,
                       <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;args)
                throws org.apache.zookeeper.KeeperException,
                       <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>,
@@ -3948,7 +3948,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>debugLsr</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.5093">debugLsr</a>(org.apache.hadoop.fs.Path&nbsp;p)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.5095">debugLsr</a>(org.apache.hadoop.fs.Path&nbsp;p)
        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">ls -r for debugging purposes</div>
 <dl>
@@ -3963,7 +3963,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>debugLsr</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.5100">debugLsr</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.5102">debugLsr</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                             org.apache.hadoop.fs.Path&nbsp;p)
                      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">ls -r for debugging purposes</div>
@@ -3979,7 +3979,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>debugLsr</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.5108">debugLsr</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.5110">debugLsr</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                             org.apache.hadoop.fs.Path&nbsp;p,
                             <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a>&nbsp;errors)
                      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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index 6f1c2de..5dbe520 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -532,13 +532,13 @@
 <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" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/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/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/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.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/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/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/RSGroupTableAccessor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/RSGroupTableAccessor.html b/devapidocs/src-html/org/apache/hadoop/hbase/RSGroupTableAccessor.html
index 1c90831..60ecaac 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/RSGroupTableAccessor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/RSGroupTableAccessor.html
@@ -53,41 +53,45 @@
 <span class="sourceLineNo">045</span>  private static final byte[] META_FAMILY_BYTES = Bytes.toBytes("m");<a name="line.45"></a>
 <span class="sourceLineNo">046</span>  private static final byte[] META_QUALIFIER_BYTES = Bytes.toBytes("i");<a name="line.46"></a>
 <span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>  public static List&lt;RSGroupInfo&gt; getAllRSGroupInfo(Connection connection)<a name="line.48"></a>
-<span class="sourceLineNo">049</span>      throws IOException {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>    try (Table rsGroupTable = connection.getTable(RSGROUP_TABLE_NAME)) {<a name="line.50"></a>
-<span class="sourceLineNo">051</span>      List&lt;RSGroupInfo&gt; rsGroupInfos = new ArrayList&lt;&gt;();<a name="line.51"></a>
-<span class="sourceLineNo">052</span>      for (Result result : rsGroupTable.getScanner(new Scan())) {<a name="line.52"></a>
-<span class="sourceLineNo">053</span>        RSGroupInfo rsGroupInfo = getRSGroupInfo(result);<a name="line.53"></a>
-<span class="sourceLineNo">054</span>        if (rsGroupInfo != null) {<a name="line.54"></a>
-<span class="sourceLineNo">055</span>          rsGroupInfos.add(rsGroupInfo);<a name="line.55"></a>
-<span class="sourceLineNo">056</span>        }<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      }<a name="line.57"></a>
-<span class="sourceLineNo">058</span>      return rsGroupInfos;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    }<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  }<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private static RSGroupInfo getRSGroupInfo(Result result) throws IOException {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    byte[] rsGroupInfo = result.getValue(META_FAMILY_BYTES, META_QUALIFIER_BYTES);<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    if (rsGroupInfo == null) {<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      return null;<a name="line.65"></a>
+<span class="sourceLineNo">048</span>  private RSGroupTableAccessor() {<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  }<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  public static boolean isRSGroupsEnabled(Connection connection) throws IOException {<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    return connection.getAdmin().tableExists(RSGROUP_TABLE_NAME);<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  }<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>  public static List&lt;RSGroupInfo&gt; getAllRSGroupInfo(Connection connection)<a name="line.55"></a>
+<span class="sourceLineNo">056</span>      throws IOException {<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    try (Table rsGroupTable = connection.getTable(RSGROUP_TABLE_NAME)) {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>      List&lt;RSGroupInfo&gt; rsGroupInfos = new ArrayList&lt;&gt;();<a name="line.58"></a>
+<span class="sourceLineNo">059</span>      for (Result result : rsGroupTable.getScanner(new Scan())) {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>        RSGroupInfo rsGroupInfo = getRSGroupInfo(result);<a name="line.60"></a>
+<span class="sourceLineNo">061</span>        if (rsGroupInfo != null) {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>          rsGroupInfos.add(rsGroupInfo);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>        }<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      }<a name="line.64"></a>
+<span class="sourceLineNo">065</span>      return rsGroupInfos;<a name="line.65"></a>
 <span class="sourceLineNo">066</span>    }<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    RSGroupProtos.RSGroupInfo proto =<a name="line.67"></a>
-<span class="sourceLineNo">068</span>        RSGroupProtos.RSGroupInfo.parseFrom(rsGroupInfo);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    return ProtobufUtil.toGroupInfo(proto);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  public static RSGroupInfo getRSGroupInfo(Connection connection, byte[] rsGroupName)<a name="line.72"></a>
-<span class="sourceLineNo">073</span>      throws IOException {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    try (Table rsGroupTable = connection.getTable(RSGROUP_TABLE_NAME)){<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      Result result = rsGroupTable.get(new Get(rsGroupName));<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      return getRSGroupInfo(result);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    }<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private RSGroupTableAccessor() {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  }<a name="line.81"></a>
-<span class="sourceLineNo">082</span>}<a name="line.82"></a>
+<span class="sourceLineNo">067</span>  }<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private static RSGroupInfo getRSGroupInfo(Result result) throws IOException {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    byte[] rsGroupInfo = result.getValue(META_FAMILY_BYTES, META_QUALIFIER_BYTES);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    if (rsGroupInfo == null) {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      return null;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    }<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    RSGroupProtos.RSGroupInfo proto =<a name="line.74"></a>
+<span class="sourceLineNo">075</span>        RSGroupProtos.RSGroupInfo.parseFrom(rsGroupInfo);<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    return ProtobufUtil.toGroupInfo(proto);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span>  public static RSGroupInfo getRSGroupInfo(Connection connection, byte[] rsGroupName)<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      throws IOException {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    try (Table rsGroupTable = connection.getTable(RSGROUP_TABLE_NAME)){<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      Result result = rsGroupTable.get(new Get(rsGroupName));<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      return getRSGroupInfo(result);<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
+<span class="sourceLineNo">086</span>}<a name="line.86"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index 2b43dcf..924725b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -16,11 +16,11 @@
 <span class="sourceLineNo">008</span>@InterfaceAudience.Private<a name="line.8"></a>
 <span class="sourceLineNo">009</span>public class Version {<a name="line.9"></a>
 <span class="sourceLineNo">010</span>  public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
-<span class="sourceLineNo">011</span>  public static final String revision = "37e5b0b1b790fef25a544c282c6556e009269a0e";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "2912c953551bedbfbf30c32c156ed7bb187d54c3";<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String date = "Wed Apr 11 14:41:28 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Thu Apr 12 14:42:18 UTC 2018";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String url = "git://jenkins-websites1.apache.org/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span>  public static final String srcChecksum = "98835c01785bb7b3d1dc35f1f6ab3cd1";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "7478585c09b5dfa7052f49de0f17318b";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/Admin.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/Admin.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/Admin.html
index 4bdaf23..863532f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/Admin.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/Admin.html
@@ -2735,7 +2735,18 @@
 <span class="sourceLineNo">2727</span>   * @return List of servers that are not cleared<a name="line.2727"></a>
 <span class="sourceLineNo">2728</span>   */<a name="line.2728"></a>
 <span class="sourceLineNo">2729</span>  List&lt;ServerName&gt; clearDeadServers(final List&lt;ServerName&gt; servers) throws IOException;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>}<a name="line.2730"></a>
+<span class="sourceLineNo">2730</span><a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>  /**<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>   * Create a new table by cloning the existent table schema.<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>   *<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>   * @param tableName name of the table to be cloned<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>   * @param newTableName name of the new table where the table will be created<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>   * @param preserveSplits True if the splits should be preserved<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>   * @throws IOException if a remote or network exception occurs<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>   */<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>  void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.2739"></a>
+<span class="sourceLineNo">2740</span>      final boolean preserveSplits) throws IOException;<a name="line.2740"></a>
+<span class="sourceLineNo">2741</span>}<a name="line.2741"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdmin.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdmin.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdmin.html
index 5c18b82..27eb0b0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdmin.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdmin.html
@@ -1238,7 +1238,17 @@
 <span class="sourceLineNo">1230</span>   * @return CacheEvictionStats related to the eviction wrapped by a {@link CompletableFuture}.<a name="line.1230"></a>
 <span class="sourceLineNo">1231</span>   */<a name="line.1231"></a>
 <span class="sourceLineNo">1232</span>  CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(final TableName tableName);<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>}<a name="line.1233"></a>
+<span class="sourceLineNo">1233</span><a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>  /**<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>   * Create a new table by cloning the existent table schema.<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>   *<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>   * @param tableName name of the table to be cloned<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>   * @param newTableName name of the new table where the table will be created<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>   * @param preserveSplits True if the splits should be preserved<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>   */<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>  CompletableFuture&lt;Void&gt;  cloneTableSchema(final TableName tableName,<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      final TableName newTableName, final boolean preserveSplits);<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>}<a name="line.1243"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html
index 77431f3..955b0b1 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html
@@ -754,7 +754,13 @@
 <span class="sourceLineNo">746</span>  public CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(TableName tableName) {<a name="line.746"></a>
 <span class="sourceLineNo">747</span>    return wrap(rawAdmin.clearBlockCache(tableName));<a name="line.747"></a>
 <span class="sourceLineNo">748</span>  }<a name="line.748"></a>
-<span class="sourceLineNo">749</span>}<a name="line.749"></a>
+<span class="sourceLineNo">749</span><a name="line.749"></a>
+<span class="sourceLineNo">750</span>  @Override<a name="line.750"></a>
+<span class="sourceLineNo">751</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.751"></a>
+<span class="sourceLineNo">752</span>      boolean preserveSplits) {<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    return wrap(rawAdmin.cloneTableSchema(tableName, newTableName, preserveSplits));<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
+<span class="sourceLineNo">755</span>}<a name="line.755"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/apidocs/org/apache/hadoop/hbase/client/Admin.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/Admin.html b/apidocs/org/apache/hadoop/hbase/client/Admin.html
index 39252f9..1eb1565 100644
--- a/apidocs/org/apache/hadoop/hbase/client/Admin.html
+++ b/apidocs/org/apache/hadoop/hbase/client/Admin.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":6,"i1":6,"i2":6,"i3":50,"i4":6,"i5":6,"i6":18,"i7":6,"i8":18,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":50,"i15":50,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6,"i23":6,"i24":6,"i25":6,"i26":6,"i27":38,"i28":38,"i29":38,"i30":38,"i31":6,"i32":6,"i33":6,"i34":6,"i35":6,"i36":6,"i37":6,"i38":50,"i39":6,"i40":6,"i41":6,"i42":6,"i43":6,"i44":6,"i45":6,"i46":6,"i47":6,"i48":38,"i49":6,"i50":6,"i51":6,"i52":6,"i53":6,"i54":6,"i55":6,"i56":38,"i57":6,"i58":6,"i59":38,"i60":38,"i61":6,"i62":38,"i63":6,"i64":6,"i65":6,"i66":6,"i67":6,"i68":38,"i69":38,"i70":50,"i71":6,"i72":6,"i73":6,"i74":6,"i75":6,"i76":38,"i77":38,"i78":6,"i79":50,"i80":6,"i81":6,"i82":6,"i83":6,"i84":38,"i85":38,"i86":18,"i87":18,"i88":6,"i89":50,"i90":6,"i91":6,"i92":6,"i93":6,"i94":6,"i95":6,"i96":6,"i97":6,"i98":6,"i99":18,"i100":18,"i101":50,"i102":18,"i103":6,"i104":38,"i105":6,"i106":6,"i107":6,"i108":38,"i109":18,"i110":6,"i111":6,"i112":6,"i113":18,"i114":6,"i115":6,"i116":38,"i11
 7":38,"i118":38,"i119":38,"i120":6,"i121":6,"i122":6,"i123":6,"i124":6,"i125":6,"i126":6,"i127":6,"i128":6,"i129":6,"i130":50,"i131":6,"i132":38,"i133":6,"i134":6,"i135":18,"i136":6,"i137":6,"i138":6,"i139":6,"i140":6,"i141":6,"i142":6,"i143":38,"i144":6,"i145":6,"i146":6,"i147":6,"i148":6,"i149":38,"i150":6,"i151":6,"i152":6,"i153":38,"i154":38,"i155":6,"i156":38,"i157":38,"i158":38,"i159":38,"i160":38,"i161":6,"i162":38,"i163":6,"i164":6,"i165":6,"i166":6,"i167":6,"i168":6,"i169":6,"i170":38,"i171":6,"i172":6,"i173":6,"i174":50,"i175":6,"i176":6,"i177":6,"i178":6,"i179":6,"i180":38,"i181":6,"i182":38,"i183":6,"i184":6,"i185":6,"i186":6,"i187":6,"i188":6,"i189":6,"i190":6,"i191":6,"i192":6,"i193":6,"i194":6,"i195":6,"i196":6,"i197":6,"i198":6,"i199":50,"i200":6,"i201":50,"i202":50,"i203":50,"i204":6,"i205":50,"i206":6,"i207":6,"i208":6,"i209":6,"i210":6,"i211":6,"i212":6,"i213":6,"i214":38,"i215":38,"i216":6,"i217":6,"i218":6,"i219":6,"i220":6,"i221":50,"i222":6,"i223":6,"i224":6,"
 i225":6,"i226":6,"i227":6,"i228":6};
+var methods = {"i0":6,"i1":6,"i2":6,"i3":50,"i4":6,"i5":6,"i6":18,"i7":6,"i8":18,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":50,"i15":50,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6,"i23":6,"i24":6,"i25":6,"i26":6,"i27":6,"i28":38,"i29":38,"i30":38,"i31":38,"i32":6,"i33":6,"i34":6,"i35":6,"i36":6,"i37":6,"i38":6,"i39":50,"i40":6,"i41":6,"i42":6,"i43":6,"i44":6,"i45":6,"i46":6,"i47":6,"i48":6,"i49":38,"i50":6,"i51":6,"i52":6,"i53":6,"i54":6,"i55":6,"i56":6,"i57":38,"i58":6,"i59":6,"i60":38,"i61":38,"i62":6,"i63":38,"i64":6,"i65":6,"i66":6,"i67":6,"i68":6,"i69":38,"i70":38,"i71":50,"i72":6,"i73":6,"i74":6,"i75":6,"i76":6,"i77":38,"i78":38,"i79":6,"i80":50,"i81":6,"i82":6,"i83":6,"i84":6,"i85":38,"i86":38,"i87":18,"i88":18,"i89":6,"i90":50,"i91":6,"i92":6,"i93":6,"i94":6,"i95":6,"i96":6,"i97":6,"i98":6,"i99":6,"i100":18,"i101":18,"i102":50,"i103":18,"i104":6,"i105":38,"i106":6,"i107":6,"i108":6,"i109":38,"i110":18,"i111":6,"i112":6,"i113":6,"i114":18,"i115":6,"i116":6,"i117
 ":38,"i118":38,"i119":38,"i120":38,"i121":6,"i122":6,"i123":6,"i124":6,"i125":6,"i126":6,"i127":6,"i128":6,"i129":6,"i130":6,"i131":50,"i132":6,"i133":38,"i134":6,"i135":6,"i136":18,"i137":6,"i138":6,"i139":6,"i140":6,"i141":6,"i142":6,"i143":6,"i144":38,"i145":6,"i146":6,"i147":6,"i148":6,"i149":6,"i150":38,"i151":6,"i152":6,"i153":6,"i154":38,"i155":38,"i156":6,"i157":38,"i158":38,"i159":38,"i160":38,"i161":38,"i162":6,"i163":38,"i164":6,"i165":6,"i166":6,"i167":6,"i168":6,"i169":6,"i170":6,"i171":38,"i172":6,"i173":6,"i174":6,"i175":50,"i176":6,"i177":6,"i178":6,"i179":6,"i180":6,"i181":38,"i182":6,"i183":38,"i184":6,"i185":6,"i186":6,"i187":6,"i188":6,"i189":6,"i190":6,"i191":6,"i192":6,"i193":6,"i194":6,"i195":6,"i196":6,"i197":6,"i198":6,"i199":6,"i200":50,"i201":6,"i202":50,"i203":50,"i204":50,"i205":6,"i206":50,"i207":6,"i208":6,"i209":6,"i210":6,"i211":6,"i212":6,"i213":6,"i214":6,"i215":38,"i216":38,"i217":6,"i218":6,"i219":6,"i220":6,"i221":6,"i222":50,"i223":6,"i224":6,"
 i225":6,"i226":6,"i227":6,"i228":6,"i229":6};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -327,10 +327,18 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </tr>
 <tr id="i26" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#close--">close</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;newTableName,
+                boolean&nbsp;preserveSplits)</code>
+<div class="block">Create a new table by cloning the existent table schema.</div>
+</td>
 </tr>
 <tr id="i27" class="rowColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#close--">close</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i28" class="altColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#closeRegion-byte:A-java.lang.String-">closeRegion</a></span>(byte[]&nbsp;regionname,
            <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;serverName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -339,7 +347,7 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#closeRegion-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.HRegionInfo-">closeRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn,
            <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri)</code>
@@ -350,7 +358,7 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#closeRegion-java.lang.String-java.lang.String-">closeRegion</a></span>(<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;regionname,
            <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;serverName)</code>
@@ -360,7 +368,7 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#closeRegionWithEncodedRegionName-java.lang.String-java.lang.String-">closeRegionWithEncodedRegionName</a></span>(<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;encodedRegionName,
                                 <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;serverName)</code>
@@ -370,20 +378,20 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compact-org.apache.hadoop.hbase.TableName-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily)</code>
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily,
@@ -391,33 +399,33 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compact-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compactRegion-byte:A-">compactRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Compact an individual region.</div>
 </td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compactRegion-byte:A-byte:A-">compactRegion</a></span>(byte[]&nbsp;regionName,
              byte[]&nbsp;columnFamily)</code>
 <div class="block">Compact a column family within a region.</div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compactRegionServer-org.apache.hadoop.hbase.ServerName-">compactRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Compact all regions on the region server.</div>
 </td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code>default void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compactRegionServer-org.apache.hadoop.hbase.ServerName-boolean-">compactRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn,
                    boolean&nbsp;major)</code>
@@ -428,46 +436,46 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ipc/CoprocessorRpcChannel.html" title="interface in org.apache.hadoop.hbase.ipc">CoprocessorRpcChannel</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#coprocessorService--">coprocessorService</a></span>()</code>
 <div class="block">Creates and returns a <code>RpcChannel</code> instance connected to the active
  master.</div>
 </td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ipc/CoprocessorRpcChannel.html" title="interface in org.apache.hadoop.hbase.ipc">CoprocessorRpcChannel</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#coprocessorService-org.apache.hadoop.hbase.ServerName-">coprocessorService</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Creates and returns a <code>RpcChannel</code> instance
  connected to the passed region server.</div>
 </td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#createNamespace-org.apache.hadoop.hbase.NamespaceDescriptor-">createNamespace</a></span>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;descriptor)</code>
 <div class="block">Create a new namespace.</div>
 </td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#createNamespaceAsync-org.apache.hadoop.hbase.NamespaceDescriptor-">createNamespaceAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;descriptor)</code>
 <div class="block">Create a new namespace.</div>
 </td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</code>
 <div class="block">Creates a new table.</div>
 </td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-byte:A:A-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
            byte[][]&nbsp;splitKeys)</code>
 <div class="block">Creates a new table with an initial set of empty regions defined by the specified split keys.</div>
 </td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-byte:A-byte:A-int-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
            byte[]&nbsp;startKey,
@@ -476,14 +484,14 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 <div class="block">Creates a new table with the specified number of regions.</div>
 </td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#createTableAsync-org.apache.hadoop.hbase.client.TableDescriptor-byte:A:A-">createTableAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
                 byte[][]&nbsp;splitKeys)</code>
 <div class="block">Creates a new table but does not block and wait for it to come online.</div>
 </td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#decommissionRegionServers-java.util.List-boolean-">decommissionRegionServers</a></span>(<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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers,
                          boolean&nbsp;offload)</code>
@@ -491,7 +499,7 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
  assigned to them.</div>
 </td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteColumn-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumn</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
             byte[]&nbsp;columnFamily)</code>
@@ -502,51 +510,51 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteColumnFamily-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumnFamily</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   byte[]&nbsp;columnFamily)</code>
 <div class="block">Delete a column family from a table.</div>
 </td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteColumnFamilyAsync-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumnFamilyAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                        byte[]&nbsp;columnFamily)</code>
 <div class="block">Delete a column family from a table.</div>
 </td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteNamespace-java.lang.String-">deleteNamespace</a></span>(<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;name)</code>
 <div class="block">Delete an existing namespace.</div>
 </td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteNamespaceAsync-java.lang.String-">deleteNamespaceAsync</a></span>(<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;name)</code>
 <div class="block">Delete an existing namespace.</div>
 </td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteSnapshot-byte:A-">deleteSnapshot</a></span>(byte[]&nbsp;snapshotName)</code>
 <div class="block">Delete an existing snapshot.</div>
 </td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteSnapshot-java.lang.String-">deleteSnapshot</a></span>(<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;snapshotName)</code>
 <div class="block">Delete an existing snapshot.</div>
 </td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteSnapshots-java.util.regex.Pattern-">deleteSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">Delete existing snapshots whose names match the pattern passed.</div>
 </td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteSnapshots-java.lang.String-">deleteSnapshots</a></span>(<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;regex)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -555,19 +563,19 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteTable-org.apache.hadoop.hbase.TableName-">deleteTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Deletes a table.</div>
 </td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteTableAsync-org.apache.hadoop.hbase.TableName-">deleteTableAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Deletes the table but does not block and wait for it to be completely removed.</div>
 </td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteTables-java.util.regex.Pattern-">deleteTables</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -578,7 +586,7 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i61" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteTables-java.lang.String-">deleteTables</a></span>(<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;regex)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -589,7 +597,7 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i62" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteTableSnapshots-java.util.regex.Pattern-java.util.regex.Pattern-">deleteTableSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;snapshotNamePattern)</code>
@@ -597,7 +605,7 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
  name regular expression.</div>
 </td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteTableSnapshots-java.lang.String-java.lang.String-">deleteTableSnapshots</a></span>(<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;tableNameRegex,
                     <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;snapshotNameRegex)</code>
@@ -607,37 +615,37 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableReplicationPeer-java.lang.String-">disableReplicationPeer</a></span>(<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;peerId)</code>
 <div class="block">Stop the replication stream to the specified peer.</div>
 </td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableReplicationPeerAsync-java.lang.String-">disableReplicationPeerAsync</a></span>(<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;peerId)</code>
 <div class="block">Disable a replication peer but does not block and wait for it.</div>
 </td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableTable-org.apache.hadoop.hbase.TableName-">disableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable table and wait on completion.</div>
 </td>
 </tr>
-<tr id="i66" class="altColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableTableAsync-org.apache.hadoop.hbase.TableName-">disableTableAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable the table but does not block and wait for it to be completely disabled.</div>
 </td>
 </tr>
-<tr id="i67" class="rowColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableTableReplication-org.apache.hadoop.hbase.TableName-">disableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable a table's replication switch.</div>
 </td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableTables-java.util.regex.Pattern-">disableTables</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -648,7 +656,7 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i69" class="rowColor">
+<tr id="i70" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableTables-java.lang.String-">disableTables</a></span>(<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;regex)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -659,7 +667,7 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i70" class="altColor">
+<tr id="i71" class="rowColor">
 <td class="colFirst"><code>default boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableCatalogJanitor-boolean-">enableCatalogJanitor</a></span>(boolean&nbsp;enable)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -668,37 +676,37 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i72" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableReplicationPeer-java.lang.String-">enableReplicationPeer</a></span>(<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;peerId)</code>
 <div class="block">Restart the replication stream to the specified peer.</div>
 </td>
 </tr>
-<tr id="i72" class="altColor">
+<tr id="i73" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableReplicationPeerAsync-java.lang.String-">enableReplicationPeerAsync</a></span>(<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;peerId)</code>
 <div class="block">Enable a replication peer but does not block and wait for it.</div>
 </td>
 </tr>
-<tr id="i73" class="rowColor">
+<tr id="i74" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableTable-org.apache.hadoop.hbase.TableName-">enableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table.</div>
 </td>
 </tr>
-<tr id="i74" class="altColor">
+<tr id="i75" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableTableAsync-org.apache.hadoop.hbase.TableName-">enableTableAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable the table but does not block and wait for it to be completely enabled.</div>
 </td>
 </tr>
-<tr id="i75" class="rowColor">
+<tr id="i76" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableTableReplication-org.apache.hadoop.hbase.TableName-">enableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table's replication switch.</div>
 </td>
 </tr>
-<tr id="i76" class="altColor">
+<tr id="i77" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableTables-java.util.regex.Pattern-">enableTables</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -709,7 +717,7 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i77" class="rowColor">
+<tr id="i78" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableTables-java.lang.String-">enableTables</a></span>(<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;regex)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -720,7 +728,7 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i78" class="altColor">
+<tr id="i79" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#execProcedure-java.lang.String-java.lang.String-java.util.Map-">execProcedure</a></span>(<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;signature,
              <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;instance,
@@ -728,7 +736,7 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 <div class="block">Execute a distributed procedure on a cluster.</div>
 </td>
 </tr>
-<tr id="i79" class="rowColor">
+<tr id="i80" class="altColor">
 <td class="colFirst"><code>default byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#execProcedureWithRet-java.lang.String-java.lang.String-java.util.Map-">execProcedureWithRet</a></span>(<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;signature,
                     <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;instance,
@@ -739,7 +747,7 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i80" class="altColor">
+<tr id="i81" class="rowColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#execProcedureWithReturn-java.lang.String-java.lang.String-java.util.Map-">execProcedureWithReturn</a></span>(<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;signature,
                        <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;instance,
@@ -747,25 +755,25 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 <div class="block">Execute a distributed procedure on a cluster.</div>
 </td>
 </tr>
-<tr id="i81" class="rowColor">
+<tr id="i82" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#flush-org.apache.hadoop.hbase.TableName-">flush</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Flush a table.</div>
 </td>
 </tr>
-<tr id="i82" class="altColor">
+<tr id="i83" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#flushRegion-byte:A-">flushRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Flush an individual region.</div>
 </td>
 </tr>
-<tr id="i83" class="rowColor">
+<tr id="i84" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#flushRegionServer-org.apache.hadoop.hbase.ServerName-">flushRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Flush all regions on the region server.</div>
 </td>
 </tr>
-<tr id="i84" class="altColor">
+<tr id="i85" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getAlterStatus-byte:A-">getAlterStatus</a></span>(byte[]&nbsp;tableName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -774,7 +782,7 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i85" class="rowColor">
+<tr id="i86" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getAlterStatus-org.apache.hadoop.hbase.TableName-">getAlterStatus</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -783,23 +791,23 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i86" class="altColor">
+<tr id="i87" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getBackupMasters--">getBackupMasters</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i87" class="rowColor">
+<tr id="i88" class="altColor">
 <td class="colFirst"><code>default <a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getClusterMetrics--">getClusterMetrics</a></span>()</code>
 <div class="block">Get whole cluster metrics, containing status about:</div>
 </td>
 </tr>
-<tr id="i88" class="altColor">
+<tr id="i89" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getClusterMetrics-java.util.EnumSet-">getClusterMetrics</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;org.apache.hadoop.hbase.ClusterMetrics.Option&gt;&nbsp;options)</code>
 <div class="block">Get cluster status with a set of <code>ClusterMetrics.Option</code> to get desired status.</div>
 </td>
 </tr>
-<tr id="i89" class="rowColor">
+<tr id="i90" class="altColor">
 <td class="colFirst"><code>default <a href="../../../../../org/apache/hadoop/hbase/ClusterStatus.html" title="class in org.apache.hadoop.hbase">ClusterStatus</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getClusterStatus--">getClusterStatus</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -808,40 +816,40 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i90" class="altColor">
+<tr id="i91" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getCompactionState-org.apache.hadoop.hbase.TableName-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr id="i91" class="rowColor">
+<tr id="i92" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getCompactionState-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr id="i92" class="altColor">
+<tr id="i93" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getCompactionStateForRegion-byte:A-">getCompactionStateForRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Get the current compaction state of region.</div>
 </td>
 </tr>
-<tr id="i93" class="rowColor">
+<tr id="i94" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.conf.Configuration</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getConfiguration--">getConfiguration</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i94" class="altColor">
+<tr id="i95" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getConnection--">getConnection</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i95" class="rowColor">
+<tr id="i96" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getDescriptor-org.apache.hadoop.hbase.TableName-">getDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get a table descriptor.</div>
 </td>
 </tr>
-<tr id="i96" class="altColor">
+<tr id="i97" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getLastMajorCompactionTimestamp-org.apache.hadoop.hbase.TableName-">getLastMajorCompactionTimestamp</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the timestamp of the last major compaction for the passed table
@@ -850,29 +858,29 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
  or 0 if no such HFile could be found.</div>
 </td>
 </tr>
-<tr id="i97" class="rowColor">
+<tr id="i98" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getLastMajorCompactionTimestampForRegion-byte:A-">getLastMajorCompactionTimestampForRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Get the timestamp of the last major compaction for the passed region.</div>
 </td>
 </tr>
-<tr id="i98" class="altColor">
+<tr id="i99" 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/client/Admin.html#getLocks--">getLocks</a></span>()</code>
 <div class="block">Get locks.</div>
 </td>
 </tr>
-<tr id="i99" class="rowColor">
+<tr id="i100" class="altColor">
 <td class="colFirst"><code>default <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getMaster--">getMaster</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i100" class="altColor">
+<tr id="i101" class="rowColor">
 <td class="colFirst"><code>default <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="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getMasterCoprocessorNames--">getMasterCoprocessorNames</a></span>()</code>
 <div class="block">Helper that delegates to getClusterMetrics().getMasterCoprocessorNames().</div>
 </td>
 </tr>
-<tr id="i101" class="rowColor">
+<tr id="i102" class="altColor">
 <td class="colFirst"><code>default <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/client/Admin.html#getMasterCoprocessors--">getMasterCoprocessors</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -881,19 +889,19 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i102" class="altColor">
+<tr id="i103" class="rowColor">
 <td class="colFirst"><code>default int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getMasterInfoPort--">getMasterInfoPort</a></span>()</code>
 <div class="block">Get the info port of the current master if one is available.</div>
 </td>
 </tr>
-<tr id="i103" class="rowColor">
+<tr id="i104" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getNamespaceDescriptor-java.lang.String-">getNamespaceDescriptor</a></span>(<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;name)</code>
 <div class="block">Get a namespace descriptor by name.</div>
 </td>
 </tr>
-<tr id="i104" class="altColor">
+<tr id="i105" class="rowColor">
 <td class="colFirst"><code><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/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getOnlineRegions-org.apache.hadoop.hbase.ServerName-">getOnlineRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -903,23 +911,23 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i105" class="rowColor">
+<tr id="i106" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getOperationTimeout--">getOperationTimeout</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i106" class="altColor">
+<tr id="i107" 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/client/Admin.html#getProcedures--">getProcedures</a></span>()</code>
 <div class="block">Get procedures.</div>
 </td>
 </tr>
-<tr id="i107" class="rowColor">
+<tr id="i108" class="altColor">
 <td class="colFirst"><code><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/quotas/QuotaSettings.html" title="class in org.apache.hadoop.hbase.quotas">QuotaSettings</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getQuota-org.apache.hadoop.hbase.quotas.QuotaFilter-">getQuota</a></span>(<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaFilter.html" title="class in org.apache.hadoop.hbase.quotas">QuotaFilter</a>&nbsp;filter)</code>
 <div class="block">List the quotas based on the filter.</div>
 </td>
 </tr>
-<tr id="i108" class="altColor">
+<tr id="i109" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaRetriever.html" title="class in org.apache.hadoop.hbase.quotas">QuotaRetriever</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getQuotaRetriever-org.apache.hadoop.hbase.quotas.QuotaFilter-">getQuotaRetriever</a></span>(<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaFilter.html" title="class in org.apache.hadoop.hbase.quotas">QuotaFilter</a>&nbsp;filter)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -927,48 +935,48 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i109" class="rowColor">
+<tr id="i110" class="altColor">
 <td class="colFirst"><code>default <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/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getRegionMetrics-org.apache.hadoop.hbase.ServerName-">getRegionMetrics</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Get <a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase"><code>RegionMetrics</code></a> of all regions hosted on a regionserver.</div>
 </td>
 </tr>
-<tr id="i110" class="altColor">
+<tr id="i111" class="rowColor">
 <td class="colFirst"><code><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/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getRegionMetrics-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.TableName-">getRegionMetrics</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                 <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get <a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase"><code>RegionMetrics</code></a> of all regions hosted on a regionserver for a table.</div>
 </td>
 </tr>
-<tr id="i111" class="rowColor">
+<tr id="i112" class="altColor">
 <td class="colFirst"><code><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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getRegions-org.apache.hadoop.hbase.ServerName-">getRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Get all the online regions on a region server.</div>
 </td>
 </tr>
-<tr id="i112" class="altColor">
+<tr id="i113" class="rowColor">
 <td class="colFirst"><code><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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getRegions-org.apache.hadoop.hbase.TableName-">getRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the regions of a given table.</div>
 </td>
 </tr>
-<tr id="i113" class="rowColor">
+<tr id="i114" class="altColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getRegionServers--">getRegionServers</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i114" class="altColor">
+<tr id="i115" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getReplicationPeerConfig-java.lang.String-">getReplicationPeerConfig</a></span>(<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;peerId)</code>
 <div class="block">Returns the configured ReplicationPeerConfig for the specified peer.</div>
 </td>
 </tr>
-<tr id="i115" class="rowColor">
+<tr id="i116" class="altColor">
 <td class="colFirst"><code><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/security/SecurityCapability.html" title="enum in org.apache.hadoop.hbase.client.security">SecurityCapability</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getSecurityCapabilities--">getSecurityCapabilities</a></span>()</code>
 <div class="block">Return the set of supported security capabilities.</div>
 </td>
 </tr>
-<tr id="i116" class="altColor">
+<tr id="i117" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getTableDescriptor-org.apache.hadoop.hbase.TableName-">getTableDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -977,7 +985,7 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i117" class="rowColor">
+<tr id="i118" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getTableDescriptors-java.util.List-">getTableDescriptors</a></span>(<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="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;names)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -986,7 +994,7 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i118" class="altColor">
+<tr id="i119" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getTableDescriptorsByTableName-java.util.List-">getTableDescriptorsByTableName</a></span>(<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tableNames)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -995,7 +1003,7 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i119" class="rowColor">
+<tr id="i120" class="altColor">
 <td class="colFirst"><code><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/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getTableRegions-org.apache.hadoop.hbase.TableName-">getTableRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -1005,49 +1013,49 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i120" class="altColor">
+<tr id="i121" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isAborted--">isAborted</a></span>()</code>
 <div class="block">Check if the server or client was aborted.</div>
 </td>
 </tr>
-<tr id="i121" class="rowColor">
+<tr id="i122" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isBalancerEnabled--">isBalancerEnabled</a></span>()</code>
 <div class="block">Query the current state of the balancer.</div>
 </td>
 </tr>
-<tr id="i122" class="altColor">
+<tr id="i123" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isCatalogJanitorEnabled--">isCatalogJanitorEnabled</a></span>()</code>
 <div class="block">Query on the catalog janitor state (Enabled/Disabled?).</div>
 </td>
 </tr>
-<tr id="i123" class="rowColor">
+<tr id="i124" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isCleanerChoreEnabled--">isCleanerChoreEnabled</a></span>()</code>
 <div class="block">Query on the cleaner chore state (Enabled/Disabled?).</div>
 </td>
 </tr>
-<tr id="i124" class="altColor">
+<tr id="i125" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isMasterInMaintenanceMode--">isMasterInMaintenanceMode</a></span>()</code>
 <div class="block">Check whether Master is in maintenance mode.</div>
 </td>
 </tr>
-<tr id="i125" class="rowColor">
+<tr id="i126" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isMergeEnabled--">isMergeEnabled</a></span>()</code>
 <div class="block">Query the current state of the merge switch.</div>
 </td>
 </tr>
-<tr id="i126" class="altColor">
+<tr id="i127" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isNormalizerEnabled--">isNormalizerEnabled</a></span>()</code>
 <div class="block">Query the current state of the region normalizer.</div>
 </td>
 </tr>
-<tr id="i127" class="rowColor">
+<tr id="i128" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isProcedureFinished-java.lang.String-java.lang.String-java.util.Map-">isProcedureFinished</a></span>(<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;signature,
                    <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;instance,
@@ -1055,19 +1063,19 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 <div class="block">Check the current state of the specified procedure.</div>
 </td>
 </tr>
-<tr id="i128" class="altColor">
+<tr id="i129" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isSnapshotFinished-org.apache.hadoop.hbase.client.SnapshotDescription-">isSnapshotFinished</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&nbsp;snapshot)</code>
 <div class="block">Check the current state of the passed snapshot.</div>
 </td>
 </tr>
-<tr id="i129" class="rowColor">
+<tr id="i130" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isSplitEnabled--">isSplitEnabled</a></span>()</code>
 <div class="block">Query the current state of the split switch.</div>
 </td>
 </tr>
-<tr id="i130" class="altColor">
+<tr id="i131" class="rowColor">
 <td class="colFirst"><code>default boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isSplitOrMergeEnabled-org.apache.hadoop.hbase.client.MasterSwitchType-">isSplitOrMergeEnabled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client">MasterSwitchType</a>&nbsp;switchType)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -1076,11 +1084,11 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i131" class="rowColor">
+<tr id="i132" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isTableAvailable-org.apache.hadoop.hbase.TableName-">isTableAvailable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i132" class="altColor">
+<tr id="i133" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isTableAvailable-org.apache.hadoop.hbase.TableName-byte:A:A-">isTableAvailable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 byte[][]&nbsp;splitKeys)</code>
@@ -1089,63 +1097,63 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i133" class="rowColor">
+<tr id="i134" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isTableDisabled-org.apache.hadoop.hbase.TableName-">isTableDisabled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i134" class="altColor">
+<tr id="i135" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isTableEnabled-org.apache.hadoop.hbase.TableName-">isTableEnabled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i135" class="rowColor">
+<tr id="i136" class="altColor">
 <td class="colFirst"><code>default <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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listDeadServers--">listDeadServers</a></span>()</code>
 <div class="block">List dead region servers.</div>
 </td>
 </tr>
-<tr id="i136" class="altColor">
+<tr id="i137" class="rowColor">
 <td class="colFirst"><code><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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listDecommissionedRegionServers--">listDecommissionedRegionServers</a></span>()</code>
 <div class="block">List region servers marked as decommissioned, which can not be assigned regions.</div>
 </td>
 </tr>
-<tr id="i137" class="rowColor">
+<tr id="i138" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listNamespaceDescriptors--">listNamespaceDescriptors</a></span>()</code>
 <div class="block">List available namespace descriptors.</div>
 </td>
 </tr>
-<tr id="i138" class="altColor">
+<tr id="i139" class="rowColor">
 <td class="colFirst"><code><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/replication/TableCFs.html" title="class in org.apache.hadoop.hbase.client.replication">TableCFs</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listReplicatedTableCFs--">listReplicatedTableCFs</a></span>()</code>
 <div class="block">Find all table and column families that are replicated from this cluster</div>
 </td>
 </tr>
-<tr id="i139" class="rowColor">
+<tr id="i140" class="altColor">
 <td class="colFirst"><code><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/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listReplicationPeers--">listReplicationPeers</a></span>()</code>
 <div class="block">Return a list of replication peers.</div>
 </td>
 </tr>
-<tr id="i140" class="altColor">
+<tr id="i141" class="rowColor">
 <td class="colFirst"><code><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/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listReplicationPeers-java.util.regex.Pattern-">listReplicationPeers</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">Return a list of replication peers.</div>
 </td>
 </tr>
-<tr id="i141" class="rowColor">
+<tr id="i142" class="altColor">
 <td class="colFirst"><code><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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listSnapshots--">listSnapshots</a></span>()</code>
 <div class="block">List completed snapshots.</div>
 </td>
 </tr>
-<tr id="i142" class="altColor">
+<tr id="i143" class="rowColor">
 <td class="colFirst"><code><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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listSnapshots-java.util.regex.Pattern-">listSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">List all the completed snapshots matching the given pattern.</div>
 </td>
 </tr>
-<tr id="i143" class="rowColor">
+<tr id="i144" class="altColor">
 <td class="colFirst"><code><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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listSnapshots-java.lang.String-">listSnapshots</a></span>(<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;regex)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -1154,38 +1162,38 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i144" class="altColor">
+<tr id="i145" class="rowColor">
 <td class="colFirst"><code><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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listTableDescriptors--">listTableDescriptors</a></span>()</code>
 <div class="block">List all the userspace tables.</div>
 </td>
 </tr>
-<tr id="i145" class="rowColor">
+<tr id="i146" class="altColor">
 <td class="colFirst"><code><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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listTableDescriptors-java.util.List-">listTableDescriptors</a></span>(<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tableNames)</code>
 <div class="block">Get tableDescriptors.</div>
 </td>
 </tr>
-<tr id="i146" class="altColor">
+<tr id="i147" class="rowColor">
 <td class="colFirst"><code><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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listTableDescriptors-java.util.regex.Pattern-">listTableDescriptors</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">List all the userspace tables that match the given pattern.</div>
 </td>
 </tr>
-<tr id="i147" class="rowColor">
+<tr id="i148" class="altColor">
 <td class="colFirst"><code><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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listTableDescriptors-java.util.regex.Pattern-boolean-">listTableDescriptors</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern,
                     boolean&nbsp;includeSysTables)</code>
 <div class="block">List all the tables matching the given pattern.</div>
 </td>
 </tr>
-<tr id="i148" class="altColor">
+<tr id="i149" class="rowColor">
 <td class="colFirst"><code><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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listTableDescriptorsByNamespace-byte:A-">listTableDescriptorsByNamespace</a></span>(byte[]&nbsp;name)</code>
 <div class="block">Get list of table descriptors by namespace.</div>
 </td>
 </tr>
-<tr id="i149" class="rowColor">
+<tr id="i150" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listTableDescriptorsByNamespace-java.lang.String-">listTableDescriptorsByNamespace</a></span>(<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;name)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -1194,26 +1202,26 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </div>
 </td>
 </tr>
-<tr id="i150" class="altColor">
+<tr id="i151" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listTableNames--">listTableNames</a></span>()</code>
 <div class="block">List all of the names of userspace tables.</div>
 </td>
 </tr>
-<tr id="i151" class="rowColor">
+<tr id="i152" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listTa

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    } else if (recentlyModified) {<a name="line.2391"></a>
+<span class="so

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/thrift2/ThriftServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift2/ThriftServer.html b/devapidocs/org/apache/hadoop/hbase/thrift2/ThriftServer.html
index 6efebf0..a91ac62 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift2/ThriftServer.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift2/ThriftServer.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":10,"i2":9,"i3":10,"i4":10,"i5":10,"i6":9,"i7":10,"i8":10,"i9":9,"i10":9,"i11":9,"i12":9,"i13":9,"i14":9,"i15":9,"i16":9,"i17":9,"i18":9,"i19":10,"i20":10};
+var methods = {"i0":9,"i1":9,"i2":10,"i3":10,"i4":10,"i5":9,"i6":10,"i7":10,"i8":9,"i9":9,"i10":9,"i11":9,"i12":9,"i13":9,"i14":9,"i15":9,"i16":9,"i17":9,"i18":10,"i19":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -119,7 +119,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.LimitedPrivate(value="Tools")
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.97">ThriftServer</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.96">ThriftServer</a>
 extends org.apache.hadoop.conf.Configured
 implements org.apache.hadoop.util.Tool</pre>
 <div class="block">ThriftServer - this class starts up a Thrift server which implements the HBase API specified in
@@ -213,41 +213,37 @@ implements org.apache.hadoop.util.Tool</pre>
           int&nbsp;listenPort)</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/thrift2/ThriftServer.html#checkArguments-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">checkArguments</a></span>(org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine&nbsp;cmd)</code>&nbsp;</td>
-</tr>
-<tr id="i2" class="altColor">
 <td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/thrift2/ThriftServer.html#createExecutor-int-int-org.apache.hadoop.hbase.thrift.ThriftMetrics-">createExecutor</a></span>(int&nbsp;workerThreads,
               int&nbsp;maxCallQueueSize,
               <a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.html" title="class in org.apache.hadoop.hbase.thrift">ThriftMetrics</a>&nbsp;metrics)</code>&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>private <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/thrift2/ThriftServer.html#getBindAddress-org.apache.hadoop.conf.Configuration-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">getBindAddress</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
               org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine&nbsp;cmd)</code>&nbsp;</td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>private <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/thrift2/ThriftServer.html#getImplType-boolean-boolean-boolean-">getImplType</a></span>(boolean&nbsp;nonblocking,
            boolean&nbsp;hsha,
            boolean&nbsp;selector)</code>&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/thrift2/ThriftServer.html#getListenPort-org.apache.hadoop.conf.Configuration-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">getListenPort</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
              org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine&nbsp;cmd)</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>private static org.apache.hbase.thirdparty.org.apache.commons.cli.Options</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/thrift2/ThriftServer.html#getOptions--">getOptions</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/thrift2/ThriftServer.html#getReadTimeout-org.apache.hadoop.conf.Configuration-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">getReadTimeout</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
               org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine&nbsp;cmd)</code>&nbsp;</td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>private org.apache.thrift.server.TServer</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/thrift2/ThriftServer.html#getServer-int-int-int-int-int-boolean-boolean-boolean-org.apache.hadoop.hbase.thrift.ThriftMetrics-org.apache.thrift.protocol.TProtocolFactory-org.apache.thrift.TProcessor-org.apache.thrift.transport.TTransportFactory-java.net.InetSocketAddress-">getServer</a></span>(int&nbsp;workerThreads,
          int&nbsp;selectorThreads,
@@ -263,7 +259,7 @@ implements org.apache.hadoop.util.Tool</pre>
          org.apache.thrift.transport.TTransportFactory&nbsp;transportFactory,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>&nbsp;inetSocketAddress)</code>&nbsp;</td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>private static org.apache.thrift.server.TServer</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/thrift2/ThriftServer.html#getTHsHaServer-org.apache.thrift.protocol.TProtocolFactory-org.apache.thrift.TProcessor-org.apache.thrift.transport.TTransportFactory-int-int-java.net.InetSocketAddress-org.apache.hadoop.hbase.thrift.ThriftMetrics-">getTHsHaServer</a></span>(org.apache.thrift.protocol.TProtocolFactory&nbsp;protocolFactory,
               org.apache.thrift.TProcessor&nbsp;processor,
@@ -273,18 +269,18 @@ implements org.apache.hadoop.util.Tool</pre>
               <a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>&nbsp;inetSocketAddress,
               <a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.html" title="class in org.apache.hadoop.hbase.thrift">ThriftMetrics</a>&nbsp;metrics)</code>&nbsp;</td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>private static org.apache.thrift.server.TServer</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/thrift2/ThriftServer.html#getTNonBlockingServer-org.apache.thrift.protocol.TProtocolFactory-org.apache.thrift.TProcessor-org.apache.thrift.transport.TTransportFactory-java.net.InetSocketAddress-">getTNonBlockingServer</a></span>(org.apache.thrift.protocol.TProtocolFactory&nbsp;protocolFactory,
                      org.apache.thrift.TProcessor&nbsp;processor,
                      org.apache.thrift.transport.TTransportFactory&nbsp;transportFactory,
                      <a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>&nbsp;inetSocketAddress)</code>&nbsp;</td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>private static org.apache.thrift.protocol.TProtocolFactory</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/thrift2/ThriftServer.html#getTProtocolFactory-boolean-">getTProtocolFactory</a></span>(boolean&nbsp;isCompact)</code>&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>private static org.apache.thrift.server.TServer</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/thrift2/ThriftServer.html#getTThreadedSelectorServer-org.apache.thrift.protocol.TProtocolFactory-org.apache.thrift.TProcessor-org.apache.thrift.transport.TTransportFactory-int-int-int-java.net.InetSocketAddress-org.apache.hadoop.hbase.thrift.ThriftMetrics-">getTThreadedSelectorServer</a></span>(org.apache.thrift.protocol.TProtocolFactory&nbsp;protocolFactory,
                           org.apache.thrift.TProcessor&nbsp;processor,
@@ -295,7 +291,7 @@ implements org.apache.hadoop.util.Tool</pre>
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>&nbsp;inetSocketAddress,
                           <a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.html" title="class in org.apache.hadoop.hbase.thrift">ThriftMetrics</a>&nbsp;metrics)</code>&nbsp;</td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>private static org.apache.thrift.server.TServer</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/thrift2/ThriftServer.html#getTThreadPoolServer-org.apache.thrift.protocol.TProtocolFactory-org.apache.thrift.TProcessor-org.apache.thrift.transport.TTransportFactory-int-java.net.InetSocketAddress-int-int-org.apache.hadoop.hbase.thrift.ThriftMetrics-">getTThreadPoolServer</a></span>(org.apache.thrift.protocol.TProtocolFactory&nbsp;protocolFactory,
                     org.apache.thrift.TProcessor&nbsp;processor,
@@ -306,7 +302,7 @@ implements org.apache.hadoop.util.Tool</pre>
                     int&nbsp;clientTimeout,
                     <a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.html" title="class in org.apache.hadoop.hbase.thrift">ThriftMetrics</a>&nbsp;metrics)</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>private static org.apache.thrift.transport.TTransportFactory</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/thrift2/ThriftServer.html#getTTransportFactory-org.apache.hadoop.hbase.security.SaslUtil.QualityOfProtection-java.lang.String-java.lang.String-boolean-int-">getTTransportFactory</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security">SaslUtil.QualityOfProtection</a>&nbsp;qop,
                     <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;name,
@@ -314,33 +310,33 @@ implements org.apache.hadoop.util.Tool</pre>
                     boolean&nbsp;framed,
                     int&nbsp;frameSize)</code>&nbsp;</td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/thrift2/ThriftServer.html#main-java.lang.String:A-">main</a></span>(<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;args)</code>
 <div class="block">Start up the Thrift2 server.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>private static org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/thrift2/ThriftServer.html#parseArguments-org.apache.hadoop.conf.Configuration-org.apache.hbase.thirdparty.org.apache.commons.cli.Options-java.lang.String:A-">parseArguments</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
               org.apache.hbase.thirdparty.org.apache.commons.cli.Options&nbsp;options,
               <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;args)</code>&nbsp;</td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/thrift2/ThriftServer.html#printUsage--">printUsage</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>protected static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/thrift2/ThriftServer.html#registerFilters-org.apache.hadoop.conf.Configuration-">registerFilters</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
 <div class="block">Adds the option to pre-load filters at startup.</div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/thrift2/ThriftServer.html#run-java.lang.String:A-">run</a></span>(<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;args)</code>&nbsp;</td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/thrift2/ThriftServer.html#startInfoServer-org.apache.hadoop.conf.Configuration-">startInfoServer</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
@@ -386,7 +382,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>log</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.98">log</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.97">log</a></pre>
 </li>
 </ul>
 <a name="THRIFT_QOP_KEY">
@@ -395,7 +391,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>THRIFT_QOP_KEY</h4>
-<pre>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/thrift2/ThriftServer.html#line.109">THRIFT_QOP_KEY</a></pre>
+<pre>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/thrift2/ThriftServer.html#line.108">THRIFT_QOP_KEY</a></pre>
 <div class="block">Thrift quality of protection configuration key. Valid values can be:
  privacy: authentication, integrity and confidentiality checking
  integrity: authentication and integrity checking
@@ -415,7 +411,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>BACKLOG_CONF_KEY</h4>
-<pre>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/thrift2/ThriftServer.html#line.111">BACKLOG_CONF_KEY</a></pre>
+<pre>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/thrift2/ThriftServer.html#line.110">BACKLOG_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.thrift2.ThriftServer.BACKLOG_CONF_KEY">Constant Field Values</a></dd>
@@ -428,7 +424,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_LISTEN_PORT</h4>
-<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.113">DEFAULT_LISTEN_PORT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.112">DEFAULT_LISTEN_PORT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.thrift2.ThriftServer.DEFAULT_LISTEN_PORT">Constant Field Values</a></dd>
@@ -441,7 +437,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>READ_TIMEOUT_OPTION</h4>
-<pre>private 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/thrift2/ThriftServer.html#line.115">READ_TIMEOUT_OPTION</a></pre>
+<pre>private 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/thrift2/ThriftServer.html#line.114">READ_TIMEOUT_OPTION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.thrift2.ThriftServer.READ_TIMEOUT_OPTION">Constant Field Values</a></dd>
@@ -454,7 +450,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>THRIFT_SERVER_SOCKET_READ_TIMEOUT_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/thrift2/ThriftServer.html#line.122">THRIFT_SERVER_SOCKET_READ_TIMEOUT_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/thrift2/ThriftServer.html#line.121">THRIFT_SERVER_SOCKET_READ_TIMEOUT_KEY</a></pre>
 <div class="block">Amount of time in milliseconds before a server thread will timeout
  waiting for client to send data on a connected socket. Currently,
  applies only to TBoundedThreadPoolServer</div>
@@ -470,7 +466,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>THRIFT_SERVER_SOCKET_READ_TIMEOUT_DEFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.124">THRIFT_SERVER_SOCKET_READ_TIMEOUT_DEFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.123">THRIFT_SERVER_SOCKET_READ_TIMEOUT_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.thrift2.ThriftServer.THRIFT_SERVER_SOCKET_READ_TIMEOUT_DEFAULT">Constant Field Values</a></dd>
@@ -491,7 +487,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ThriftServer</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.126">ThriftServer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.125">ThriftServer</a>()</pre>
 </li>
 </ul>
 </li>
@@ -508,7 +504,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>printUsage</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.129">printUsage</a>()</pre>
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.128">printUsage</a>()</pre>
 </li>
 </ul>
 <a name="getOptions--">
@@ -716,27 +712,18 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getImplType</h4>
-<pre>private&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/thrift2/ThriftServer.html#line.534">getImplType</a>(boolean&nbsp;nonblocking,
+<pre>private&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/thrift2/ThriftServer.html#line.535">getImplType</a>(boolean&nbsp;nonblocking,
                            boolean&nbsp;hsha,
                            boolean&nbsp;selector)</pre>
 </li>
 </ul>
-<a name="checkArguments-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>checkArguments</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.548">checkArguments</a>(org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine&nbsp;cmd)</pre>
-</li>
-</ul>
 <a name="getBindAddress-org.apache.hadoop.conf.Configuration-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getBindAddress</h4>
-<pre>private&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/thrift2/ThriftServer.html#line.561">getBindAddress</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&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/thrift2/ThriftServer.html#line.549">getBindAddress</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                               org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine&nbsp;cmd)</pre>
 </li>
 </ul>
@@ -746,7 +733,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getListenPort</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.572">getListenPort</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.560">getListenPort</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                           org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine&nbsp;cmd)</pre>
 </li>
 </ul>
@@ -756,7 +743,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getReadTimeout</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.586">getReadTimeout</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.574">getReadTimeout</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                            org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine&nbsp;cmd)</pre>
 </li>
 </ul>
@@ -766,7 +753,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>startInfoServer</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.601">startInfoServer</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.589">startInfoServer</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
                       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>
@@ -780,7 +767,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getServer</h4>
-<pre>private&nbsp;org.apache.thrift.server.TServer&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.613">getServer</a>(int&nbsp;workerThreads,
+<pre>private&nbsp;org.apache.thrift.server.TServer&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html#line.601">getServer</a>(int&nbsp;workerThreads,
                                                    int&nbsp;selectorThreads,
                                                    int&nbsp;maxCallQueueSize,
                                                    int&nbsp;readTimeout,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
index b9e8086..dbf7168 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4109">HBaseFsck.ErrorReporter.ERROR_CODE</a>
+<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4111">HBaseFsck.ErrorReporter.ERROR_CODE</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&gt;</pre>
 </li>
 </ul>
@@ -309,7 +309,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>UNKNOWN</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4110">UNKNOWN</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4112">UNKNOWN</a></pre>
 </li>
 </ul>
 <a name="NO_META_REGION">
@@ -318,7 +318,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>NO_META_REGION</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4110">NO_META_REGION</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4112">NO_META_REGION</a></pre>
 </li>
 </ul>
 <a name="NULL_META_REGION">
@@ -327,7 +327,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>NULL_META_REGION</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4110">NULL_META_REGION</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4112">NULL_META_REGION</a></pre>
 </li>
 </ul>
 <a name="NO_VERSION_FILE">
@@ -336,7 +336,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>NO_VERSION_FILE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4110">NO_VERSION_FILE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4112">NO_VERSION_FILE</a></pre>
 </li>
 </ul>
 <a name="NOT_IN_META_HDFS">
@@ -345,7 +345,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>NOT_IN_META_HDFS</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4110">NOT_IN_META_HDFS</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4112">NOT_IN_META_HDFS</a></pre>
 </li>
 </ul>
 <a name="NOT_IN_META">
@@ -354,7 +354,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>NOT_IN_META</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4110">NOT_IN_META</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4112">NOT_IN_META</a></pre>
 </li>
 </ul>
 <a name="NOT_IN_META_OR_DEPLOYED">
@@ -363,7 +363,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>NOT_IN_META_OR_DEPLOYED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4111">NOT_IN_META_OR_DEPLOYED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4113">NOT_IN_META_OR_DEPLOYED</a></pre>
 </li>
 </ul>
 <a name="NOT_IN_HDFS_OR_DEPLOYED">
@@ -372,7 +372,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>NOT_IN_HDFS_OR_DEPLOYED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4111">NOT_IN_HDFS_OR_DEPLOYED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4113">NOT_IN_HDFS_OR_DEPLOYED</a></pre>
 </li>
 </ul>
 <a name="NOT_IN_HDFS">
@@ -381,7 +381,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>NOT_IN_HDFS</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4111">NOT_IN_HDFS</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4113">NOT_IN_HDFS</a></pre>
 </li>
 </ul>
 <a name="SERVER_DOES_NOT_MATCH_META">
@@ -390,7 +390,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>SERVER_DOES_NOT_MATCH_META</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4111">SERVER_DOES_NOT_MATCH_META</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4113">SERVER_DOES_NOT_MATCH_META</a></pre>
 </li>
 </ul>
 <a name="NOT_DEPLOYED">
@@ -399,7 +399,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>NOT_DEPLOYED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4112">NOT_DEPLOYED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4114">NOT_DEPLOYED</a></pre>
 </li>
 </ul>
 <a name="MULTI_DEPLOYED">
@@ -408,7 +408,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>MULTI_DEPLOYED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4113">MULTI_DEPLOYED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4115">MULTI_DEPLOYED</a></pre>
 </li>
 </ul>
 <a name="SHOULD_NOT_BE_DEPLOYED">
@@ -417,7 +417,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>SHOULD_NOT_BE_DEPLOYED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4113">SHOULD_NOT_BE_DEPLOYED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4115">SHOULD_NOT_BE_DEPLOYED</a></pre>
 </li>
 </ul>
 <a name="MULTI_META_REGION">
@@ -426,7 +426,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>MULTI_META_REGION</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4113">MULTI_META_REGION</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4115">MULTI_META_REGION</a></pre>
 </li>
 </ul>
 <a name="RS_CONNECT_FAILURE">
@@ -435,7 +435,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>RS_CONNECT_FAILURE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4113">RS_CONNECT_FAILURE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4115">RS_CONNECT_FAILURE</a></pre>
 </li>
 </ul>
 <a name="FIRST_REGION_STARTKEY_NOT_EMPTY">
@@ -444,7 +444,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>FIRST_REGION_STARTKEY_NOT_EMPTY</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4114">FIRST_REGION_STARTKEY_NOT_EMPTY</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4116">FIRST_REGION_STARTKEY_NOT_EMPTY</a></pre>
 </li>
 </ul>
 <a name="LAST_REGION_ENDKEY_NOT_EMPTY">
@@ -453,7 +453,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>LAST_REGION_ENDKEY_NOT_EMPTY</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4114">LAST_REGION_ENDKEY_NOT_EMPTY</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4116">LAST_REGION_ENDKEY_NOT_EMPTY</a></pre>
 </li>
 </ul>
 <a name="DUPE_STARTKEYS">
@@ -462,7 +462,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>DUPE_STARTKEYS</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4114">DUPE_STARTKEYS</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4116">DUPE_STARTKEYS</a></pre>
 </li>
 </ul>
 <a name="HOLE_IN_REGION_CHAIN">
@@ -471,7 +471,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>HOLE_IN_REGION_CHAIN</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4115">HOLE_IN_REGION_CHAIN</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4117">HOLE_IN_REGION_CHAIN</a></pre>
 </li>
 </ul>
 <a name="OVERLAP_IN_REGION_CHAIN">
@@ -480,7 +480,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>OVERLAP_IN_REGION_CHAIN</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4115">OVERLAP_IN_REGION_CHAIN</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4117">OVERLAP_IN_REGION_CHAIN</a></pre>
 </li>
 </ul>
 <a name="REGION_CYCLE">
@@ -489,7 +489,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_CYCLE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4115">REGION_CYCLE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4117">REGION_CYCLE</a></pre>
 </li>
 </ul>
 <a name="DEGENERATE_REGION">
@@ -498,7 +498,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>DEGENERATE_REGION</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4115">DEGENERATE_REGION</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4117">DEGENERATE_REGION</a></pre>
 </li>
 </ul>
 <a name="ORPHAN_HDFS_REGION">
@@ -507,7 +507,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>ORPHAN_HDFS_REGION</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4116">ORPHAN_HDFS_REGION</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4118">ORPHAN_HDFS_REGION</a></pre>
 </li>
 </ul>
 <a name="LINGERING_SPLIT_PARENT">
@@ -516,7 +516,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>LINGERING_SPLIT_PARENT</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4116">LINGERING_SPLIT_PARENT</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4118">LINGERING_SPLIT_PARENT</a></pre>
 </li>
 </ul>
 <a name="NO_TABLEINFO_FILE">
@@ -525,7 +525,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>NO_TABLEINFO_FILE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4116">NO_TABLEINFO_FILE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4118">NO_TABLEINFO_FILE</a></pre>
 </li>
 </ul>
 <a name="LINGERING_REFERENCE_HFILE">
@@ -534,7 +534,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>LINGERING_REFERENCE_HFILE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4116">LINGERING_REFERENCE_HFILE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4118">LINGERING_REFERENCE_HFILE</a></pre>
 </li>
 </ul>
 <a name="LINGERING_HFILELINK">
@@ -543,7 +543,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>LINGERING_HFILELINK</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4117">LINGERING_HFILELINK</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4119">LINGERING_HFILELINK</a></pre>
 </li>
 </ul>
 <a name="WRONG_USAGE">
@@ -552,7 +552,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>WRONG_USAGE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4117">WRONG_USAGE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4119">WRONG_USAGE</a></pre>
 </li>
 </ul>
 <a name="EMPTY_META_CELL">
@@ -561,7 +561,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>EMPTY_META_CELL</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4117">EMPTY_META_CELL</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4119">EMPTY_META_CELL</a></pre>
 </li>
 </ul>
 <a name="EXPIRED_TABLE_LOCK">
@@ -570,7 +570,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>EXPIRED_TABLE_LOCK</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4117">EXPIRED_TABLE_LOCK</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4119">EXPIRED_TABLE_LOCK</a></pre>
 </li>
 </ul>
 <a name="BOUNDARIES_ERROR">
@@ -579,7 +579,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>BOUNDARIES_ERROR</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4117">BOUNDARIES_ERROR</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4119">BOUNDARIES_ERROR</a></pre>
 </li>
 </ul>
 <a name="ORPHAN_TABLE_STATE">
@@ -588,7 +588,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>ORPHAN_TABLE_STATE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4118">ORPHAN_TABLE_STATE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4120">ORPHAN_TABLE_STATE</a></pre>
 </li>
 </ul>
 <a name="NO_TABLE_STATE">
@@ -597,7 +597,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>NO_TABLE_STATE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4118">NO_TABLE_STATE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4120">NO_TABLE_STATE</a></pre>
 </li>
 </ul>
 <a name="UNDELETED_REPLICATION_QUEUE">
@@ -606,7 +606,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>UNDELETED_REPLICATION_QUEUE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4118">UNDELETED_REPLICATION_QUEUE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4120">UNDELETED_REPLICATION_QUEUE</a></pre>
 </li>
 </ul>
 <a name="DUPE_ENDKEYS">
@@ -615,7 +615,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DUPE_ENDKEYS</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4118">DUPE_ENDKEYS</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4120">DUPE_ENDKEYS</a></pre>
 </li>
 </ul>
 </li>
@@ -632,7 +632,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.3833">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.3835">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -652,7 +652,7 @@ for (HBaseFsck.ErrorReporter.ERROR_CODE c : HBaseFsck.ErrorReporter.ERROR_CODE.v
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.3833">valueOf</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;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.3835">valueOf</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;name)</pre>
 <div class="block">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an
 enum constant in this type.  (Extraneous whitespace characters are 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
index 3c45f79..003c88e 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4108">HBaseFsck.ErrorReporter</a></pre>
+<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4110">HBaseFsck.ErrorReporter</a></pre>
 </li>
 </ul>
 </div>
@@ -234,7 +234,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>clear</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4120">clear</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4122">clear</a>()</pre>
 </li>
 </ul>
 <a name="report-java.lang.String-">
@@ -243,7 +243,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>report</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4121">report</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;message)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4123">report</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;message)</pre>
 </li>
 </ul>
 <a name="reportError-java.lang.String-">
@@ -252,7 +252,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>reportError</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4122">reportError</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;message)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4124">reportError</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;message)</pre>
 </li>
 </ul>
 <a name="reportError-org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE-java.lang.String-">
@@ -261,7 +261,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>reportError</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4123">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;errorCode,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4125">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;errorCode,
                  <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;message)</pre>
 </li>
 </ul>
@@ -271,7 +271,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>reportError</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4124">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;errorCode,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4126">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;errorCode,
                  <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;message,
                  <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;table)</pre>
 </li>
@@ -282,7 +282,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>reportError</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4125">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;errorCode,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4127">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;errorCode,
                  <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;message,
                  <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;table,
                  <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;info)</pre>
@@ -294,7 +294,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>reportError</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4126">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;errorCode,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4128">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;errorCode,
                  <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;message,
                  <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;table,
                  <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;info1,
@@ -307,7 +307,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>summarize</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4133">summarize</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4135">summarize</a>()</pre>
 </li>
 </ul>
 <a name="detail-java.lang.String-">
@@ -316,7 +316,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>detail</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4134">detail</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;details)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4136">detail</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;details)</pre>
 </li>
 </ul>
 <a name="getErrorList--">
@@ -325,7 +325,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>getErrorList</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4135">getErrorList</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4137">getErrorList</a>()</pre>
 </li>
 </ul>
 <a name="progress--">
@@ -334,7 +334,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>progress</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4136">progress</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4138">progress</a>()</pre>
 </li>
 </ul>
 <a name="print-java.lang.String-">
@@ -343,7 +343,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>print</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4137">print</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;message)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4139">print</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;message)</pre>
 </li>
 </ul>
 <a name="resetErrors--">
@@ -352,7 +352,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>resetErrors</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4138">resetErrors</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4140">resetErrors</a>()</pre>
 </li>
 </ul>
 <a name="tableHasErrors-org.apache.hadoop.hbase.util.HBaseFsck.TableInfo-">
@@ -361,7 +361,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>tableHasErrors</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4139">tableHasErrors</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;table)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4141">tableHasErrors</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;table)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
index 348499c..a4b5012 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4855">HBaseFsck.HBaseFsckTool</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4857">HBaseFsck.HBaseFsckTool</a>
 extends org.apache.hadoop.conf.Configured
 implements org.apache.hadoop.util.Tool</pre>
 <div class="block">This is a Tool wrapper that gathers -Dxxx=yyy configuration settings from the command line.</div>
@@ -207,7 +207,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HBaseFsckTool</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html#line.4856">HBaseFsckTool</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html#line.4858">HBaseFsckTool</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 </li>
@@ -224,7 +224,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html#line.4858">run</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;args)
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html#line.4860">run</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;args)
         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/client/Admin.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/Admin.html b/devapidocs/org/apache/hadoop/hbase/client/Admin.html
index f428b7c..cd7e1f4 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/Admin.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/Admin.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":6,"i1":6,"i2":6,"i3":50,"i4":6,"i5":6,"i6":18,"i7":6,"i8":18,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":50,"i15":50,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6,"i23":6,"i24":6,"i25":6,"i26":6,"i27":38,"i28":38,"i29":38,"i30":38,"i31":6,"i32":6,"i33":6,"i34":6,"i35":6,"i36":6,"i37":6,"i38":50,"i39":6,"i40":6,"i41":6,"i42":6,"i43":6,"i44":6,"i45":6,"i46":6,"i47":6,"i48":38,"i49":6,"i50":6,"i51":6,"i52":6,"i53":6,"i54":6,"i55":6,"i56":38,"i57":6,"i58":6,"i59":38,"i60":38,"i61":6,"i62":38,"i63":6,"i64":6,"i65":6,"i66":6,"i67":6,"i68":38,"i69":38,"i70":50,"i71":6,"i72":6,"i73":6,"i74":6,"i75":6,"i76":38,"i77":38,"i78":6,"i79":50,"i80":6,"i81":6,"i82":6,"i83":6,"i84":38,"i85":38,"i86":18,"i87":18,"i88":6,"i89":50,"i90":6,"i91":6,"i92":6,"i93":6,"i94":6,"i95":6,"i96":6,"i97":6,"i98":6,"i99":18,"i100":18,"i101":50,"i102":18,"i103":6,"i104":38,"i105":6,"i106":6,"i107":6,"i108":38,"i109":18,"i110":6,"i111":6,"i112":6,"i113":18,"i114":6,"i115":6,"i116":38,"i11
 7":38,"i118":38,"i119":38,"i120":6,"i121":6,"i122":6,"i123":6,"i124":6,"i125":6,"i126":6,"i127":6,"i128":6,"i129":6,"i130":50,"i131":6,"i132":38,"i133":6,"i134":6,"i135":18,"i136":6,"i137":6,"i138":6,"i139":6,"i140":6,"i141":6,"i142":6,"i143":38,"i144":6,"i145":6,"i146":6,"i147":6,"i148":6,"i149":38,"i150":6,"i151":6,"i152":6,"i153":38,"i154":38,"i155":6,"i156":38,"i157":38,"i158":38,"i159":38,"i160":38,"i161":6,"i162":38,"i163":6,"i164":6,"i165":6,"i166":6,"i167":6,"i168":6,"i169":6,"i170":38,"i171":6,"i172":6,"i173":6,"i174":50,"i175":6,"i176":6,"i177":6,"i178":6,"i179":6,"i180":38,"i181":6,"i182":38,"i183":6,"i184":6,"i185":6,"i186":6,"i187":6,"i188":6,"i189":6,"i190":6,"i191":6,"i192":6,"i193":6,"i194":6,"i195":6,"i196":6,"i197":6,"i198":6,"i199":50,"i200":6,"i201":50,"i202":50,"i203":50,"i204":6,"i205":50,"i206":6,"i207":6,"i208":6,"i209":6,"i210":6,"i211":6,"i212":6,"i213":6,"i214":38,"i215":38,"i216":6,"i217":6,"i218":6,"i219":6,"i220":6,"i221":50,"i222":6,"i223":6,"i224":6,"
 i225":6,"i226":6,"i227":6,"i228":6};
+var methods = {"i0":6,"i1":6,"i2":6,"i3":50,"i4":6,"i5":6,"i6":18,"i7":6,"i8":18,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":50,"i15":50,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6,"i23":6,"i24":6,"i25":6,"i26":6,"i27":6,"i28":38,"i29":38,"i30":38,"i31":38,"i32":6,"i33":6,"i34":6,"i35":6,"i36":6,"i37":6,"i38":6,"i39":50,"i40":6,"i41":6,"i42":6,"i43":6,"i44":6,"i45":6,"i46":6,"i47":6,"i48":6,"i49":38,"i50":6,"i51":6,"i52":6,"i53":6,"i54":6,"i55":6,"i56":6,"i57":38,"i58":6,"i59":6,"i60":38,"i61":38,"i62":6,"i63":38,"i64":6,"i65":6,"i66":6,"i67":6,"i68":6,"i69":38,"i70":38,"i71":50,"i72":6,"i73":6,"i74":6,"i75":6,"i76":6,"i77":38,"i78":38,"i79":6,"i80":50,"i81":6,"i82":6,"i83":6,"i84":6,"i85":38,"i86":38,"i87":18,"i88":18,"i89":6,"i90":50,"i91":6,"i92":6,"i93":6,"i94":6,"i95":6,"i96":6,"i97":6,"i98":6,"i99":6,"i100":18,"i101":18,"i102":50,"i103":18,"i104":6,"i105":38,"i106":6,"i107":6,"i108":6,"i109":38,"i110":18,"i111":6,"i112":6,"i113":6,"i114":18,"i115":6,"i116":6,"i117
 ":38,"i118":38,"i119":38,"i120":38,"i121":6,"i122":6,"i123":6,"i124":6,"i125":6,"i126":6,"i127":6,"i128":6,"i129":6,"i130":6,"i131":50,"i132":6,"i133":38,"i134":6,"i135":6,"i136":18,"i137":6,"i138":6,"i139":6,"i140":6,"i141":6,"i142":6,"i143":6,"i144":38,"i145":6,"i146":6,"i147":6,"i148":6,"i149":6,"i150":38,"i151":6,"i152":6,"i153":6,"i154":38,"i155":38,"i156":6,"i157":38,"i158":38,"i159":38,"i160":38,"i161":38,"i162":6,"i163":38,"i164":6,"i165":6,"i166":6,"i167":6,"i168":6,"i169":6,"i170":6,"i171":38,"i172":6,"i173":6,"i174":6,"i175":50,"i176":6,"i177":6,"i178":6,"i179":6,"i180":6,"i181":38,"i182":6,"i183":38,"i184":6,"i185":6,"i186":6,"i187":6,"i188":6,"i189":6,"i190":6,"i191":6,"i192":6,"i193":6,"i194":6,"i195":6,"i196":6,"i197":6,"i198":6,"i199":6,"i200":50,"i201":6,"i202":50,"i203":50,"i204":50,"i205":6,"i206":50,"i207":6,"i208":6,"i209":6,"i210":6,"i211":6,"i212":6,"i213":6,"i214":6,"i215":38,"i216":38,"i217":6,"i218":6,"i219":6,"i220":6,"i221":6,"i222":50,"i223":6,"i224":6,"
 i225":6,"i226":6,"i227":6,"i228":6,"i229":6};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -331,10 +331,18 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </tr>
 <tr id="i26" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#close--">close</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;newTableName,
+                boolean&nbsp;preserveSplits)</code>
+<div class="block">Create a new table by cloning the existent table schema.</div>
+</td>
 </tr>
 <tr id="i27" class="rowColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#close--">close</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i28" class="altColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#closeRegion-byte:A-java.lang.String-">closeRegion</a></span>(byte[]&nbsp;regionname,
            <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;serverName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -343,7 +351,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#closeRegion-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.HRegionInfo-">closeRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn,
            <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri)</code>
@@ -354,7 +362,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#closeRegion-java.lang.String-java.lang.String-">closeRegion</a></span>(<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;regionname,
            <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;serverName)</code>
@@ -364,7 +372,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#closeRegionWithEncodedRegionName-java.lang.String-java.lang.String-">closeRegionWithEncodedRegionName</a></span>(<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;encodedRegionName,
                                 <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;serverName)</code>
@@ -374,20 +382,20 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compact-org.apache.hadoop.hbase.TableName-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily)</code>
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily,
@@ -395,33 +403,33 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compact-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compactRegion-byte:A-">compactRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Compact an individual region.</div>
 </td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compactRegion-byte:A-byte:A-">compactRegion</a></span>(byte[]&nbsp;regionName,
              byte[]&nbsp;columnFamily)</code>
 <div class="block">Compact a column family within a region.</div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compactRegionServer-org.apache.hadoop.hbase.ServerName-">compactRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Compact all regions on the region server.</div>
 </td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code>default void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compactRegionServer-org.apache.hadoop.hbase.ServerName-boolean-">compactRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn,
                    boolean&nbsp;major)</code>
@@ -432,46 +440,46 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ipc/CoprocessorRpcChannel.html" title="interface in org.apache.hadoop.hbase.ipc">CoprocessorRpcChannel</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#coprocessorService--">coprocessorService</a></span>()</code>
 <div class="block">Creates and returns a <code>RpcChannel</code> instance connected to the active
  master.</div>
 </td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ipc/CoprocessorRpcChannel.html" title="interface in org.apache.hadoop.hbase.ipc">CoprocessorRpcChannel</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#coprocessorService-org.apache.hadoop.hbase.ServerName-">coprocessorService</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Creates and returns a <code>RpcChannel</code> instance
  connected to the passed region server.</div>
 </td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#createNamespace-org.apache.hadoop.hbase.NamespaceDescriptor-">createNamespace</a></span>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;descriptor)</code>
 <div class="block">Create a new namespace.</div>
 </td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#createNamespaceAsync-org.apache.hadoop.hbase.NamespaceDescriptor-">createNamespaceAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;descriptor)</code>
 <div class="block">Create a new namespace.</div>
 </td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</code>
 <div class="block">Creates a new table.</div>
 </td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-byte:A:A-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
            byte[][]&nbsp;splitKeys)</code>
 <div class="block">Creates a new table with an initial set of empty regions defined by the specified split keys.</div>
 </td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-byte:A-byte:A-int-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
            byte[]&nbsp;startKey,
@@ -480,14 +488,14 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 <div class="block">Creates a new table with the specified number of regions.</div>
 </td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#createTableAsync-org.apache.hadoop.hbase.client.TableDescriptor-byte:A:A-">createTableAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
                 byte[][]&nbsp;splitKeys)</code>
 <div class="block">Creates a new table but does not block and wait for it to come online.</div>
 </td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#decommissionRegionServers-java.util.List-boolean-">decommissionRegionServers</a></span>(<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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers,
                          boolean&nbsp;offload)</code>
@@ -495,7 +503,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
  assigned to them.</div>
 </td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteColumn-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumn</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
             byte[]&nbsp;columnFamily)</code>
@@ -506,51 +514,51 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteColumnFamily-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumnFamily</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   byte[]&nbsp;columnFamily)</code>
 <div class="block">Delete a column family from a table.</div>
 </td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteColumnFamilyAsync-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumnFamilyAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                        byte[]&nbsp;columnFamily)</code>
 <div class="block">Delete a column family from a table.</div>
 </td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteNamespace-java.lang.String-">deleteNamespace</a></span>(<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;name)</code>
 <div class="block">Delete an existing namespace.</div>
 </td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteNamespaceAsync-java.lang.String-">deleteNamespaceAsync</a></span>(<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;name)</code>
 <div class="block">Delete an existing namespace.</div>
 </td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteSnapshot-byte:A-">deleteSnapshot</a></span>(byte[]&nbsp;snapshotName)</code>
 <div class="block">Delete an existing snapshot.</div>
 </td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteSnapshot-java.lang.String-">deleteSnapshot</a></span>(<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;snapshotName)</code>
 <div class="block">Delete an existing snapshot.</div>
 </td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteSnapshots-java.util.regex.Pattern-">deleteSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">Delete existing snapshots whose names match the pattern passed.</div>
 </td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteSnapshots-java.lang.String-">deleteSnapshots</a></span>(<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;regex)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -559,19 +567,19 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteTable-org.apache.hadoop.hbase.TableName-">deleteTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Deletes a table.</div>
 </td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteTableAsync-org.apache.hadoop.hbase.TableName-">deleteTableAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Deletes the table but does not block and wait for it to be completely removed.</div>
 </td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteTables-java.util.regex.Pattern-">deleteTables</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -582,7 +590,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i61" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteTables-java.lang.String-">deleteTables</a></span>(<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;regex)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -593,7 +601,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i62" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteTableSnapshots-java.util.regex.Pattern-java.util.regex.Pattern-">deleteTableSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;snapshotNamePattern)</code>
@@ -601,7 +609,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
  name regular expression.</div>
 </td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteTableSnapshots-java.lang.String-java.lang.String-">deleteTableSnapshots</a></span>(<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;tableNameRegex,
                     <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;snapshotNameRegex)</code>
@@ -611,37 +619,37 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableReplicationPeer-java.lang.String-">disableReplicationPeer</a></span>(<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;peerId)</code>
 <div class="block">Stop the replication stream to the specified peer.</div>
 </td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableReplicationPeerAsync-java.lang.String-">disableReplicationPeerAsync</a></span>(<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;peerId)</code>
 <div class="block">Disable a replication peer but does not block and wait for it.</div>
 </td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableTable-org.apache.hadoop.hbase.TableName-">disableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable table and wait on completion.</div>
 </td>
 </tr>
-<tr id="i66" class="altColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableTableAsync-org.apache.hadoop.hbase.TableName-">disableTableAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable the table but does not block and wait for it to be completely disabled.</div>
 </td>
 </tr>
-<tr id="i67" class="rowColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableTableReplication-org.apache.hadoop.hbase.TableName-">disableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable a table's replication switch.</div>
 </td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableTables-java.util.regex.Pattern-">disableTables</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -652,7 +660,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i69" class="rowColor">
+<tr id="i70" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableTables-java.lang.String-">disableTables</a></span>(<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;regex)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -663,7 +671,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i70" class="altColor">
+<tr id="i71" class="rowColor">
 <td class="colFirst"><code>default boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableCatalogJanitor-boolean-">enableCatalogJanitor</a></span>(boolean&nbsp;enable)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -672,37 +680,37 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i72" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableReplicationPeer-java.lang.String-">enableReplicationPeer</a></span>(<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;peerId)</code>
 <div class="block">Restart the replication stream to the specified peer.</div>
 </td>
 </tr>
-<tr id="i72" class="altColor">
+<tr id="i73" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableReplicationPeerAsync-java.lang.String-">enableReplicationPeerAsync</a></span>(<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;peerId)</code>
 <div class="block">Enable a replication peer but does not block and wait for it.</div>
 </td>
 </tr>
-<tr id="i73" class="rowColor">
+<tr id="i74" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableTable-org.apache.hadoop.hbase.TableName-">enableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table.</div>
 </td>
 </tr>
-<tr id="i74" class="altColor">
+<tr id="i75" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableTableAsync-org.apache.hadoop.hbase.TableName-">enableTableAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable the table but does not block and wait for it to be completely enabled.</div>
 </td>
 </tr>
-<tr id="i75" class="rowColor">
+<tr id="i76" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableTableReplication-org.apache.hadoop.hbase.TableName-">enableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table's replication switch.</div>
 </td>
 </tr>
-<tr id="i76" class="altColor">
+<tr id="i77" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableTables-java.util.regex.Pattern-">enableTables</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -713,7 +721,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i77" class="rowColor">
+<tr id="i78" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableTables-java.lang.String-">enableTables</a></span>(<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;regex)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -724,7 +732,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i78" class="altColor">
+<tr id="i79" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#execProcedure-java.lang.String-java.lang.String-java.util.Map-">execProcedure</a></span>(<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;signature,
              <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;instance,
@@ -732,7 +740,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 <div class="block">Execute a distributed procedure on a cluster.</div>
 </td>
 </tr>
-<tr id="i79" class="rowColor">
+<tr id="i80" class="altColor">
 <td class="colFirst"><code>default byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#execProcedureWithRet-java.lang.String-java.lang.String-java.util.Map-">execProcedureWithRet</a></span>(<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;signature,
                     <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;instance,
@@ -743,7 +751,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i80" class="altColor">
+<tr id="i81" class="rowColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#execProcedureWithReturn-java.lang.String-java.lang.String-java.util.Map-">execProcedureWithReturn</a></span>(<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;signature,
                        <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;instance,
@@ -751,25 +759,25 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 <div class="block">Execute a distributed procedure on a cluster.</div>
 </td>
 </tr>
-<tr id="i81" class="rowColor">
+<tr id="i82" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#flush-org.apache.hadoop.hbase.TableName-">flush</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Flush a table.</div>
 </td>
 </tr>
-<tr id="i82" class="altColor">
+<tr id="i83" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#flushRegion-byte:A-">flushRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Flush an individual region.</div>
 </td>
 </tr>
-<tr id="i83" class="rowColor">
+<tr id="i84" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#flushRegionServer-org.apache.hadoop.hbase.ServerName-">flushRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Flush all regions on the region server.</div>
 </td>
 </tr>
-<tr id="i84" class="altColor">
+<tr id="i85" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getAlterStatus-byte:A-">getAlterStatus</a></span>(byte[]&nbsp;tableName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -778,7 +786,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i85" class="rowColor">
+<tr id="i86" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getAlterStatus-org.apache.hadoop.hbase.TableName-">getAlterStatus</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -787,23 +795,23 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i86" class="altColor">
+<tr id="i87" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getBackupMasters--">getBackupMasters</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i87" class="rowColor">
+<tr id="i88" class="altColor">
 <td class="colFirst"><code>default <a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getClusterMetrics--">getClusterMetrics</a></span>()</code>
 <div class="block">Get whole cluster metrics, containing status about:</div>
 </td>
 </tr>
-<tr id="i88" class="altColor">
+<tr id="i89" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getClusterMetrics-java.util.EnumSet-">getClusterMetrics</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase">ClusterMetrics.Option</a>&gt;&nbsp;options)</code>
 <div class="block">Get cluster status with a set of <a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><code>ClusterMetrics.Option</code></a> to get desired status.</div>
 </td>
 </tr>
-<tr id="i89" class="rowColor">
+<tr id="i90" class="altColor">
 <td class="colFirst"><code>default <a href="../../../../../org/apache/hadoop/hbase/ClusterStatus.html" title="class in org.apache.hadoop.hbase">ClusterStatus</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getClusterStatus--">getClusterStatus</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -812,40 +820,40 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i90" class="altColor">
+<tr id="i91" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getCompactionState-org.apache.hadoop.hbase.TableName-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr id="i91" class="rowColor">
+<tr id="i92" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getCompactionState-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr id="i92" class="altColor">
+<tr id="i93" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getCompactionStateForRegion-byte:A-">getCompactionStateForRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Get the current compaction state of region.</div>
 </td>
 </tr>
-<tr id="i93" class="rowColor">
+<tr id="i94" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.conf.Configuration</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getConfiguration--">getConfiguration</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i94" class="altColor">
+<tr id="i95" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getConnection--">getConnection</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i95" class="rowColor">
+<tr id="i96" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getDescriptor-org.apache.hadoop.hbase.TableName-">getDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get a table descriptor.</div>
 </td>
 </tr>
-<tr id="i96" class="altColor">
+<tr id="i97" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getLastMajorCompactionTimestamp-org.apache.hadoop.hbase.TableName-">getLastMajorCompactionTimestamp</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the timestamp of the last major compaction for the passed table
@@ -854,29 +862,29 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
  or 0 if no such HFile could be found.</div>
 </td>
 </tr>
-<tr id="i97" class="rowColor">
+<tr id="i98" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getLastMajorCompactionTimestampForRegion-byte:A-">getLastMajorCompactionTimestampForRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Get the timestamp of the last major compaction for the passed region.</div>
 </td>
 </tr>
-<tr id="i98" class="altColor">
+<tr id="i99" 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/client/Admin.html#getLocks--">getLocks</a></span>()</code>
 <div class="block">Get locks.</div>
 </td>
 </tr>
-<tr id="i99" class="rowColor">
+<tr id="i100" class="altColor">
 <td class="colFirst"><code>default <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getMaster--">getMaster</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i100" class="altColor">
+<tr id="i101" class="rowColor">
 <td class="colFirst"><code>default <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="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getMasterCoprocessorNames--">getMasterCoprocessorNames</a></span>()</code>
 <div class="block">Helper that delegates to getClusterMetrics().getMasterCoprocessorNames().</div>
 </td>
 </tr>
-<tr id="i101" class="rowColor">
+<tr id="i102" class="altColor">
 <td class="colFirst"><code>default <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/client/Admin.html#getMasterCoprocessors--">getMasterCoprocessors</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -885,19 +893,19 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i102" class="altColor">
+<tr id="i103" class="rowColor">
 <td class="colFirst"><code>default int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getMasterInfoPort--">getMasterInfoPort</a></span>()</code>
 <div class="block">Get the info port of the current master if one is available.</div>
 </td>
 </tr>
-<tr id="i103" class="rowColor">
+<tr id="i104" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getNamespaceDescriptor-java.lang.String-">getNamespaceDescriptor</a></span>(<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;name)</code>
 <div class="block">Get a namespace descriptor by name.</div>
 </td>
 </tr>
-<tr id="i104" class="altColor">
+<tr id="i105" class="rowColor">
 <td class="colFirst"><code><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/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getOnlineRegions-org.apache.hadoop.hbase.ServerName-">getOnlineRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -907,23 +915,23 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i105" class="rowColor">
+<tr id="i106" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getOperationTimeout--">getOperationTimeout</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i106" class="altColor">
+<tr id="i107" 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/client/Admin.html#getProcedures--">getProcedures</a></span>()</code>
 <div class="block">Get procedures.</div>
 </td>
 </tr>
-<tr id="i107" class="rowColor">
+<tr id="i108" class="altColor">
 <td class="colFirst"><code><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/quotas/QuotaSettings.html" title="class in org.apache.hadoop.hbase.quotas">QuotaSettings</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getQuota-org.apache.hadoop.hbase.quotas.QuotaFilter-">getQuota</a></span>(<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaFilter.html" title="class in org.apache.hadoop.hbase.quotas">QuotaFilter</a>&nbsp;filter)</code>
 <div class="block">List the quotas based on the filter.</div>
 </td>
 </tr>
-<tr id="i108" class="altColor">
+<tr id="i109" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaRetriever.html" title="class in org.apache.hadoop.hbase.quotas">QuotaRetriever</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getQuotaRetriever-org.apache.hadoop.hbase.quotas.QuotaFilter-">getQuotaRetriever</a></span>(<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaFilter.html" title="class in org.apache.hadoop.hbase.quotas">QuotaFilter</a>&nbsp;filter)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -931,48 +939,48 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i109" class="rowColor">
+<tr id="i110" class="altColor">
 <td class="colFirst"><code>default <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/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getRegionMetrics-org.apache.hadoop.hbase.ServerName-">getRegionMetrics</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Get <a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase"><code>RegionMetrics</code></a> of all regions hosted on a regionserver.</div>
 </td>
 </tr>
-<tr id="i110" class="altColor">
+<tr id="i111" class="rowColor">
 <td class="colFirst"><code><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/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getRegionMetrics-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.TableName-">getRegionMetrics</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                 <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get <a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase"><code>RegionMetrics</code></a> of all regions hosted on a regionserver for a table.</div>
 </td>
 </tr>
-<tr id="i111" class="rowColor">
+<tr id="i112" class="altColor">
 <td class="colFirst"><code><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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getRegions-org.apache.hadoop.hbase.ServerName-">getRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Get all the online regions on a region server.</div>
 </td>
 </tr>
-<tr id="i112" class="altColor">
+<tr id="i113" class="rowColor">
 <td class="colFirst"><code><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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getRegions-org.apache.hadoop.hbase.TableName-">getRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the regions of a given table.</div>
 </td>
 </tr>
-<tr id="i113" class="rowColor">
+<tr id="i114" class="altColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getRegionServers--">getRegionServers</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i114" class="altColor">
+<tr id="i115" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getReplicationPeerConfig-java.lang.String-">getReplicationPeerConfig</a></span>(<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;peerId)</code>
 <div class="block">Returns the configured ReplicationPeerConfig for the specified peer.</div>
 </td>
 </tr>
-<tr id="i115" class="rowColor">
+<tr id="i116" class="altColor">
 <td class="colFirst"><code><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/security/SecurityCapability.html" title="enum in org.apache.hadoop.hbase.client.security">SecurityCapability</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getSecurityCapabilities--">getSecurityCapabilities</a></span>()</code>
 <div class="block">Return the set of supported security capabilities.</div>
 </td>
 </tr>
-<tr id="i116" class="altColor">
+<tr id="i117" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getTableDescriptor-org.apache.hadoop.hbase.TableName-">getTableDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -981,7 +989,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i117" class="rowColor">
+<tr id="i118" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getTableDescriptors-java.util.List-">getTableDescriptors</a></span>(<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="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;names)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -990,7 +998,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i118" class="altColor">
+<tr id="i119" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getTableDescriptorsByTableName-java.util.List-">getTableDescriptorsByTableName</a></span>(<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tableNames)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -999,7 +1007,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i119" class="rowColor">
+<tr id="i120" class="altColor">
 <td class="colFirst"><code><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/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getTableRegions-org.apache.hadoop.hbase.TableName-">getTableRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -1009,49 +1017,49 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i120" class="altColor">
+<tr id="i121" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isAborted--">isAborted</a></span>()</code>
 <div class="block">Check if the server or client was aborted.</div>
 </td>
 </tr>
-<tr id="i121" class="rowColor">
+<tr id="i122" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isBalancerEnabled--">isBalancerEnabled</a></span>()</code>
 <div class="block">Query the current state of the balancer.</div>
 </td>
 </tr>
-<tr id="i122" class="altColor">
+<tr id="i123" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isCatalogJanitorEnabled--">isCatalogJanitorEnabled</a></span>()</code>
 <div class="block">Query on the catalog janitor state (Enabled/Disabled?).</div>
 </td>
 </tr>
-<tr id="i123" class="rowColor">
+<tr id="i124" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isCleanerChoreEnabled--">isCleanerChoreEnabled</a></span>()</code>
 <div class="block">Query on the cleaner chore state (Enabled/Disabled?).</div>
 </td>
 </tr>
-<tr id="i124" class="altColor">
+<tr id="i125" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isMasterInMaintenanceMode--">isMasterInMaintenanceMode</a></span>()</code>
 <div class="block">Check whether Master is in maintenance mode.</div>
 </td>
 </tr>
-<tr id="i125" class="rowColor">
+<tr id="i126" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isMergeEnabled--">isMergeEnabled</a></span>()</code>
 <div class="block">Query the current state of the merge switch.</div>
 </td>
 </tr>
-<tr id="i126" class="altColor">
+<tr id="i127" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isNormalizerEnabled--">isNormalizerEnabled</a></span>()</code>
 <div class="block">Query the current state of the region normalizer.</div>
 </td>
 </tr>
-<tr id="i127" class="rowColor">
+<tr id="i128" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isProcedureFinished-java.lang.String-java.lang.String-java.util.Map-">isProcedureFinished</a></span>(<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;signature,
                    <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;instance,
@@ -1059,19 +1067,19 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 <div class="block">Check the current state of the specified procedure.</div>
 </td>
 </tr>
-<tr id="i128" class="altColor">
+<tr id="i129" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isSnapshotFinished-org.apache.hadoop.hbase.client.SnapshotDescription-">isSnapshotFinished</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&nbsp;snapshot)</code>
 <div class="block">Check the current state of the passed snapshot.</div>
 </td>
 </tr>
-<tr id="i129" class="rowColor">
+<tr id="i130" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isSplitEnabled--">isSplitEnabled</a></span>()</code>
 <div class="block">Query the current state of the split switch.</div>
 </td>
 </tr>
-<tr id="i130" class="altColor">
+<tr id="i131" class="rowColor">
 <td class="colFirst"><code>default boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isSplitOrMergeEnabled-org.apache.hadoop.hbase.client.MasterSwitchType-">isSplitOrMergeEnabled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client">MasterSwitchType</a>&nbsp;switchType)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -1080,11 +1088,11 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i131" class="rowColor">
+<tr id="i132" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isTableAvailable-org.apache.hadoop.hbase.TableName-">isTableAvailable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i132" class="altColor">
+<tr id="i133" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isTableAvailable-org.apache.hadoop.hbase.TableName-byte:A:A-">isTableAvailable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 byte[][]&nbsp;splitKeys)</code>
@@ -1093,63 +1101,63 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i133" class="rowColor">
+<tr id="i134" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isTableDisabled-org.apache.hadoop.hbase.TableName-">isTableDisabled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i134" class="altColor">
+<tr id="i135" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isTableEnabled-org.apache.hadoop.hbase.TableName-">isTableEnabled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i135" class="rowColor">
+<tr id="i136" class="altColor">
 <td class="colFirst"><code>default <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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listDeadServers--">listDeadServers</a></span>()</code>
 <div class="block">List dead region servers.</div>
 </td>
 </tr>
-<tr id="i136" class="altColor">
+<tr id="i137" class="rowColor">
 <td class="colFirst"><code><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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listDecommissionedRegionServers--">listDecommissionedRegionServers</a></span>()</code>
 <div class="block">List region servers marked as decommissioned, which can not be assigned regions.</div>
 </td>
 </tr>
-<tr id="i137" class="rowColor">
+<tr id="i138" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listNamespaceDescriptors--">listNamespaceDescriptors</a></span>()</code>
 <div class="block">List available namespace descriptors.</div>
 </td>
 </tr>
-<tr id="i138" class="altColor">
+<tr id="i139" class="rowColor">
 <td class="colFirst"><code><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/replication/TableCFs.html" title="class in org.apache.hadoop.hbase.client.replication">TableCFs</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listReplicatedTableCFs--">listReplicatedTableCFs</a></span>()</code>
 <div class="block">Find all table and column families that are replicated from this cluster</div>
 </td>
 </tr>
-<tr id="i139" class="rowColor">
+<tr id="i140" class="altColor">
 <td class="colFirst"><code><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/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listReplicationPeers--">listReplicationPeers</a></span>()</code>
 <div class="block">Return a list of replication peers.</div>
 </td>
 </tr>
-<tr id="i140" class="altColor">
+<tr id="i141" class="rowColor">
 <td class="colFirst"><code><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/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listReplicationPeers-java.util.regex.Pattern-">listReplicationPeers</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">Return a list of replication peers.</div>
 </td>
 </tr>
-<tr id="i141" class="rowColor">
+<tr id="i142" class="altColor">
 <td class="colFirst"><code><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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listSnapshots--">listSnapshots</a></span>()</code>
 <div class="block">List completed snapshots.</div>
 </td>
 </tr>
-<tr id="i142" class="altColor">
+<tr id="i143" class="rowColor">
 <td class="colFirst"><code><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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listSnapshots-java.util.regex.Pattern-">listSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">List all the completed snapshots matching the given pattern.</div>
 </td>
 </tr>
-<tr id="i143" class="rowColor">
+<tr id="i144" class="altColor">
 <td class="colFirst"><code><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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listSnapshots-java.lang.String-">listSnapshots</a></span>(<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;regex)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -1158,38 +1166,38 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i144" class="altColor">
+<tr id="i145" class="rowColor">
 <td class="colFirst"><code><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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listTableDescriptors--">listTableDescriptors</a></span>()</code>
 <div class="block">List all the userspace tables.</div>
 </td>
 </tr>
-<tr id="i145" class="rowColor">
+<tr id="i146" class="altColor">
 <td class="colFirst"><code><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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listTableDescriptors-java.util.List-">listTableDescriptors</a></span>(<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tableNames)</code>
 <div class="block">Get tableDescriptors.</div>
 </td>
 </tr>
-<tr id="i146" class="altColor">
+<tr id="i147" class="rowColor">
 <td class="colFirst"><code><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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listTableDescriptors-java.util.regex.Pattern-">listTableDescriptors</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">List all the userspace tables that match the given pattern.</div>
 </td>
 </tr>
-<tr id="i147" class="rowColor">
+<tr id="i148" class="altColor">
 <td class="colFirst"><code><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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listTableDescriptors-java.util.regex.Pattern-boolean-">listTableDescriptors</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern,
                     boolean&nbsp;includeSysTables)</code>
 <div class="block">List all the tables matching the given pattern.</div>
 </td>
 </tr>
-<tr id="i148" class="altColor">
+<tr id="i149" class="rowColor">
 <td class="colFirst"><code><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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listTableDescriptorsByNamespace-byte:A-">listTableDescriptorsByNamespace</a></span>(byte[]&nbsp;name)</code>
 <div class="block">Get list of table descriptors by namespace.</div>
 </td>
 </tr>
-<tr id="i149" class="rowColor">
+<tr id="i150" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listTableDescriptorsByNamespace-java.lang.String-">listTableDescriptorsByNamespace</a></span>(<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;name)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -1198,26 +1206,26 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </div>
 </td>
 </tr>
-<tr id="i150" class="altColor">
+<tr id="i151" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#listTableNames--">listTableNames</a></span>()</code>
 <div class="block">List all of the names of userspace tables.</div>
 </td>
 </tr>
-<tr id="i151" class="rowColor">
+<tr id="i152" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/ap

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/KeyValueHeap.KVScannerComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/KeyValueHeap.KVScannerComparator.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/KeyValueHeap.KVScannerComparator.html
index 3cafa7c..05ee7d2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/KeyValueHeap.KVScannerComparator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/KeyValueHeap.KVScannerComparator.html
@@ -232,8 +232,8 @@
 <span class="sourceLineNo">224</span>      this.current.close();<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    if (this.heap != null) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      KeyValueScanner scanner;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      while ((scanner = this.heap.poll()) != null) {<a name="line.228"></a>
+<span class="sourceLineNo">227</span>      // Order of closing the scanners shouldn't matter here, so simply iterate and close them.<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      for (KeyValueScanner scanner : heap) {<a name="line.228"></a>
 <span class="sourceLineNo">229</span>        scanner.close();<a name="line.229"></a>
 <span class="sourceLineNo">230</span>      }<a name="line.230"></a>
 <span class="sourceLineNo">231</span>    }<a name="line.231"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/KeyValueHeap.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/KeyValueHeap.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/KeyValueHeap.html
index 3cafa7c..05ee7d2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/KeyValueHeap.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/KeyValueHeap.html
@@ -232,8 +232,8 @@
 <span class="sourceLineNo">224</span>      this.current.close();<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    if (this.heap != null) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      KeyValueScanner scanner;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      while ((scanner = this.heap.poll()) != null) {<a name="line.228"></a>
+<span class="sourceLineNo">227</span>      // Order of closing the scanners shouldn't matter here, so simply iterate and close them.<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      for (KeyValueScanner scanner : heap) {<a name="line.228"></a>
 <span class="sourceLineNo">229</span>        scanner.close();<a name="line.229"></a>
 <span class="sourceLineNo">230</span>      }<a name="line.230"></a>
 <span class="sourceLineNo">231</span>    }<a name="line.231"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html
index 47c27f1..d7d35b7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html
@@ -30,13 +30,13 @@
 <span class="sourceLineNo">022</span>import java.util.List;<a name="line.22"></a>
 <span class="sourceLineNo">023</span><a name="line.23"></a>
 <span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.Cell;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.25"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.25"></a>
 <span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.HConstants;<a name="line.26"></a>
 <span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.31"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.31"></a>
 <span class="sourceLineNo">032</span><a name="line.32"></a>
 <span class="sourceLineNo">033</span>/**<a name="line.33"></a>
 <span class="sourceLineNo">034</span> * ReversibleRegionScannerImpl extends from RegionScannerImpl, and is used to<a name="line.34"></a>
@@ -61,37 +61,36 @@
 <span class="sourceLineNo">053</span>      List&lt;KeyValueScanner&gt; joinedScanners, HRegion region) throws IOException {<a name="line.53"></a>
 <span class="sourceLineNo">054</span>    this.storeHeap = new ReversedKeyValueHeap(scanners, comparator);<a name="line.54"></a>
 <span class="sourceLineNo">055</span>    if (!joinedScanners.isEmpty()) {<a name="line.55"></a>
-<span class="sourceLineNo">056</span>      this.joinedHeap = new ReversedKeyValueHeap(joinedScanners,<a name="line.56"></a>
-<span class="sourceLineNo">057</span>          comparator);<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    }<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  }<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  @Override<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  protected boolean shouldStop(Cell currentRowCell) {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    if (currentRowCell == null) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      return true;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    }<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    if (stopRow == null || Bytes.equals(stopRow, HConstants.EMPTY_START_ROW)) {<a name="line.66"></a>
-<span class="sourceLineNo">067</span>      return false;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    }<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    int c = comparator.compareRows(currentRowCell, stopRow, 0, stopRow.length);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    return c &lt; 0 || (c == 0 &amp;&amp; !includeStopRow);<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  }<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  @Override<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  protected boolean nextRow(ScannerContext scannerContext, Cell curRowCell)<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      throws IOException {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    assert super.joinedContinuationRow == null : "Trying to go to next row during joinedHeap read.";<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    this.storeHeap.seekToPreviousRow(PrivateCellUtil.createFirstOnRow(curRowCell));<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    resetFilters();<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    // Calling the hook in CP which allows it to do a fast forward<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    if (this.region.getCoprocessorHost() != null) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      return this.region.getCoprocessorHost().postScannerFilterRow(this, curRowCell);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    }<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    return true;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>}<a name="line.86"></a>
+<span class="sourceLineNo">056</span>      throw new DoNotRetryIOException("Reverse scan with loading CFs on demand is not supported");<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    }<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  }<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  @Override<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  protected boolean shouldStop(Cell currentRowCell) {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    if (currentRowCell == null) {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      return true;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    }<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    if (stopRow == null || Bytes.equals(stopRow, HConstants.EMPTY_START_ROW)) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      return false;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    }<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    int c = comparator.compareRows(currentRowCell, stopRow, 0, stopRow.length);<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    return c &lt; 0 || (c == 0 &amp;&amp; !includeStopRow);<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  @Override<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  protected boolean nextRow(ScannerContext scannerContext, Cell curRowCell)<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      throws IOException {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    assert super.joinedContinuationRow == null : "Trying to go to next row during joinedHeap read.";<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    this.storeHeap.seekToPreviousRow(PrivateCellUtil.createFirstOnRow(curRowCell));<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    resetFilters();<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    // Calling the hook in CP which allows it to do a fast forward<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    if (this.region.getCoprocessorHost() != null) {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      return this.region.getCoprocessorHost().postScannerFilterRow(this, curRowCell);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    }<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    return true;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>}<a name="line.85"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html b/devapidocs/src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html
index 1e76aae..b00faf2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html
@@ -26,232 +26,220 @@
 <span class="sourceLineNo">018</span><a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.thrift;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.util.Arrays;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.List;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.conf.Configuration;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.http.InfoServer;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.thrift.ThriftServerRunner.ImplType;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.util.Shell.ExitCodeException;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.slf4j.Logger;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.slf4j.LoggerFactory;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLineParser;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.PosixParser;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>/**<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * ThriftServer- this class starts up a Thrift server which implements the<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * Hbase API specified in the Hbase.thrift IDL file. The server runs in an<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * independent process.<a name="line.43"></a>
-<span class="sourceLineNo">044</span> */<a name="line.44"></a>
-<span class="sourceLineNo">045</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.45"></a>
-<span class="sourceLineNo">046</span>public class ThriftServer {<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private static final Logger LOG = LoggerFactory.getLogger(ThriftServer.class);<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private static final String MIN_WORKERS_OPTION = "minWorkers";<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  private static final String MAX_WORKERS_OPTION = "workers";<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  private static final String MAX_QUEUE_SIZE_OPTION = "queue";<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private static final String KEEP_ALIVE_SEC_OPTION = "keepAliveSec";<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  static final String BIND_OPTION = "bind";<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  static final String COMPACT_OPTION = "compact";<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  static final String FRAMED_OPTION = "framed";<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  static final String PORT_OPTION = "port";<a name="line.57"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.conf.Configuration;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.http.InfoServer;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.thrift.ThriftServerRunner.ImplType;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.util.Shell.ExitCodeException;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.slf4j.Logger;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.slf4j.LoggerFactory;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLineParser;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.DefaultParser;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>/**<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * ThriftServer- this class starts up a Thrift server which implements the<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * Hbase API specified in the Hbase.thrift IDL file. The server runs in an<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * independent process.<a name="line.40"></a>
+<span class="sourceLineNo">041</span> */<a name="line.41"></a>
+<span class="sourceLineNo">042</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.42"></a>
+<span class="sourceLineNo">043</span>public class ThriftServer {<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>  private static final Logger LOG = LoggerFactory.getLogger(ThriftServer.class);<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private static final String MIN_WORKERS_OPTION = "minWorkers";<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  private static final String MAX_WORKERS_OPTION = "workers";<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private static final String MAX_QUEUE_SIZE_OPTION = "queue";<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private static final String KEEP_ALIVE_SEC_OPTION = "keepAliveSec";<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  static final String BIND_OPTION = "bind";<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  static final String COMPACT_OPTION = "compact";<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  static final String FRAMED_OPTION = "framed";<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  static final String PORT_OPTION = "port";<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private static final String DEFAULT_BIND_ADDR = "0.0.0.0";<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private static final int DEFAULT_LISTEN_PORT = 9090;<a name="line.57"></a>
 <span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private static final String DEFAULT_BIND_ADDR = "0.0.0.0";<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  private static final int DEFAULT_LISTEN_PORT = 9090;<a name="line.60"></a>
+<span class="sourceLineNo">059</span>  private Configuration conf;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  ThriftServerRunner serverRunner;<a name="line.60"></a>
 <span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private Configuration conf;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  ThriftServerRunner serverRunner;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  private InfoServer infoServer;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private static final String READ_TIMEOUT_OPTION = "readTimeout";<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  //<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  // Main program and support routines<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  //<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public ThriftServer(Configuration conf) {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private static void printUsageAndExit(Options options, int exitCode)<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      throws ExitCodeException {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    HelpFormatter formatter = new HelpFormatter();<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    formatter.printHelp("Thrift", null, options,<a name="line.80"></a>
-<span class="sourceLineNo">081</span>        "To start the Thrift server run 'hbase-daemon.sh start thrift'\n" +<a name="line.81"></a>
-<span class="sourceLineNo">082</span>        "To shutdown the thrift server run 'hbase-daemon.sh stop " +<a name="line.82"></a>
-<span class="sourceLineNo">083</span>        "thrift' or send a kill signal to the thrift server pid",<a name="line.83"></a>
-<span class="sourceLineNo">084</span>        true);<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    throw new ExitCodeException(exitCode, "");<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   * Start up or shuts down the Thrift server, depending on the arguments.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * @param args the arguments to pass in when starting the Thrift server<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   */<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  void doMain(final String[] args) throws Exception {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    processOptions(args);<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    serverRunner = new ThriftServerRunner(conf);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>    // Put up info server.<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    int port = conf.getInt("hbase.thrift.info.port", 9095);<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span>    if (port &gt;= 0) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      conf.setLong("startcode", System.currentTimeMillis());<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      String a = conf.get("hbase.thrift.info.bindAddress", "0.0.0.0");<a name="line.101"></a>
-<span class="sourceLineNo">102</span>      infoServer = new InfoServer("thrift", a, port, false, conf);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      infoServer.setAttribute("hbase.conf", conf);<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      infoServer.start();<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>    serverRunner.run();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span>  /**<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * Parse the command line options to set parameters the conf.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private void processOptions(final String[] args) throws Exception {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    Options options = new Options();<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    options.addOption("b", BIND_OPTION, true, "Address to bind " +<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        "the Thrift server to. [default: " + DEFAULT_BIND_ADDR + "]");<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    options.addOption("p", PORT_OPTION, true, "Port to bind to [default: " +<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        DEFAULT_LISTEN_PORT + "]");<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    options.addOption("f", FRAMED_OPTION, false, "Use framed transport");<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    options.addOption("c", COMPACT_OPTION, false, "Use the compact protocol");<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    options.addOption("h", "help", false, "Print help information");<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    options.addOption(null, "infoport", true, "Port for web UI");<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>    options.addOption("m", MIN_WORKERS_OPTION, true,<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        "The minimum number of worker threads for " +<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        ImplType.THREAD_POOL.simpleClassName());<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>    options.addOption("w", MAX_WORKERS_OPTION, true,<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        "The maximum number of worker threads for " +<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        ImplType.THREAD_POOL.simpleClassName());<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>    options.addOption("q", MAX_QUEUE_SIZE_OPTION, true,<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        "The maximum number of queued requests in " +<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        ImplType.THREAD_POOL.simpleClassName());<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>    options.addOption("k", KEEP_ALIVE_SEC_OPTION, true,<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        "The amount of time in secods to keep a thread alive when idle in " +<a name="line.137"></a>
-<span class="sourceLineNo">138</span>        ImplType.THREAD_POOL.simpleClassName());<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    options.addOption("t", READ_TIMEOUT_OPTION, true,<a name="line.140"></a>
-<span class="sourceLineNo">141</span>        "Amount of time in milliseconds before a server thread will timeout " +<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        "waiting for client to send data on a connected socket. Currently, " +<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        "only applies to TBoundedThreadPoolServer");<a name="line.143"></a>
+<span class="sourceLineNo">062</span>  private InfoServer infoServer;<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private static final String READ_TIMEOUT_OPTION = "readTimeout";<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  //<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  // Main program and support routines<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  //<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  public ThriftServer(Configuration conf) {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private static void printUsageAndExit(Options options, int exitCode)<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      throws ExitCodeException {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    HelpFormatter formatter = new HelpFormatter();<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    formatter.printHelp("Thrift", null, options,<a name="line.77"></a>
+<span class="sourceLineNo">078</span>        "To start the Thrift server run 'hbase-daemon.sh start thrift' or " +<a name="line.78"></a>
+<span class="sourceLineNo">079</span>        "'hbase thrift'\n" +<a name="line.79"></a>
+<span class="sourceLineNo">080</span>        "To shutdown the thrift server run 'hbase-daemon.sh stop " +<a name="line.80"></a>
+<span class="sourceLineNo">081</span>        "thrift' or send a kill signal to the thrift server pid",<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        true);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    throw new ExitCodeException(exitCode, "");<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  /**<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * Start up or shuts down the Thrift server, depending on the arguments.<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   * @param args the arguments to pass in when starting the Thrift server<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   */<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  void doMain(final String[] args) throws Exception {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    processOptions(args);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    serverRunner = new ThriftServerRunner(conf);<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>    // Put up info server.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    int port = conf.getInt("hbase.thrift.info.port", 9095);<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>    if (port &gt;= 0) {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      conf.setLong("startcode", System.currentTimeMillis());<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      String a = conf.get("hbase.thrift.info.bindAddress", "0.0.0.0");<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      infoServer = new InfoServer("thrift", a, port, false, conf);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      infoServer.setAttribute("hbase.conf", conf);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      infoServer.start();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>    serverRunner.run();<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  /**<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * Parse the command line options to set parameters the conf.<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  private void processOptions(final String[] args) throws Exception {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    Options options = new Options();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    options.addOption("b", BIND_OPTION, true, "Address to bind " +<a name="line.113"></a>
+<span class="sourceLineNo">114</span>        "the Thrift server to. [default: " + DEFAULT_BIND_ADDR + "]");<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    options.addOption("p", PORT_OPTION, true, "Port to bind to [default: " +<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        DEFAULT_LISTEN_PORT + "]");<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    options.addOption("f", FRAMED_OPTION, false, "Use framed transport");<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    options.addOption("c", COMPACT_OPTION, false, "Use the compact protocol");<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    options.addOption("h", "help", false, "Print help information");<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    options.addOption(null, "infoport", true, "Port for web UI");<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>    options.addOption("m", MIN_WORKERS_OPTION, true,<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        "The minimum number of worker threads for " +<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        ImplType.THREAD_POOL.simpleClassName());<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>    options.addOption("w", MAX_WORKERS_OPTION, true,<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        "The maximum number of worker threads for " +<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        ImplType.THREAD_POOL.simpleClassName());<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>    options.addOption("q", MAX_QUEUE_SIZE_OPTION, true,<a name="line.130"></a>
+<span class="sourceLineNo">131</span>        "The maximum number of queued requests in " +<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        ImplType.THREAD_POOL.simpleClassName());<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>    options.addOption("k", KEEP_ALIVE_SEC_OPTION, true,<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        "The amount of time in secods to keep a thread alive when idle in " +<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        ImplType.THREAD_POOL.simpleClassName());<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>    options.addOption("t", READ_TIMEOUT_OPTION, true,<a name="line.138"></a>
+<span class="sourceLineNo">139</span>        "Amount of time in milliseconds before a server thread will timeout " +<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        "waiting for client to send data on a connected socket. Currently, " +<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        "only applies to TBoundedThreadPoolServer");<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>    options.addOptionGroup(ImplType.createOptionGroup());<a name="line.143"></a>
 <span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>    options.addOptionGroup(ImplType.createOptionGroup());<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>    CommandLineParser parser = new PosixParser();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    CommandLine cmd = parser.parse(options, args);<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>    // This is so complicated to please both bin/hbase and bin/hbase-daemon.<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    // hbase-daemon provides "start" and "stop" arguments<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    // hbase should print the help if no argument is provided<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    List&lt;String&gt; commandLine = Arrays.asList(args);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    boolean stop = commandLine.contains("stop");<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    boolean start = commandLine.contains("start");<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    boolean invalidStartStop = (start &amp;&amp; stop) || (!start &amp;&amp; !stop);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    if (cmd.hasOption("help") || invalidStartStop) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      if (invalidStartStop) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        LOG.error("Exactly one of 'start' and 'stop' has to be specified");<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      printUsageAndExit(options, 1);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>    // Get port to bind to<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    try {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      if (cmd.hasOption(PORT_OPTION)) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        int listenPort = Integer.parseInt(cmd.getOptionValue(PORT_OPTION));<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        conf.setInt(ThriftServerRunner.PORT_CONF_KEY, listenPort);<a name="line.168"></a>
+<span class="sourceLineNo">145</span>    CommandLineParser parser = new DefaultParser();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    CommandLine cmd = parser.parse(options, args);<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>    if (cmd.hasOption("help")) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      printUsageAndExit(options, 1);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    // Get port to bind to<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    try {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      if (cmd.hasOption(PORT_OPTION)) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>        int listenPort = Integer.parseInt(cmd.getOptionValue(PORT_OPTION));<a name="line.155"></a>
+<span class="sourceLineNo">156</span>        conf.setInt(ThriftServerRunner.PORT_CONF_KEY, listenPort);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      }<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    } catch (NumberFormatException e) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      LOG.error("Could not parse the value provided for the port option", e);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      printUsageAndExit(options, -1);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>    // check for user-defined info server port setting, if so override the conf<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    try {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      if (cmd.hasOption("infoport")) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        String val = cmd.getOptionValue("infoport");<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        conf.setInt("hbase.thrift.info.port", Integer.parseInt(val));<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        LOG.debug("Web UI port set to " + val);<a name="line.168"></a>
 <span class="sourceLineNo">169</span>      }<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    } catch (NumberFormatException e) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      LOG.error("Could not parse the value provided for the port option", e);<a name="line.171"></a>
+<span class="sourceLineNo">171</span>      LOG.error("Could not parse the value provided for the infoport option", e);<a name="line.171"></a>
 <span class="sourceLineNo">172</span>      printUsageAndExit(options, -1);<a name="line.172"></a>
 <span class="sourceLineNo">173</span>    }<a name="line.173"></a>
 <span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>    // check for user-defined info server port setting, if so override the conf<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    try {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      if (cmd.hasOption("infoport")) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        String val = cmd.getOptionValue("infoport");<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        conf.setInt("hbase.thrift.info.port", Integer.parseInt(val));<a name="line.179"></a>
-<span class="sourceLineNo">180</span>        LOG.debug("Web UI port set to " + val);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      }<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    } catch (NumberFormatException e) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      LOG.error("Could not parse the value provided for the infoport option", e);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      printUsageAndExit(options, -1);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
+<span class="sourceLineNo">175</span>    // Make optional changes to the configuration based on command-line options<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    optionToConf(cmd, MIN_WORKERS_OPTION,<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        conf, TBoundedThreadPoolServer.MIN_WORKER_THREADS_CONF_KEY);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    optionToConf(cmd, MAX_WORKERS_OPTION,<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        conf, TBoundedThreadPoolServer.MAX_WORKER_THREADS_CONF_KEY);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    optionToConf(cmd, MAX_QUEUE_SIZE_OPTION,<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        conf, TBoundedThreadPoolServer.MAX_QUEUED_REQUESTS_CONF_KEY);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    optionToConf(cmd, KEEP_ALIVE_SEC_OPTION,<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        conf, TBoundedThreadPoolServer.THREAD_KEEP_ALIVE_TIME_SEC_CONF_KEY);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    optionToConf(cmd, READ_TIMEOUT_OPTION, conf,<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        ThriftServerRunner.THRIFT_SERVER_SOCKET_READ_TIMEOUT_KEY);<a name="line.185"></a>
 <span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span>    // Make optional changes to the configuration based on command-line options<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    optionToConf(cmd, MIN_WORKERS_OPTION,<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        conf, TBoundedThreadPoolServer.MIN_WORKER_THREADS_CONF_KEY);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    optionToConf(cmd, MAX_WORKERS_OPTION,<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        conf, TBoundedThreadPoolServer.MAX_WORKER_THREADS_CONF_KEY);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    optionToConf(cmd, MAX_QUEUE_SIZE_OPTION,<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        conf, TBoundedThreadPoolServer.MAX_QUEUED_REQUESTS_CONF_KEY);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    optionToConf(cmd, KEEP_ALIVE_SEC_OPTION,<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        conf, TBoundedThreadPoolServer.THREAD_KEEP_ALIVE_TIME_SEC_CONF_KEY);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    optionToConf(cmd, READ_TIMEOUT_OPTION, conf,<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        ThriftServerRunner.THRIFT_SERVER_SOCKET_READ_TIMEOUT_KEY);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    <a name="line.198"></a>
-<span class="sourceLineNo">199</span>    // Set general thrift server options<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    boolean compact = cmd.hasOption(COMPACT_OPTION) ||<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      conf.getBoolean(ThriftServerRunner.COMPACT_CONF_KEY, false);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    conf.setBoolean(ThriftServerRunner.COMPACT_CONF_KEY, compact);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    boolean framed = cmd.hasOption(FRAMED_OPTION) ||<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      conf.getBoolean(ThriftServerRunner.FRAMED_CONF_KEY, false);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    conf.setBoolean(ThriftServerRunner.FRAMED_CONF_KEY, framed);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    if (cmd.hasOption(BIND_OPTION)) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      conf.set(ThriftServerRunner.BIND_CONF_KEY, cmd.getOptionValue(BIND_OPTION));<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>    ImplType.setServerImpl(cmd, conf);<a name="line.210"></a>
+<span class="sourceLineNo">187</span>    // Set general thrift server options<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    boolean compact = cmd.hasOption(COMPACT_OPTION) ||<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      conf.getBoolean(ThriftServerRunner.COMPACT_CONF_KEY, false);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    conf.setBoolean(ThriftServerRunner.COMPACT_CONF_KEY, compact);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    boolean framed = cmd.hasOption(FRAMED_OPTION) ||<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      conf.getBoolean(ThriftServerRunner.FRAMED_CONF_KEY, false);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    conf.setBoolean(ThriftServerRunner.FRAMED_CONF_KEY, framed);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    if (cmd.hasOption(BIND_OPTION)) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      conf.set(ThriftServerRunner.BIND_CONF_KEY, cmd.getOptionValue(BIND_OPTION));<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>    ImplType.setServerImpl(cmd, conf);<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>  public void stop() {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    if (this.infoServer != null) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      LOG.info("Stopping infoServer");<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      try {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        this.infoServer.stop();<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      } catch (Exception ex) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        ex.printStackTrace();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    serverRunner.shutdown();<a name="line.210"></a>
 <span class="sourceLineNo">211</span>  }<a name="line.211"></a>
 <span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>  public void stop() {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    if (this.infoServer != null) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      LOG.info("Stopping infoServer");<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      try {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        this.infoServer.stop();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      } catch (Exception ex) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        ex.printStackTrace();<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    serverRunner.shutdown();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  }<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  private static void optionToConf(CommandLine cmd, String option,<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      Configuration conf, String destConfKey) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    if (cmd.hasOption(option)) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      String value = cmd.getOptionValue(option);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      LOG.info("Set configuration key:" + destConfKey + " value:" + value);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      conf.set(destConfKey, value);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>  public static void main(String [] args) throws Exception {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    LOG.info("***** STARTING service '" + ThriftServer.class.getSimpleName() + "' *****");<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    VersionInfo.logVersion();<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    int exitCode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    try {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      new ThriftServer(HBaseConfiguration.create()).doMain(args);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    } catch (ExitCodeException ex) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      exitCode = ex.getExitCode();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    LOG.info("***** STOPPING service '" + ThriftServer.class.getSimpleName() + "' *****");<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    System.exit(exitCode);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>}<a name="line.246"></a>
+<span class="sourceLineNo">213</span>  private static void optionToConf(CommandLine cmd, String option,<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      Configuration conf, String destConfKey) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    if (cmd.hasOption(option)) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      String value = cmd.getOptionValue(option);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      LOG.info("Set configuration key:" + destConfKey + " value:" + value);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      conf.set(destConfKey, value);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>  public static void main(String [] args) throws Exception {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    LOG.info("***** STARTING service '" + ThriftServer.class.getSimpleName() + "' *****");<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    VersionInfo.logVersion();<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    int exitCode = 0;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    try {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      new ThriftServer(HBaseConfiguration.create()).doMain(args);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    } catch (ExitCodeException ex) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      exitCode = ex.getExitCode();<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    LOG.info("***** STOPPING service '" + ThriftServer.class.getSimpleName() + "' *****");<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    System.exit(exitCode);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
+<span class="sourceLineNo">234</span>}<a name="line.234"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    } else if (recentlyModified) {<a name="line.23

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
index a461eb2..621297c 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3847">HBaseFsck.HbckInfo</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3849">HBaseFsck.HbckInfo</a>
 extends <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>
 implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" title="interface in org.apache.hadoop.hbase.util">KeyRange</a></pre>
 <div class="block">Maintain information about a particular region.  It gathers information
@@ -305,7 +305,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>metaEntry</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.MetaEntry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3848">metaEntry</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.MetaEntry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3850">metaEntry</a></pre>
 </li>
 </ul>
 <a name="hdfsEntry">
@@ -314,7 +314,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>hdfsEntry</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HdfsEntry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3849">hdfsEntry</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HdfsEntry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3851">hdfsEntry</a></pre>
 </li>
 </ul>
 <a name="deployedEntries">
@@ -323,7 +323,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>deployedEntries</h4>
-<pre>private&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/util/HBaseFsck.OnlineEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.OnlineEntry</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3850">deployedEntries</a></pre>
+<pre>private&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/util/HBaseFsck.OnlineEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.OnlineEntry</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3852">deployedEntries</a></pre>
 </li>
 </ul>
 <a name="deployedOn">
@@ -332,7 +332,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>deployedOn</h4>
-<pre>private&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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3851">deployedOn</a></pre>
+<pre>private&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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3853">deployedOn</a></pre>
 </li>
 </ul>
 <a name="skipChecks">
@@ -341,7 +341,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>skipChecks</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3852">skipChecks</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3854">skipChecks</a></pre>
 </li>
 </ul>
 <a name="isMerged">
@@ -350,7 +350,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>isMerged</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3853">isMerged</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3855">isMerged</a></pre>
 </li>
 </ul>
 <a name="deployedReplicaId">
@@ -359,7 +359,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>deployedReplicaId</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3854">deployedReplicaId</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3856">deployedReplicaId</a></pre>
 </li>
 </ul>
 <a name="primaryHRIForDeployedReplica">
@@ -368,7 +368,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockListLast">
 <li class="blockList">
 <h4>primaryHRIForDeployedReplica</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3855">primaryHRIForDeployedReplica</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3857">primaryHRIForDeployedReplica</a></pre>
 </li>
 </ul>
 </li>
@@ -385,7 +385,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HbckInfo</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3857">HbckInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.MetaEntry</a>&nbsp;metaEntry)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3859">HbckInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.MetaEntry</a>&nbsp;metaEntry)</pre>
 </li>
 </ul>
 </li>
@@ -402,7 +402,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicaId</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3861">getReplicaId</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3863">getReplicaId</a>()</pre>
 </li>
 </ul>
 <a name="addServer-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">
@@ -411,7 +411,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>addServer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3865">addServer</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3867">addServer</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
                       <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server)</pre>
 </li>
 </ul>
@@ -421,7 +421,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <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/util/HBaseFsck.HbckInfo.html#line.3878">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/util/HBaseFsck.HbckInfo.html#line.3880">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>
@@ -434,7 +434,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartKey</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3890">getStartKey</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3892">getStartKey</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html#getStartKey--">getStartKey</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" title="interface in org.apache.hadoop.hbase.util">KeyRange</a></code></dd>
@@ -447,7 +447,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>getEndKey</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3902">getEndKey</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3904">getEndKey</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html#getEndKey--">getEndKey</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" title="interface in org.apache.hadoop.hbase.util">KeyRange</a></code></dd>
@@ -460,7 +460,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3913">getTableName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3915">getTableName</a>()</pre>
 </li>
 </ul>
 <a name="getRegionNameAsString--">
@@ -469,7 +469,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionNameAsString</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/util/HBaseFsck.HbckInfo.html#line.3930">getRegionNameAsString</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/util/HBaseFsck.HbckInfo.html#line.3932">getRegionNameAsString</a>()</pre>
 </li>
 </ul>
 <a name="getRegionName--">
@@ -478,7 +478,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionName</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3946">getRegionName</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3948">getRegionName</a>()</pre>
 </li>
 </ul>
 <a name="getPrimaryHRIForDeployedReplica--">
@@ -487,7 +487,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>getPrimaryHRIForDeployedReplica</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3960">getPrimaryHRIForDeployedReplica</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3962">getPrimaryHRIForDeployedReplica</a>()</pre>
 </li>
 </ul>
 <a name="getHdfsRegionDir--">
@@ -496,7 +496,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>getHdfsRegionDir</h4>
-<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3964">getHdfsRegionDir</a>()</pre>
+<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3966">getHdfsRegionDir</a>()</pre>
 </li>
 </ul>
 <a name="containsOnlyHdfsEdits--">
@@ -505,7 +505,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>containsOnlyHdfsEdits</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3971">containsOnlyHdfsEdits</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3973">containsOnlyHdfsEdits</a>()</pre>
 </li>
 </ul>
 <a name="isHdfsRegioninfoPresent--">
@@ -514,7 +514,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>isHdfsRegioninfoPresent</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3978">isHdfsRegioninfoPresent</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3980">isHdfsRegioninfoPresent</a>()</pre>
 </li>
 </ul>
 <a name="getModTime--">
@@ -523,7 +523,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>getModTime</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3985">getModTime</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3987">getModTime</a>()</pre>
 </li>
 </ul>
 <a name="getHdfsHRI--">
@@ -532,7 +532,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>getHdfsHRI</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3992">getHdfsHRI</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3994">getHdfsHRI</a>()</pre>
 </li>
 </ul>
 <a name="setSkipChecks-boolean-">
@@ -541,7 +541,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>setSkipChecks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3999">setSkipChecks</a>(boolean&nbsp;skipChecks)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4001">setSkipChecks</a>(boolean&nbsp;skipChecks)</pre>
 </li>
 </ul>
 <a name="isSkipChecks--">
@@ -550,7 +550,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>isSkipChecks</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4003">isSkipChecks</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4005">isSkipChecks</a>()</pre>
 </li>
 </ul>
 <a name="setMerged-boolean-">
@@ -559,7 +559,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>setMerged</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4007">setMerged</a>(boolean&nbsp;isMerged)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4009">setMerged</a>(boolean&nbsp;isMerged)</pre>
 </li>
 </ul>
 <a name="isMerged--">
@@ -568,7 +568,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isMerged</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4011">isMerged</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4013">isMerged</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
index 7d15678..1b4df78 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
@@ -107,7 +107,7 @@
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3822">HBaseFsck.HdfsEntry</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3824">HBaseFsck.HdfsEntry</a>
 extends <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></pre>
 <div class="block">Stores the regioninfo entries from HDFS</div>
 </li>
@@ -201,7 +201,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hri</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3823">hri</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3825">hri</a></pre>
 </li>
 </ul>
 <a name="hdfsRegionDir">
@@ -210,7 +210,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hdfsRegionDir</h4>
-<pre>org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3824">hdfsRegionDir</a></pre>
+<pre>org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3826">hdfsRegionDir</a></pre>
 </li>
 </ul>
 <a name="hdfsRegionDirModTime">
@@ -219,7 +219,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hdfsRegionDirModTime</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3825">hdfsRegionDirModTime</a></pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3827">hdfsRegionDirModTime</a></pre>
 </li>
 </ul>
 <a name="hdfsRegioninfoFilePresent">
@@ -228,7 +228,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hdfsRegioninfoFilePresent</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3826">hdfsRegioninfoFilePresent</a></pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3828">hdfsRegioninfoFilePresent</a></pre>
 </li>
 </ul>
 <a name="hdfsOnlyEdits">
@@ -237,7 +237,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>hdfsOnlyEdits</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3827">hdfsOnlyEdits</a></pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3829">hdfsOnlyEdits</a></pre>
 </li>
 </ul>
 </li>
@@ -254,7 +254,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HdfsEntry</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3822">HdfsEntry</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3824">HdfsEntry</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
index d349c49..6fc8186 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3771">HBaseFsck.MetaEntry</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3773">HBaseFsck.MetaEntry</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a></pre>
 <div class="block">Stores the regioninfo entries scanned from META</div>
 </li>
@@ -264,7 +264,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServer</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3772">regionServer</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3774">regionServer</a></pre>
 </li>
 </ul>
 <a name="modTime">
@@ -273,7 +273,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>modTime</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3773">modTime</a></pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3775">modTime</a></pre>
 </li>
 </ul>
 <a name="splitA">
@@ -282,7 +282,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>splitA</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3774">splitA</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3776">splitA</a></pre>
 </li>
 </ul>
 <a name="splitB">
@@ -291,7 +291,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title=
 <ul class="blockListLast">
 <li class="blockList">
 <h4>splitB</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3774">splitB</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3776">splitB</a></pre>
 </li>
 </ul>
 </li>
@@ -308,7 +308,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>MetaEntry</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3776">MetaEntry</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;rinfo,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3778">MetaEntry</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;rinfo,
                  <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;regionServer,
                  long&nbsp;modTime)</pre>
 </li>
@@ -319,7 +319,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title=
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MetaEntry</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3780">MetaEntry</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;rinfo,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3782">MetaEntry</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;rinfo,
                  <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;regionServer,
                  long&nbsp;modTime,
                  <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;splitA,
@@ -340,7 +340,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3790">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;o)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3792">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;o)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html#equals-java.lang.Object-">equals</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a></code></dd>
@@ -355,7 +355,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title=
 <ul class="blockListLast">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3804">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3806">hashCode</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html#hashCode--">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
index 0f2269c..815f323 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3833">HBaseFsck.OnlineEntry</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3835">HBaseFsck.OnlineEntry</a>
 extends <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></pre>
 <div class="block">Stores the regioninfo retrieved from Online region servers.</div>
 </li>
@@ -206,7 +206,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hri</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html#line.3834">hri</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html#line.3836">hri</a></pre>
 </li>
 </ul>
 <a name="hsa">
@@ -215,7 +215,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>hsa</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html#line.3835">hsa</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html#line.3837">hsa</a></pre>
 </li>
 </ul>
 </li>
@@ -232,7 +232,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>OnlineEntry</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html#line.3833">OnlineEntry</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html#line.3835">OnlineEntry</a>()</pre>
 </li>
 </ul>
 </li>
@@ -249,7 +249,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/util/HBaseFsck.OnlineEntry.html#line.3838">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/util/HBaseFsck.OnlineEntry.html#line.3840">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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
index dafa063..95e5eef 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4142">HBaseFsck.PrintingErrorReporter</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4144">HBaseFsck.PrintingErrorReporter</a>
 extends <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>
 implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></pre>
 </li>
@@ -301,7 +301,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockList">
 <li class="blockList">
 <h4>errorCount</h4>
-<pre>public&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4143">errorCount</a></pre>
+<pre>public&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4145">errorCount</a></pre>
 </li>
 </ul>
 <a name="showProgress">
@@ -310,7 +310,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockList">
 <li class="blockList">
 <h4>showProgress</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4144">showProgress</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4146">showProgress</a></pre>
 </li>
 </ul>
 <a name="progressThreshold">
@@ -319,7 +319,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockList">
 <li class="blockList">
 <h4>progressThreshold</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4146">progressThreshold</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4148">progressThreshold</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.HBaseFsck.PrintingErrorReporter.progressThreshold">Constant Field Values</a></dd>
@@ -332,7 +332,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockList">
 <li class="blockList">
 <h4>errorTables</h4>
-<pre><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;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4148">errorTables</a></pre>
+<pre><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;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4150">errorTables</a></pre>
 </li>
 </ul>
 <a name="errorList">
@@ -341,7 +341,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockListLast">
 <li class="blockList">
 <h4>errorList</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4151">errorList</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4153">errorList</a></pre>
 </li>
 </ul>
 </li>
@@ -358,7 +358,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockListLast">
 <li class="blockList">
 <h4>PrintingErrorReporter</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4142">PrintingErrorReporter</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4144">PrintingErrorReporter</a>()</pre>
 </li>
 </ul>
 </li>
@@ -375,7 +375,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockList">
 <li class="blockList">
 <h4>clear</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4154">clear</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4156">clear</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#clear--">clear</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></dd>
@@ -388,7 +388,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockList">
 <li class="blockList">
 <h4>reportError</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4161">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;errorCode,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4163">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;errorCode,
                         <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;message)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -402,7 +402,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockList">
 <li class="blockList">
 <h4>reportError</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4176">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;errorCode,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4178">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;errorCode,
                         <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;message,
                         <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;table)</pre>
 <dl>
@@ -417,7 +417,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockList">
 <li class="blockList">
 <h4>reportError</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4182">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;errorCode,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4184">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;errorCode,
                         <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;message,
                         <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;table,
                         <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;info)</pre>
@@ -433,7 +433,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockList">
 <li class="blockList">
 <h4>reportError</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4190">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;errorCode,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4192">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;errorCode,
                         <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;message,
                         <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;table,
                         <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;info1,
@@ -450,7 +450,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockList">
 <li class="blockList">
 <h4>reportError</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4199">reportError</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;message)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4201">reportError</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;message)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#reportError-java.lang.String-">reportError</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></dd>
@@ -463,7 +463,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockList">
 <li class="blockList">
 <h4>report</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4209">report</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;message)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4211">report</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;message)</pre>
 <div class="block">Report error information, but do not increment the error count.  Intended for cases
  where the actual error would have been reported previously.</div>
 <dl>
@@ -480,7 +480,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockList">
 <li class="blockList">
 <h4>summarize</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4217">summarize</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4219">summarize</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#summarize--">summarize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></dd>
@@ -493,7 +493,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockList">
 <li class="blockList">
 <h4>getErrorList</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4230">getErrorList</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4232">getErrorList</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#getErrorList--">getErrorList</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></dd>
@@ -506,7 +506,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockList">
 <li class="blockList">
 <h4>print</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4235">print</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;message)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4237">print</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;message)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#print-java.lang.String-">print</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></dd>
@@ -519,7 +519,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockList">
 <li class="blockList">
 <h4>tableHasErrors</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4242">tableHasErrors</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;table)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4244">tableHasErrors</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;table)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#tableHasErrors-org.apache.hadoop.hbase.util.HBaseFsck.TableInfo-">tableHasErrors</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></dd>
@@ -532,7 +532,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockList">
 <li class="blockList">
 <h4>resetErrors</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4247">resetErrors</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4249">resetErrors</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#resetErrors--">resetErrors</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></dd>
@@ -545,7 +545,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockList">
 <li class="blockList">
 <h4>detail</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4252">detail</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;message)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4254">detail</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;message)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#detail-java.lang.String-">detail</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></dd>
@@ -558,7 +558,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
 <ul class="blockListLast">
 <li class="blockList">
 <h4>progress</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4260">progress</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4262">progress</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#progress--">progress</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
index 6ecd507..747fe1a 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2956">HBaseFsck.TableInfo.HDFSIntegrityFixer</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2958">HBaseFsck.TableInfo.HDFSIntegrityFixer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo.IntegrityFixSuggester</a></pre>
 <div class="block">This handler fixes integrity errors from hdfs information.  There are
  basically three classes of integrity problems 1) holes, 2) overlaps, and
@@ -295,7 +295,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2957">conf</a></pre>
+<pre>org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2959">conf</a></pre>
 </li>
 </ul>
 <a name="fixOverlaps">
@@ -304,7 +304,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
 <ul class="blockListLast">
 <li class="blockList">
 <h4>fixOverlaps</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2959">fixOverlaps</a></pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2961">fixOverlaps</a></pre>
 </li>
 </ul>
 </li>
@@ -321,7 +321,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HDFSIntegrityFixer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2961">HDFSIntegrityFixer</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;ti,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2963">HDFSIntegrityFixer</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;ti,
                    <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a>&nbsp;errors,
                    org.apache.hadoop.conf.Configuration&nbsp;conf,
                    boolean&nbsp;fixHoles,
@@ -342,7 +342,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
 <ul class="blockList">
 <li class="blockList">
 <h4>handleRegionStartKeyNotEmpty</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2975">handleRegionStartKeyNotEmpty</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;next)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2977">handleRegionStartKeyNotEmpty</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;next)
                                   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">This is a special case hole -- when the first region of a table is
  missing from META, HBase doesn't acknowledge the existance of the
@@ -367,7 +367,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
 <ul class="blockList">
 <li class="blockList">
 <h4>handleRegionEndKeyNotEmpty</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2995">handleRegionEndKeyNotEmpty</a>(byte[]&nbsp;curEndKey)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2997">handleRegionEndKeyNotEmpty</a>(byte[]&nbsp;curEndKey)
                                 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="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandlerImpl.html#handleRegionEndKeyNotEmpty-byte:A-">TableIntegrityErrorHandlerImpl</a></code></span></div>
 <div class="block">Callback for handling case where a Table has a last region that does not
@@ -391,7 +391,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
 <ul class="blockList">
 <li class="blockList">
 <h4>handleHoleInRegionChain</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3017">handleHoleInRegionChain</a>(byte[]&nbsp;holeStartKey,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3019">handleHoleInRegionChain</a>(byte[]&nbsp;holeStartKey,
                                     byte[]&nbsp;holeStopKey)
                              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">There is a hole in the hdfs regions that violates the table integrity
@@ -415,7 +415,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
 <ul class="blockList">
 <li class="blockList">
 <h4>handleOverlapGroup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3047">handleOverlapGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;overlap)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3049">handleOverlapGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;overlap)
                         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">This takes set of overlapping regions and merges them into a single
  region.  This covers cases like degenerate regions, shared start key,
@@ -444,7 +444,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
 <ul class="blockList">
 <li class="blockList">
 <h4>removeParentsAndFixSplits</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3072">removeParentsAndFixSplits</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;overlap)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3074">removeParentsAndFixSplits</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;overlap)
                         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>
@@ -458,7 +458,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
 <ul class="blockList">
 <li class="blockList">
 <h4>mergeOverlaps</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3184">mergeOverlaps</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;overlap)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3186">mergeOverlaps</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;overlap)
             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>
@@ -472,7 +472,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
 <ul class="blockListLast">
 <li class="blockList">
 <h4>sidelineBigOverlaps</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3262">sidelineBigOverlaps</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;bigOverlap)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3264">sidelineBigOverlaps</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;bigOverlap)
                   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">Sideline some regions in a big overlap group so that it
  will have fewer regions, and it is easier to merge them later on.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
index 2855408..91b5d7d 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
@@ -126,7 +126,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2872">HBaseFsck.TableInfo.IntegrityFixSuggester</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2874">HBaseFsck.TableInfo.IntegrityFixSuggester</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandlerImpl.html" title="class in org.apache.hadoop.hbase.util.hbck">TableIntegrityErrorHandlerImpl</a></pre>
 </li>
 </ul>
@@ -267,7 +267,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrity
 <ul class="blockListLast">
 <li class="blockList">
 <h4>errors</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2873">errors</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2875">errors</a></pre>
 </li>
 </ul>
 </li>
@@ -284,7 +284,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrity
 <ul class="blockListLast">
 <li class="blockList">
 <h4>IntegrityFixSuggester</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2875">IntegrityFixSuggester</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;ti,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2877">IntegrityFixSuggester</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;ti,
                       <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a>&nbsp;errors)</pre>
 </li>
 </ul>
@@ -302,7 +302,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrity
 <ul class="blockList">
 <li class="blockList">
 <h4>handleRegionStartKeyNotEmpty</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2881">handleRegionStartKeyNotEmpty</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2883">handleRegionStartKeyNotEmpty</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi)
                                   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="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandlerImpl.html#handleRegionStartKeyNotEmpty-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">TableIntegrityErrorHandlerImpl</a></code></span></div>
 <div class="block">Callback for handling case where a Table has a first region that does not
@@ -327,7 +327,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrity
 <ul class="blockList">
 <li class="blockList">
 <h4>handleRegionEndKeyNotEmpty</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2889">handleRegionEndKeyNotEmpty</a>(byte[]&nbsp;curEndKey)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2891">handleRegionEndKeyNotEmpty</a>(byte[]&nbsp;curEndKey)
                                 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="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandlerImpl.html#handleRegionEndKeyNotEmpty-byte:A-">TableIntegrityErrorHandlerImpl</a></code></span></div>
 <div class="block">Callback for handling case where a Table has a last region that does not
@@ -351,7 +351,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrity
 <ul class="blockList">
 <li class="blockList">
 <h4>handleDegenerateRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2896">handleDegenerateRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2898">handleDegenerateRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi)
                             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="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandlerImpl.html#handleDegenerateRegion-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">TableIntegrityErrorHandlerImpl</a></code></span></div>
 <div class="block">Callback for handling a region that has the same start and end key.</div>
@@ -373,7 +373,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrity
 <ul class="blockList">
 <li class="blockList">
 <h4>handleDuplicateStartKeys</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2902">handleDuplicateStartKeys</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;r1,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2904">handleDuplicateStartKeys</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;r1,
                                      <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;r2)
                               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="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandlerImpl.html#handleDuplicateStartKeys-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">TableIntegrityErrorHandlerImpl</a></code></span></div>
@@ -398,7 +398,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrity
 <ul class="blockList">
 <li class="blockList">
 <h4>handleSplit</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2914">handleSplit</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;r1,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2916">handleSplit</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;r1,
                         <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;r2)
                  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="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandler.html#handleSplit-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">TableIntegrityErrorHandler</a></code></span></div>
@@ -419,7 +419,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrity
 <ul class="blockList">
 <li class="blockList">
 <h4>handleOverlapInRegionChain</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2926">handleOverlapInRegionChain</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi1,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2928">handleOverlapInRegionChain</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi1,
                                        <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hi2)
                                 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="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandlerImpl.html#handleOverlapInRegionChain-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">TableIntegrityErrorHandlerImpl</a></code></span></div>
@@ -446,7 +446,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrity
 <ul class="blockListLast">
 <li class="blockList">
 <h4>handleHoleInRegionChain</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2933">handleHoleInRegionChain</a>(byte[]&nbsp;holeStart,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2935">handleHoleInRegionChain</a>(byte[]&nbsp;holeStart,
                                     byte[]&nbsp;holeStop)
                              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="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandlerImpl.html#handleHoleInRegionChain-byte:A-byte:A-">TableIntegrityErrorHandlerImpl</a></code></span></div>


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/apidocs/index-all.html
----------------------------------------------------------------------
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index 6f7301a..cc74120 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -1534,6 +1534,14 @@
 <div class="block">Create a new table by cloning the snapshot content, but does not block
  and wait for it to be completely cloned.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Admin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema(TableName, TableName, boolean)</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></dt>
+<dd>
+<div class="block">Create a new table by cloning the existent table schema.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncAdmin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema(TableName, TableName, boolean)</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncAdmin.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdmin</a></dt>
+<dd>
+<div class="block">Create a new table by cloning the existent table schema.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellUtil.html#cloneTags-org.apache.hadoop.hbase.Cell-">cloneTags(Cell)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellUtil.html" title="class in org.apache.hadoop.hbase">CellUtil</a></dt>
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/apidocs/org/apache/hadoop/hbase/class-use/TableName.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/class-use/TableName.html b/apidocs/org/apache/hadoop/hbase/class-use/TableName.html
index b4ccfa8..7d05122 100644
--- a/apidocs/org/apache/hadoop/hbase/class-use/TableName.html
+++ b/apidocs/org/apache/hadoop/hbase/class-use/TableName.html
@@ -656,6 +656,22 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;newTableName,
+                boolean&nbsp;preserveSplits)</code>
+<div class="block">Create a new table by cloning the existent table schema.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AsyncAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;newTableName,
+                boolean&nbsp;preserveSplits)</code>
+<div class="block">Create a new table by cloning the existent table schema.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compact-org.apache.hadoop.hbase.TableName-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Compact a table.</div>
 </td>


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.AbortProcedureFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.AbortProcedureFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.AbortProcedureFuture.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.AbortProcedureFuture.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.AbortProcedureFuture.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.AddColumnFamilyFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.AddColumnFamilyFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.AddColumnFamilyFuture.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.AddColumnFamilyFuture.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.AddColumnFamilyFuture.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.CreateTableFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.CreateTableFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.CreateTableFuture.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.CreateTableFuture.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.CreateTableFuture.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.DeleteColumnFamilyFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.DeleteColumnFamilyFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.DeleteColumnFamilyFuture.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.DeleteColumnFamilyFuture.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.DeleteColumnFamilyFuture.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.DeleteTableFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.DeleteTableFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.DeleteTableFuture.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.DeleteTableFuture.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.DeleteTableFuture.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.DisableTableFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.DisableTableFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.DisableTableFuture.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.DisableTableFuture.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.DisableTableFuture.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.EnableTableFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.EnableTableFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.EnableTableFuture.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.EnableTableFuture.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.EnableTableFuture.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.MergeTableRegionsFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.MergeTableRegionsFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.MergeTableRegionsFuture.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.MergeTableRegionsFuture.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.MergeTableRegionsFuture.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ModifyColumnFamilyFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ModifyColumnFamilyFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ModifyColumnFamilyFuture.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ModifyColumnFamilyFuture.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ModifyColumnFamilyFuture.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ModifyTableFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ModifyTableFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ModifyTableFuture.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ModifyTableFuture.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ModifyTableFuture.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.NamespaceFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.NamespaceFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.NamespaceFuture.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.NamespaceFuture.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.NamespaceFuture.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ProcedureFuture.WaitForStateCallable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ProcedureFuture.WaitForStateCallable.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ProcedureFuture.WaitForStateCallable.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ProcedureFuture.WaitForStateCallable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ProcedureFuture.WaitForStateCallable.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ProcedureFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ProcedureFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ProcedureFuture.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ProcedureFuture.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ProcedureFuture.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ReplicationFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ReplicationFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ReplicationFuture.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ReplicationFuture.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ReplicationFuture.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.RestoreSnapshotFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.RestoreSnapshotFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.RestoreSnapshotFuture.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.RestoreSnapshotFuture.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.RestoreSnapshotFuture.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.SplitTableRegionFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.SplitTableRegionFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.SplitTableRegionFuture.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.SplitTableRegionFuture.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.SplitTableRegionFuture.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TableFuture.TableWaitForStateCallable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TableFuture.TableWaitForStateCallable.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TableFuture.TableWaitForStateCallable.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TableFuture.TableWaitForStateCallable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TableFuture.TableWaitForStateCallable.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TableFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TableFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TableFuture.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TableFuture.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TableFuture.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ThrowableAbortable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ThrowableAbortable.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ThrowableAbortable.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ThrowableAbortable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ThrowableAbortable.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TruncateTableFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TruncateTableFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TruncateTableFuture.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TruncateTableFuture.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TruncateTableFuture.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.html
index b862507..b6e7636 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.html
@@ -4235,7 +4235,22 @@
 <span class="sourceLineNo">4227</span>      }<a name="line.4227"></a>
 <span class="sourceLineNo">4228</span>    });<a name="line.4228"></a>
 <span class="sourceLineNo">4229</span>  }<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>}<a name="line.4230"></a>
+<span class="sourceLineNo">4230</span><a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>  @Override<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>  public void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>      final boolean preserveSplits) throws IOException {<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>    checkTableExists(tableName);<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span>    if (tableExists(newTableName)) {<a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>      throw new TableExistsException(newTableName);<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    }<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    TableDescriptor htd = TableDescriptorBuilder.copy(newTableName, getTableDescriptor(tableName));<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    if (preserveSplits) {<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>      createTable(htd, getTableSplits(tableName));<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    } else {<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>      createTable(htd);<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>    }<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>  }<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>}<a name="line.4245"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AdminRpcCall.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AdminRpcCall.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AdminRpcCall.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AdminRpcCall.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AdminRpcCall.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.Converter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.Converter.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.Converter.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.Converter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.Converter.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    } else if (recentlyModified) {<a nam

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    } else if (

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html b/devapidocs/src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html
index 1c73421..783dc34 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/thrift2/ThriftServer.html
@@ -31,115 +31,115 @@
 <span class="sourceLineNo">023</span>import java.net.InetSocketAddress;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.net.UnknownHostException;<a name="line.24"></a>
 <span class="sourceLineNo">025</span>import java.security.PrivilegedAction;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.List;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.Map;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.concurrent.ExecutorService;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.concurrent.LinkedBlockingQueue;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.SynchronousQueue;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.ThreadPoolExecutor;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.TimeUnit;<a name="line.32"></a>
-<span class="sourceLineNo">033</span><a name="line.33"></a>
-<span class="sourceLineNo">034</span>import javax.security.auth.callback.Callback;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import javax.security.auth.callback.UnsupportedCallbackException;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import javax.security.sasl.AuthorizeCallback;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import javax.security.sasl.SaslServer;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.conf.Configured;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.filter.ParseFilter;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.http.InfoServer;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.security.SaslUtil;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.security.SecurityUtil;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.thrift.CallQueue;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.thrift.THBaseThreadPoolExecutor;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.thrift.ThriftMetrics;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.thrift2.generated.THBaseService;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.JvmPauseMonitor;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.security.SaslRpcServer.SaslGssCallbackHandler;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.util.Tool;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.util.ToolRunner;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.thrift.TException;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.thrift.TProcessor;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.thrift.protocol.TBinaryProtocol;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.thrift.protocol.TCompactProtocol;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.thrift.protocol.TProtocol;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.thrift.protocol.TProtocolFactory;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.thrift.server.THsHaServer;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.thrift.server.TNonblockingServer;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.thrift.server.TServer;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.thrift.server.TThreadPoolServer;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.thrift.server.TThreadedSelectorServer;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.thrift.transport.TFramedTransport;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.thrift.transport.TNonblockingServerSocket;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.thrift.transport.TNonblockingServerTransport;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.thrift.transport.TSaslServerTransport;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.thrift.transport.TServerSocket;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.thrift.transport.TServerTransport;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.thrift.transport.TTransportException;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.thrift.transport.TTransportFactory;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.slf4j.Logger;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.slf4j.LoggerFactory;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLineParser;<a name="line.83"></a>
+<span class="sourceLineNo">026</span>import java.util.Map;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.concurrent.ExecutorService;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.concurrent.LinkedBlockingQueue;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.concurrent.SynchronousQueue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.ThreadPoolExecutor;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.TimeUnit;<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>import javax.security.auth.callback.Callback;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import javax.security.auth.callback.UnsupportedCallbackException;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import javax.security.sasl.AuthorizeCallback;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import javax.security.sasl.SaslServer;<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configured;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.filter.ParseFilter;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.http.InfoServer;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.security.SaslUtil;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.security.SecurityUtil;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.thrift.CallQueue;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.thrift.THBaseThreadPoolExecutor;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.thrift.ThriftMetrics;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.thrift2.generated.THBaseService;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.JvmPauseMonitor;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.security.SaslRpcServer.SaslGssCallbackHandler;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.util.Tool;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.util.ToolRunner;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.thrift.TException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.thrift.TProcessor;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.thrift.protocol.TBinaryProtocol;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.thrift.protocol.TCompactProtocol;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.thrift.protocol.TProtocol;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.thrift.protocol.TProtocolFactory;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.thrift.server.THsHaServer;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.thrift.server.TNonblockingServer;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.thrift.server.TServer;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.thrift.server.TThreadPoolServer;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.thrift.server.TThreadedSelectorServer;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.thrift.transport.TFramedTransport;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.thrift.transport.TNonblockingServerSocket;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.thrift.transport.TNonblockingServerTransport;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.thrift.transport.TSaslServerTransport;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.thrift.transport.TServerSocket;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.thrift.transport.TServerTransport;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.thrift.transport.TTransportException;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.thrift.transport.TTransportFactory;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.slf4j.Logger;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.slf4j.LoggerFactory;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLineParser;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.DefaultParser;<a name="line.83"></a>
 <span class="sourceLineNo">084</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.84"></a>
 <span class="sourceLineNo">085</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Option;<a name="line.85"></a>
 <span class="sourceLineNo">086</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.OptionGroup;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<a name="line.87"></a>
 <span class="sourceLineNo">088</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.ParseException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.PosixParser;<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>/**<a name="line.91"></a>
-<span class="sourceLineNo">092</span> * ThriftServer - this class starts up a Thrift server which implements the HBase API specified in<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * the HbaseClient.thrift IDL file.<a name="line.93"></a>
-<span class="sourceLineNo">094</span> */<a name="line.94"></a>
-<span class="sourceLineNo">095</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.95"></a>
-<span class="sourceLineNo">096</span>@SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.96"></a>
-<span class="sourceLineNo">097</span>public class ThriftServer extends Configured implements Tool {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private static final Logger log = LoggerFactory.getLogger(ThriftServer.class);<a name="line.98"></a>
-<span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>  /**<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   * Thrift quality of protection configuration key. Valid values can be:<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * privacy: authentication, integrity and confidentiality checking<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * integrity: authentication and integrity checking<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * authentication: authentication only<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   *<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   * This is used to authenticate the callers and support impersonation.<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * The thrift server and the HBase cluster must run in secure mode.<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   */<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  static final String THRIFT_QOP_KEY = "hbase.thrift.security.qop";<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  static final String BACKLOG_CONF_KEY = "hbase.regionserver.thrift.backlog";<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public static final int DEFAULT_LISTEN_PORT = 9090;<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  private static final String READ_TIMEOUT_OPTION = "readTimeout";<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * Amount of time in milliseconds before a server thread will timeout<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * waiting for client to send data on a connected socket. Currently,<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * applies only to TBoundedThreadPoolServer<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public static final String THRIFT_SERVER_SOCKET_READ_TIMEOUT_KEY =<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    "hbase.thrift.server.socket.read.timeout";<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  public static final int THRIFT_SERVER_SOCKET_READ_TIMEOUT_DEFAULT = 60000;<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public ThriftServer() {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private static void printUsage() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    HelpFormatter formatter = new HelpFormatter();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    formatter.printHelp("Thrift", null, getOptions(),<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        "To start the Thrift server run 'hbase-daemon.sh start thrift2'\n" +<a name="line.132"></a>
-<span class="sourceLineNo">133</span>            "To shutdown the thrift server run 'hbase-daemon.sh stop thrift2' or" +<a name="line.133"></a>
-<span class="sourceLineNo">134</span>            " send a kill signal to the thrift server pid",<a name="line.134"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>/**<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * ThriftServer - this class starts up a Thrift server which implements the HBase API specified in<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * the HbaseClient.thrift IDL file.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> */<a name="line.93"></a>
+<span class="sourceLineNo">094</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.94"></a>
+<span class="sourceLineNo">095</span>@SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.95"></a>
+<span class="sourceLineNo">096</span>public class ThriftServer extends Configured implements Tool {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  private static final Logger log = LoggerFactory.getLogger(ThriftServer.class);<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * Thrift quality of protection configuration key. Valid values can be:<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * privacy: authentication, integrity and confidentiality checking<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   * integrity: authentication and integrity checking<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   * authentication: authentication only<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   *<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * This is used to authenticate the callers and support impersonation.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * The thrift server and the HBase cluster must run in secure mode.<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   */<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  static final String THRIFT_QOP_KEY = "hbase.thrift.security.qop";<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  static final String BACKLOG_CONF_KEY = "hbase.regionserver.thrift.backlog";<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  public static final int DEFAULT_LISTEN_PORT = 9090;<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  private static final String READ_TIMEOUT_OPTION = "readTimeout";<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  /**<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * Amount of time in milliseconds before a server thread will timeout<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * waiting for client to send data on a connected socket. Currently,<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * applies only to TBoundedThreadPoolServer<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public static final String THRIFT_SERVER_SOCKET_READ_TIMEOUT_KEY =<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    "hbase.thrift.server.socket.read.timeout";<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  public static final int THRIFT_SERVER_SOCKET_READ_TIMEOUT_DEFAULT = 60000;<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public ThriftServer() {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  private static void printUsage() {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    HelpFormatter formatter = new HelpFormatter();<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    formatter.printHelp("Thrift", null, getOptions(),<a name="line.130"></a>
+<span class="sourceLineNo">131</span>        "To start the Thrift server run 'hbase-daemon.sh start thrift2' or " +<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        "'hbase thrift2'\n" +<a name="line.132"></a>
+<span class="sourceLineNo">133</span>        "To shutdown the thrift server run 'hbase-daemon.sh stop thrift2' or" +<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        " send a kill signal to the thrift server pid",<a name="line.134"></a>
 <span class="sourceLineNo">135</span>        true);<a name="line.135"></a>
 <span class="sourceLineNo">136</span>  }<a name="line.136"></a>
 <span class="sourceLineNo">137</span><a name="line.137"></a>
@@ -177,7 +177,7 @@
 <span class="sourceLineNo">169</span><a name="line.169"></a>
 <span class="sourceLineNo">170</span>  private static CommandLine parseArguments(Configuration conf, Options options, String[] args)<a name="line.170"></a>
 <span class="sourceLineNo">171</span>      throws ParseException, IOException {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    CommandLineParser parser = new PosixParser();<a name="line.172"></a>
+<span class="sourceLineNo">172</span>    CommandLineParser parser = new DefaultParser();<a name="line.172"></a>
 <span class="sourceLineNo">173</span>    return parser.parse(options, args);<a name="line.173"></a>
 <span class="sourceLineNo">174</span>  }<a name="line.174"></a>
 <span class="sourceLineNo">175</span><a name="line.175"></a>
@@ -396,251 +396,239 @@
 <span class="sourceLineNo">388</span>    int selectorThreads = 0;<a name="line.388"></a>
 <span class="sourceLineNo">389</span>    int maxCallQueueSize = -1; // use unbounded queue by default<a name="line.389"></a>
 <span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>    if (checkArguments(cmd)) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      return 1;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>    // Get address to bind<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    String bindAddress = getBindAddress(conf, cmd);<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>    // check if server should only process read requests, if so override the conf<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    if (cmd.hasOption("readonly")) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      conf.setBoolean("hbase.thrift.readonly", true);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      if (log.isDebugEnabled()) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        log.debug("readonly set to true");<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>    // Get read timeout<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    int readTimeout = getReadTimeout(conf, cmd);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    // Get port to bind to<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    int listenPort = getListenPort(conf, cmd);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    // Thrift's implementation uses '0' as a placeholder for 'use the default.'<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    int backlog = conf.getInt(BACKLOG_CONF_KEY, 0);<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>    // Local hostname and user name, used only if QOP is configured.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    String host = null;<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    String name = null;<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>    UserProvider userProvider = UserProvider.instantiate(conf);<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    // login the server principal (if using secure Hadoop)<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    boolean securityEnabled = userProvider.isHadoopSecurityEnabled()<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      &amp;&amp; userProvider.isHBaseSecurityEnabled();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    if (securityEnabled) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      host = Strings.domainNamePointerToHostName(DNS.getDefaultHost(<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        conf.get("hbase.thrift.dns.interface", "default"),<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        conf.get("hbase.thrift.dns.nameserver", "default")));<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      userProvider.login("hbase.thrift.keytab.file", "hbase.thrift.kerberos.principal", host);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    }<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    UserGroupInformation realUser = userProvider.getCurrent().getUGI();<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    String stringQop = conf.get(THRIFT_QOP_KEY);<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    SaslUtil.QualityOfProtection qop = null;<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (stringQop != null) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      qop = SaslUtil.getQop(stringQop);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      if (!securityEnabled) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>        throw new IOException("Thrift server must run in secure mode to support authentication");<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      // Extract the name from the principal<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      name = SecurityUtil.getUserFromPrincipal(conf.get("hbase.thrift.kerberos.principal"));<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    boolean nonblocking = cmd.hasOption("nonblocking");<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    boolean hsha = cmd.hasOption("hsha");<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    boolean selector = cmd.hasOption("selector");<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>    ThriftMetrics metrics = new ThriftMetrics(conf, ThriftMetrics.ThriftServerType.TWO);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    final JvmPauseMonitor pauseMonitor = new JvmPauseMonitor(conf, metrics.getSource());<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span>    String implType = getImplType(nonblocking, hsha, selector);<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>    conf.set("hbase.regionserver.thrift.server.type", implType);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    conf.setInt("hbase.regionserver.thrift.port", listenPort);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    registerFilters(conf);<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>    // Construct correct ProtocolFactory<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    boolean compact = cmd.hasOption("compact") ||<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        conf.getBoolean("hbase.regionserver.thrift.compact", false);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    TProtocolFactory protocolFactory = getTProtocolFactory(compact);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    final ThriftHBaseServiceHandler hbaseHandler =<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      new ThriftHBaseServiceHandler(conf, userProvider);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    THBaseService.Iface handler =<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      ThriftHBaseServiceHandler.newInstance(hbaseHandler, metrics);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    final THBaseService.Processor p = new THBaseService.Processor(handler);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    conf.setBoolean("hbase.regionserver.thrift.compact", compact);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    TProcessor processor = p;<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>    boolean framed = cmd.hasOption("framed") ||<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        conf.getBoolean("hbase.regionserver.thrift.framed", false) || nonblocking || hsha;<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    TTransportFactory transportFactory = getTTransportFactory(qop, name, host, framed,<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        conf.getInt("hbase.regionserver.thrift.framed.max_frame_size_in_mb", 2) * 1024 * 1024);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    InetSocketAddress inetSocketAddress = bindToPort(bindAddress, listenPort);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    conf.setBoolean("hbase.regionserver.thrift.framed", framed);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    if (qop != null) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      // Create a processor wrapper, to get the caller<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      processor = new TProcessor() {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        @Override<a name="line.474"></a>
-<span class="sourceLineNo">475</span>        public boolean process(TProtocol inProt,<a name="line.475"></a>
-<span class="sourceLineNo">476</span>            TProtocol outProt) throws TException {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>          TSaslServerTransport saslServerTransport =<a name="line.477"></a>
-<span class="sourceLineNo">478</span>            (TSaslServerTransport)inProt.getTransport();<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          SaslServer saslServer = saslServerTransport.getSaslServer();<a name="line.479"></a>
-<span class="sourceLineNo">480</span>          String principal = saslServer.getAuthorizationID();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          hbaseHandler.setEffectiveUser(principal);<a name="line.481"></a>
-<span class="sourceLineNo">482</span>          return p.process(inProt, outProt);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        }<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      };<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    }<a name="line.485"></a>
-<span class="sourceLineNo">486</span><a name="line.486"></a>
-<span class="sourceLineNo">487</span>    if (cmd.hasOption("w")) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      workerThreads = Integer.parseInt(cmd.getOptionValue("w"));<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (cmd.hasOption("s")) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      selectorThreads = Integer.parseInt(cmd.getOptionValue("s"));<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    if (cmd.hasOption("q")) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      maxCallQueueSize = Integer.parseInt(cmd.getOptionValue("q"));<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>    // check for user-defined info server port setting, if so override the conf<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    try {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      if (cmd.hasOption("infoport")) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>        String val = cmd.getOptionValue("infoport");<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        conf.setInt("hbase.thrift.info.port", Integer.parseInt(val));<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        log.debug("Web UI port set to " + val);<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    } catch (NumberFormatException e) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      log.error("Could not parse the value provided for the infoport option", e);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      printUsage();<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      System.exit(1);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    }<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>    // Put up info server.<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    startInfoServer(conf);<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span>    final TServer tserver = getServer(workerThreads, selectorThreads, maxCallQueueSize, readTimeout,<a name="line.513"></a>
-<span class="sourceLineNo">514</span>            backlog, nonblocking, hsha, selector, metrics, protocolFactory, processor,<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            transportFactory, inetSocketAddress);<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span>    realUser.doAs(<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      new PrivilegedAction&lt;Object&gt;() {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        @Override<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        public Object run() {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>          pauseMonitor.start();<a name="line.521"></a>
-<span class="sourceLineNo">522</span>          try {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>            tserver.serve();<a name="line.523"></a>
-<span class="sourceLineNo">524</span>            return null;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>          } finally {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>            pauseMonitor.stop();<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        }<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      });<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    // when tserver.stop eventually happens we'll get here.<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    return 0;<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>  private String getImplType(boolean nonblocking, boolean hsha, boolean selector) {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    String implType = "threadpool";<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span>    if (nonblocking) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      implType = "nonblocking";<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    } else if (hsha) {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      implType = "hsha";<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    } else if (selector) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      implType = "selector";<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>    return implType;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>  }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>  private boolean checkArguments(CommandLine cmd) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    /*<a name="line.549"></a>
-<span class="sourceLineNo">550</span>     * This is to please both bin/hbase and bin/hbase-daemon. hbase-daemon provides "start" and<a name="line.550"></a>
-<span class="sourceLineNo">551</span>     * "stop" arguments hbase should print the help if no argument is provided<a name="line.551"></a>
-<span class="sourceLineNo">552</span>     */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    List&lt;?&gt; argList = cmd.getArgList();<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    if (cmd.hasOption("help") || !argList.contains("start") || argList.contains("stop")) {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      printUsage();<a name="line.555"></a>
-<span class="sourceLineNo">556</span>      return true;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    return false;<a name="line.558"></a>
-<span class="sourceLineNo">559</span>  }<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>  private String getBindAddress(Configuration conf, CommandLine cmd) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    String bindAddress;<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    if (cmd.hasOption("bind")) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      bindAddress = cmd.getOptionValue("bind");<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      conf.set("hbase.thrift.info.bindAddress", bindAddress);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    } else {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      bindAddress = conf.get("hbase.thrift.info.bindAddress");<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    }<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    return bindAddress;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>  private int getListenPort(Configuration conf, CommandLine cmd) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    int listenPort;<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    try {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      if (cmd.hasOption("port")) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>        listenPort = Integer.parseInt(cmd.getOptionValue("port"));<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      } else {<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        listenPort = conf.getInt("hbase.regionserver.thrift.port", DEFAULT_LISTEN_PORT);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      }<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    } catch (NumberFormatException e) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      throw new RuntimeException("Could not parse the value provided for the port option", e);<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    }<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    return listenPort;<a name="line.583"></a>
-<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span>  private int getReadTimeout(Configuration conf, CommandLine cmd) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    int readTimeout;<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    if (cmd.hasOption(READ_TIMEOUT_OPTION)) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      try {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>        readTimeout = Integer.parseInt(cmd.getOptionValue(READ_TIMEOUT_OPTION));<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      } catch (NumberFormatException e) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        throw new RuntimeException("Could not parse the value provided for the timeout option", e);<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      }<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    } else {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      readTimeout = conf.getInt(THRIFT_SERVER_SOCKET_READ_TIMEOUT_KEY,<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        THRIFT_SERVER_SOCKET_READ_TIMEOUT_DEFAULT);<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    }<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    return readTimeout;<a name="line.598"></a>
+<span class="sourceLineNo">391</span>    if (cmd.hasOption("help")) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      printUsage();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      return 1;<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>    // Get address to bind<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    String bindAddress = getBindAddress(conf, cmd);<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>    // check if server should only process read requests, if so override the conf<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    if (cmd.hasOption("readonly")) {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      conf.setBoolean("hbase.thrift.readonly", true);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      if (log.isDebugEnabled()) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        log.debug("readonly set to true");<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      }<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    }<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>    // Get read timeout<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    int readTimeout = getReadTimeout(conf, cmd);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    // Get port to bind to<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    int listenPort = getListenPort(conf, cmd);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    // Thrift's implementation uses '0' as a placeholder for 'use the default.'<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    int backlog = conf.getInt(BACKLOG_CONF_KEY, 0);<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    // Local hostname and user name, used only if QOP is configured.<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    String host = null;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    String name = null;<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>    UserProvider userProvider = UserProvider.instantiate(conf);<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    // login the server principal (if using secure Hadoop)<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    boolean securityEnabled = userProvider.isHadoopSecurityEnabled()<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      &amp;&amp; userProvider.isHBaseSecurityEnabled();<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    if (securityEnabled) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      host = Strings.domainNamePointerToHostName(DNS.getDefaultHost(<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        conf.get("hbase.thrift.dns.interface", "default"),<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        conf.get("hbase.thrift.dns.nameserver", "default")));<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      userProvider.login("hbase.thrift.keytab.file", "hbase.thrift.kerberos.principal", host);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span>    UserGroupInformation realUser = userProvider.getCurrent().getUGI();<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    String stringQop = conf.get(THRIFT_QOP_KEY);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    SaslUtil.QualityOfProtection qop = null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    if (stringQop != null) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      qop = SaslUtil.getQop(stringQop);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      if (!securityEnabled) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>        throw new IOException("Thrift server must run in secure mode to support authentication");<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      }<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      // Extract the name from the principal<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      name = SecurityUtil.getUserFromPrincipal(conf.get("hbase.thrift.kerberos.principal"));<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>    boolean nonblocking = cmd.hasOption("nonblocking");<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    boolean hsha = cmd.hasOption("hsha");<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    boolean selector = cmd.hasOption("selector");<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>    ThriftMetrics metrics = new ThriftMetrics(conf, ThriftMetrics.ThriftServerType.TWO);<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    final JvmPauseMonitor pauseMonitor = new JvmPauseMonitor(conf, metrics.getSource());<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>    String implType = getImplType(nonblocking, hsha, selector);<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>    conf.set("hbase.regionserver.thrift.server.type", implType);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    conf.setInt("hbase.regionserver.thrift.port", listenPort);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    registerFilters(conf);<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span>    // Construct correct ProtocolFactory<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    boolean compact = cmd.hasOption("compact") ||<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        conf.getBoolean("hbase.regionserver.thrift.compact", false);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    TProtocolFactory protocolFactory = getTProtocolFactory(compact);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    final ThriftHBaseServiceHandler hbaseHandler =<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      new ThriftHBaseServiceHandler(conf, userProvider);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    THBaseService.Iface handler =<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      ThriftHBaseServiceHandler.newInstance(hbaseHandler, metrics);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    final THBaseService.Processor p = new THBaseService.Processor(handler);<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    conf.setBoolean("hbase.regionserver.thrift.compact", compact);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>    TProcessor processor = p;<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>    boolean framed = cmd.hasOption("framed") ||<a name="line.466"></a>
+<span class="sourceLineNo">467</span>        conf.getBoolean("hbase.regionserver.thrift.framed", false) || nonblocking || hsha;<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    TTransportFactory transportFactory = getTTransportFactory(qop, name, host, framed,<a name="line.468"></a>
+<span class="sourceLineNo">469</span>        conf.getInt("hbase.regionserver.thrift.framed.max_frame_size_in_mb", 2) * 1024 * 1024);<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    InetSocketAddress inetSocketAddress = bindToPort(bindAddress, listenPort);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    conf.setBoolean("hbase.regionserver.thrift.framed", framed);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    if (qop != null) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      // Create a processor wrapper, to get the caller<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      processor = new TProcessor() {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        @Override<a name="line.475"></a>
+<span class="sourceLineNo">476</span>        public boolean process(TProtocol inProt,<a name="line.476"></a>
+<span class="sourceLineNo">477</span>            TProtocol outProt) throws TException {<a name="line.477"></a>
+<span class="sourceLineNo">478</span>          TSaslServerTransport saslServerTransport =<a name="line.478"></a>
+<span class="sourceLineNo">479</span>            (TSaslServerTransport)inProt.getTransport();<a name="line.479"></a>
+<span class="sourceLineNo">480</span>          SaslServer saslServer = saslServerTransport.getSaslServer();<a name="line.480"></a>
+<span class="sourceLineNo">481</span>          String principal = saslServer.getAuthorizationID();<a name="line.481"></a>
+<span class="sourceLineNo">482</span>          hbaseHandler.setEffectiveUser(principal);<a name="line.482"></a>
+<span class="sourceLineNo">483</span>          return p.process(inProt, outProt);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        }<a name="line.484"></a>
+<span class="sourceLineNo">485</span>      };<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>    if (cmd.hasOption("w")) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      workerThreads = Integer.parseInt(cmd.getOptionValue("w"));<a name="line.489"></a>
+<span class="sourceLineNo">490</span>    }<a name="line.490"></a>
+<span class="sourceLineNo">491</span>    if (cmd.hasOption("s")) {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      selectorThreads = Integer.parseInt(cmd.getOptionValue("s"));<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    }<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    if (cmd.hasOption("q")) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      maxCallQueueSize = Integer.parseInt(cmd.getOptionValue("q"));<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span>    // check for user-defined info server port setting, if so override the conf<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    try {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      if (cmd.hasOption("infoport")) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>        String val = cmd.getOptionValue("infoport");<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        conf.setInt("hbase.thrift.info.port", Integer.parseInt(val));<a name="line.502"></a>
+<span class="sourceLineNo">503</span>        log.debug("Web UI port set to " + val);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    } catch (NumberFormatException e) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      log.error("Could not parse the value provided for the infoport option", e);<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      printUsage();<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      System.exit(1);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
+<span class="sourceLineNo">510</span><a name="line.510"></a>
+<span class="sourceLineNo">511</span>    // Put up info server.<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    startInfoServer(conf);<a name="line.512"></a>
+<span class="sourceLineNo">513</span><a name="line.513"></a>
+<span class="sourceLineNo">514</span>    final TServer tserver = getServer(workerThreads, selectorThreads, maxCallQueueSize, readTimeout,<a name="line.514"></a>
+<span class="sourceLineNo">515</span>            backlog, nonblocking, hsha, selector, metrics, protocolFactory, processor,<a name="line.515"></a>
+<span class="sourceLineNo">516</span>            transportFactory, inetSocketAddress);<a name="line.516"></a>
+<span class="sourceLineNo">517</span><a name="line.517"></a>
+<span class="sourceLineNo">518</span>    realUser.doAs(<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      new PrivilegedAction&lt;Object&gt;() {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        @Override<a name="line.520"></a>
+<span class="sourceLineNo">521</span>        public Object run() {<a name="line.521"></a>
+<span class="sourceLineNo">522</span>          pauseMonitor.start();<a name="line.522"></a>
+<span class="sourceLineNo">523</span>          try {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>            tserver.serve();<a name="line.524"></a>
+<span class="sourceLineNo">525</span>            return null;<a name="line.525"></a>
+<span class="sourceLineNo">526</span>          } finally {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>            pauseMonitor.stop();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>          }<a name="line.528"></a>
+<span class="sourceLineNo">529</span>        }<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      });<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    // when tserver.stop eventually happens we'll get here.<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    return 0;<a name="line.532"></a>
+<span class="sourceLineNo">533</span>  }<a name="line.533"></a>
+<span class="sourceLineNo">534</span><a name="line.534"></a>
+<span class="sourceLineNo">535</span>  private String getImplType(boolean nonblocking, boolean hsha, boolean selector) {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    String implType = "threadpool";<a name="line.536"></a>
+<span class="sourceLineNo">537</span><a name="line.537"></a>
+<span class="sourceLineNo">538</span>    if (nonblocking) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      implType = "nonblocking";<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    } else if (hsha) {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      implType = "hsha";<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    } else if (selector) {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      implType = "selector";<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span>    return implType;<a name="line.546"></a>
+<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
+<span class="sourceLineNo">548</span><a name="line.548"></a>
+<span class="sourceLineNo">549</span>  private String getBindAddress(Configuration conf, CommandLine cmd) {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    String bindAddress;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    if (cmd.hasOption("bind")) {<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      bindAddress = cmd.getOptionValue("bind");<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      conf.set("hbase.thrift.info.bindAddress", bindAddress);<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    } else {<a name="line.554"></a>
+<span class="sourceLineNo">555</span>      bindAddress = conf.get("hbase.thrift.info.bindAddress");<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    return bindAddress;<a name="line.557"></a>
+<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
+<span class="sourceLineNo">559</span><a name="line.559"></a>
+<span class="sourceLineNo">560</span>  private int getListenPort(Configuration conf, CommandLine cmd) {<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    int listenPort;<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    try {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      if (cmd.hasOption("port")) {<a name="line.563"></a>
+<span class="sourceLineNo">564</span>        listenPort = Integer.parseInt(cmd.getOptionValue("port"));<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      } else {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>        listenPort = conf.getInt("hbase.regionserver.thrift.port", DEFAULT_LISTEN_PORT);<a name="line.566"></a>
+<span class="sourceLineNo">567</span>      }<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    } catch (NumberFormatException e) {<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      throw new RuntimeException("Could not parse the value provided for the port option", e);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    }<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    return listenPort;<a name="line.571"></a>
+<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>  private int getReadTimeout(Configuration conf, CommandLine cmd) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    int readTimeout;<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    if (cmd.hasOption(READ_TIMEOUT_OPTION)) {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      try {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>        readTimeout = Integer.parseInt(cmd.getOptionValue(READ_TIMEOUT_OPTION));<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      } catch (NumberFormatException e) {<a name="line.579"></a>
+<span class="sourceLineNo">580</span>        throw new RuntimeException("Could not parse the value provided for the timeout option", e);<a name="line.580"></a>
+<span class="sourceLineNo">581</span>      }<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    } else {<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      readTimeout = conf.getInt(THRIFT_SERVER_SOCKET_READ_TIMEOUT_KEY,<a name="line.583"></a>
+<span class="sourceLineNo">584</span>        THRIFT_SERVER_SOCKET_READ_TIMEOUT_DEFAULT);<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    }<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    return readTimeout;<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  }<a name="line.587"></a>
+<span class="sourceLineNo">588</span><a name="line.588"></a>
+<span class="sourceLineNo">589</span>  private void startInfoServer(Configuration conf) throws IOException {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    int port = conf.getInt("hbase.thrift.info.port", 9095);<a name="line.590"></a>
+<span class="sourceLineNo">591</span><a name="line.591"></a>
+<span class="sourceLineNo">592</span>    if (port &gt;= 0) {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      conf.setLong("startcode", System.currentTimeMillis());<a name="line.593"></a>
+<span class="sourceLineNo">594</span>      String a = conf.get("hbase.thrift.info.bindAddress", "0.0.0.0");<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      InfoServer infoServer = new InfoServer("thrift", a, port, false, conf);<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      infoServer.setAttribute("hbase.conf", conf);<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      infoServer.start();<a name="line.597"></a>
+<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
 <span class="sourceLineNo">599</span>  }<a name="line.599"></a>
 <span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  private void startInfoServer(Configuration conf) throws IOException {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    int port = conf.getInt("hbase.thrift.info.port", 9095);<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    if (port &gt;= 0) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      conf.setLong("startcode", System.currentTimeMillis());<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      String a = conf.get("hbase.thrift.info.bindAddress", "0.0.0.0");<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      InfoServer infoServer = new InfoServer("thrift", a, port, false, conf);<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      infoServer.setAttribute("hbase.conf", conf);<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      infoServer.start();<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    }<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  private TServer getServer(int workerThreads, int selectorThreads, int maxCallQueueSize,<a name="line.613"></a>
-<span class="sourceLineNo">614</span>        int readTimeout, int backlog, boolean nonblocking, boolean hsha, boolean selector,<a name="line.614"></a>
-<span class="sourceLineNo">615</span>        ThriftMetrics metrics, TProtocolFactory protocolFactory, TProcessor processor,<a name="line.615"></a>
-<span class="sourceLineNo">616</span>        TTransportFactory transportFactory, InetSocketAddress inetSocketAddress)<a name="line.616"></a>
-<span class="sourceLineNo">617</span>          throws TTransportException {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    TServer server;<a name="line.618"></a>
-<span class="sourceLineNo">619</span><a name="line.619"></a>
-<span class="sourceLineNo">620</span>    if (nonblocking) {<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      server = getTNonBlockingServer(protocolFactory, processor, transportFactory,<a name="line.621"></a>
-<span class="sourceLineNo">622</span>              inetSocketAddress);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    } else if (hsha) {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>      server = getTHsHaServer(protocolFactory, processor, transportFactory, workerThreads,<a name="line.624"></a>
-<span class="sourceLineNo">625</span>              maxCallQueueSize, inetSocketAddress, metrics);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    } else if (selector) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      server = getTThreadedSelectorServer(protocolFactory, processor, transportFactory,<a name="line.627"></a>
-<span class="sourceLineNo">628</span>              workerThreads, selectorThreads, maxCallQueueSize, inetSocketAddress, metrics);<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    } else {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      server = getTThreadPoolServer(protocolFactory, processor, transportFactory, workerThreads,<a name="line.630"></a>
-<span class="sourceLineNo">631</span>              inetSocketAddress, backlog, readTimeout, metrics);<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    }<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    return server;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  }<a name="line.634"></a>
-<span class="sourceLineNo">635</span>}<a name="line.635"></a>
+<span class="sourceLineNo">601</span>  private TServer getServer(int workerThreads, int selectorThreads, int maxCallQueueSize,<a name="line.601"></a>
+<span class="sourceLineNo">602</span>        int readTimeout, int backlog, boolean nonblocking, boolean hsha, boolean selector,<a name="line.602"></a>
+<span class="sourceLineNo">603</span>        ThriftMetrics metrics, TProtocolFactory protocolFactory, TProcessor processor,<a name="line.603"></a>
+<span class="sourceLineNo">604</span>        TTransportFactory transportFactory, InetSocketAddress inetSocketAddress)<a name="line.604"></a>
+<span class="sourceLineNo">605</span>          throws TTransportException {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    TServer server;<a name="line.606"></a>
+<span class="sourceLineNo">607</span><a name="line.607"></a>
+<span class="sourceLineNo">608</span>    if (nonblocking) {<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      server = getTNonBlockingServer(protocolFactory, processor, transportFactory,<a name="line.609"></a>
+<span class="sourceLineNo">610</span>              inetSocketAddress);<a name="line.610"></a>
+<span class="sourceLineNo">611</span>    } else if (hsha) {<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      server = getTHsHaServer(protocolFactory, processor, transportFactory, workerThreads,<a name="line.612"></a>
+<span class="sourceLineNo">613</span>              maxCallQueueSize, inetSocketAddress, metrics);<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    } else if (selector) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>      server = getTThreadedSelectorServer(protocolFactory, processor, transportFactory,<a name="line.615"></a>
+<span class="sourceLineNo">616</span>              workerThreads, selectorThreads, maxCallQueueSize, inetSocketAddress, metrics);<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    } else {<a name="line.617"></a>
+<span class="sourceLineNo">618</span>      server = getTThreadPoolServer(protocolFactory, processor, transportFactory, workerThreads,<a name="line.618"></a>
+<span class="sourceLineNo">619</span>              inetSocketAddress, backlog, readTimeout, metrics);<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    }<a name="line.620"></a>
+<span class="sourceLineNo">621</span>    return server;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>  }<a name="line.622"></a>
+<span class="sourceLineNo">623</span>}<a name="line.623"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
index e6e43ee..a8b77ae 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
@@ -367,650 +367,650 @@
 <span class="sourceLineNo">359</span>    lock.lock();<a name="line.359"></a>
 <span class="sourceLineNo">360</span>    try {<a name="line.360"></a>
 <span class="sourceLineNo">361</span>      LOG.trace("Starting WAL Procedure Store lease recovery");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      FileStatus[] oldLogs = getLogFiles();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      while (isRunning()) {<a name="line.363"></a>
+<span class="sourceLineNo">362</span>      while (isRunning()) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        FileStatus[] oldLogs = getLogFiles();<a name="line.363"></a>
 <span class="sourceLineNo">364</span>        // Get Log-MaxID and recover lease on old logs<a name="line.364"></a>
 <span class="sourceLineNo">365</span>        try {<a name="line.365"></a>
 <span class="sourceLineNo">366</span>          flushLogId = initOldLogs(oldLogs);<a name="line.366"></a>
 <span class="sourceLineNo">367</span>        } catch (FileNotFoundException e) {<a name="line.367"></a>
 <span class="sourceLineNo">368</span>          LOG.warn("Someone else is active and deleted logs. retrying.", e);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          oldLogs = getLogFiles();<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          continue;<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>        // Create new state-log<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          // someone else has already created this log<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          LOG.debug("Someone else has already created log " + flushLogId);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          continue;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        }<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>        // We have the lease on the log<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        oldLogs = getLogFiles();<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          if (LOG.isDebugEnabled()) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>            LOG.debug("Someone else created new logs. Expected maxLogId &lt; " + flushLogId);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>          }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>          continue;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>        LOG.trace("Lease acquired for flushLogId={}", flushLogId);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        break;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      }<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    } finally {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      lock.unlock();<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><a name="line.397"></a>
-<span class="sourceLineNo">398</span>  @Override<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public void load(final ProcedureLoader loader) throws IOException {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    lock.lock();<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    try {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      if (logs.isEmpty()) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>      // Nothing to do, If we have only the current log.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      if (logs.size() == 1) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        LOG.trace("No state logs to replay.");<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        loader.setMaxProcId(0);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        return;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>      // Load the old logs<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      final Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      it.next(); // Skip the current log<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        @Override<a name="line.418"></a>
-<span class="sourceLineNo">419</span>        public void setMaxProcId(long maxProcId) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          loader.setMaxProcId(maxProcId);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>        @Override<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          loader.load(procIter);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>        @Override<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          loader.handleCorrupted(procIter);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        }<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span>        @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          if (corruptedLogs == null) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>          }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>          corruptedLogs.add(log);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          // TODO: sideline corrupted log<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      });<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    } finally {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      try {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        // try to cleanup inactive wals and complete the operation<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        buildHoldingCleanupTracker();<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        tryCleanupLogsOnLoad();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        loading.set(false);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      } finally {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        lock.unlock();<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>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  private void tryCleanupLogsOnLoad() {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    // nothing to cleanup.<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    if (logs.size() &lt;= 1) return;<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span>    // the config says to not cleanup wals on load.<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      return;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>    try {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      periodicRoll();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    } catch (IOException e) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>  }<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>  @Override<a name="line.472"></a>
-<span class="sourceLineNo">473</span>  public void insert(final Procedure proc, final Procedure[] subprocs) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    if (LOG.isTraceEnabled()) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    ByteSlot slot = acquireSlot();<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    try {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      // Serialize the insert<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      long[] subProcIds = null;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (subprocs != null) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>        subProcIds = new long[subprocs.length];<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      } else {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        assert !proc.hasParent();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>      // Push the transaction data and wait until it is persisted<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    } catch (IOException e) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      // We are not able to serialize the procedure.<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      // this is a code error, and we are not able to go on.<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.498"></a>
-<span class="sourceLineNo">499</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      throw new RuntimeException(e);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    } finally {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      releaseSlot(slot);<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>  @Override<a name="line.506"></a>
-<span class="sourceLineNo">507</span>  public void insert(final Procedure[] procs) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    if (LOG.isTraceEnabled()) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      LOG.trace("Insert " + Arrays.toString(procs));<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>    ByteSlot slot = acquireSlot();<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    try {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      // Serialize the insert<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      long[] procIds = new long[procs.length];<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        assert !procs[i].hasParent();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        procIds[i] = procs[i].getProcId();<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>      // Push the transaction data and wait until it is persisted<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    } catch (IOException e) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      // We are not able to serialize the procedure.<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      // this is a code error, and we are not able to go on.<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.527"></a>
-<span class="sourceLineNo">528</span>          Arrays.toString(procs), e);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      throw new RuntimeException(e);<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    } finally {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      releaseSlot(slot);<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    }<a name="line.532"></a>
-<span class="sourceLineNo">533</span>  }<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>  @Override<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  public void update(final Procedure proc) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    if (LOG.isTraceEnabled()) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      LOG.trace("Update " + proc);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    }<a name="line.539"></a>
-<span class="sourceLineNo">540</span><a name="line.540"></a>
-<span class="sourceLineNo">541</span>    ByteSlot slot = acquireSlot();<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    try {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      // Serialize the update<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>      // Push the transaction data and wait until it is persisted<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    } catch (IOException e) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      // We are not able to serialize the procedure.<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      // this is a code error, and we are not able to go on.<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      throw new RuntimeException(e);<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    } finally {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      releaseSlot(slot);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    }<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  }<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>  @Override<a name="line.558"></a>
-<span class="sourceLineNo">559</span>  public void delete(final long procId) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    if (LOG.isTraceEnabled()) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      LOG.trace("Delete " + procId);<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>    ByteSlot slot = acquireSlot();<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    try {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      // Serialize the delete<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>      // Push the transaction data and wait until it is persisted<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    } catch (IOException e) {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>      // We are not able to serialize the procedure.<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      // this is a code error, and we are not able to go on.<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      throw new RuntimeException(e);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    } finally {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      releaseSlot(slot);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    }<a name="line.578"></a>
-<span class="sourceLineNo">579</span>  }<a name="line.579"></a>
-<span class="sourceLineNo">580</span><a name="line.580"></a>
-<span class="sourceLineNo">581</span>  @Override<a name="line.581"></a>
-<span class="sourceLineNo">582</span>  public void delete(final Procedure proc, final long[] subProcIds) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    assert proc != null : "expected a non-null procedure";<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    if (LOG.isTraceEnabled()) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    }<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>    ByteSlot slot = acquireSlot();<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    try {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      // Serialize the delete<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>      // Push the transaction data and wait until it is persisted<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    } catch (IOException e) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      // We are not able to serialize the procedure.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      // this is a code error, and we are not able to go on.<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      throw new RuntimeException(e);<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    } finally {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      releaseSlot(slot);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>  }<a name="line.604"></a>
-<span class="sourceLineNo">605</span><a name="line.605"></a>
-<span class="sourceLineNo">606</span>  @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    if (count == 0) return;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      delete(procIds);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    } else if (count == 1) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      delete(procIds[offset]);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    } else {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    }<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>  private void delete(final long[] procIds) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if (LOG.isTraceEnabled()) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>    final ByteSlot slot = acquireSlot();<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    try {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      // Serialize the delete<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>      // Push the transaction data and wait until it is persisted<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    } catch (IOException e) {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      // We are not able to serialize the procedure.<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      // this is a code error, and we are not able to go on.<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      throw new RuntimeException(e);<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    } finally {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      releaseSlot(slot);<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    }<a name="line.639"></a>
-<span class="sourceLineNo">640</span>  }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>  private ByteSlot acquireSlot() {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    ByteSlot slot = slotsCache.poll();<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    return slot != null ? slot : new ByteSlot();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>  private void releaseSlot(final ByteSlot slot) {<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    slot.reset();<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    slotsCache.offer(slot);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>  }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.652"></a>
-<span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      final long procId, final long[] subProcIds) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    if (!isRunning()) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    if (logs.isEmpty()) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>    long logId = -1;<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    lock.lock();<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    try {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      // Wait for the sync to be completed<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      while (true) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        if (!isRunning()) {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>          throw new RuntimeException("store no longer running");<a name="line.669"></a>
-<span class="sourceLineNo">670</span>        } else if (isSyncAborted()) {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.671"></a>
-<span class="sourceLineNo">672</span>        } else if (inSync.get()) {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          syncCond.await();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>          slotCond.signal();<a name="line.675"></a>
-<span class="sourceLineNo">676</span>          syncCond.await();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>        } else {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>          break;<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        }<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      }<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>      final long pushSyncId = syncId.get();<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      slots[slotIndex++] = slot;<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      logId = flushLogId;<a name="line.685"></a>
-<span class="sourceLineNo">686</span><a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // Notify that there is new data<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      if (slotIndex == 1) {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        waitCond.signal();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      }<a name="line.690"></a>
-<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span>      // Notify that the slots are full<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      if (slotIndex == syncMaxSlot) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>        waitCond.signal();<a name="line.694"></a>
-<span class="sourceLineNo">695</span>        slotCond.signal();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>      }<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span>      while (pushSyncId == syncId.get() &amp;&amp; isRunning()) {<a name="line.698"></a>
-<span class="sourceLineNo">699</span>        syncCond.await();<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      }<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    } catch (InterruptedException e) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      Thread.currentThread().interrupt();<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      sendAbortProcessSignal();<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      throw new RuntimeException(e);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    } finally {<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      lock.unlock();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      if (isSyncAborted()) {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>        throw new RuntimeException("sync aborted", syncException.get());<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      }<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    }<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    return logId;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>  private void updateStoreTracker(final PushType type,<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      final long procId, final long[] subProcIds) {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    switch (type) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      case INSERT:<a name="line.717"></a>
-<span class="sourceLineNo">718</span>        if (subProcIds == null) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          storeTracker.insert(procId);<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        } else if (procId == Procedure.NO_PROC_ID) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          storeTracker.insert(subProcIds);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        } else {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          storeTracker.insert(procId, subProcIds);<a name="line.723"></a>
-<span class="sourceLineNo">724</span>          holdingCleanupTracker.setDeletedIfSet(procId);<a name="line.724"></a>
-<span class="sourceLineNo">725</span>        }<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        break;<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      case UPDATE:<a name="line.727"></a>
-<span class="sourceLineNo">728</span>        storeTracker.update(procId);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>        holdingCleanupTracker.setDeletedIfSet(procId);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        break;<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      case DELETE:<a name="line.731"></a>
-<span class="sourceLineNo">732</span>        if (subProcIds != null &amp;&amp; subProcIds.length &gt; 0) {<a name="line.732"></a>
-<span class="sourceLineNo">733</span>          storeTracker.delete(subProcIds);<a name="line.733"></a>
-<span class="sourceLineNo">734</span>          holdingCleanupTracker.setDeletedIfSet(subProcIds);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>        } else {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          storeTracker.delete(procId);<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          holdingCleanupTracker.setDeletedIfSet(procId);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>        }<a name="line.738"></a>
-<span class="sourceLineNo">739</span>        break;<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      default:<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        throw new RuntimeException("invalid push type " + type);<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    }<a name="line.742"></a>
-<span class="sourceLineNo">743</span>  }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span>  private boolean isSyncAborted() {<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    return syncException.get() != null;<a name="line.746"></a>
-<span class="sourceLineNo">747</span>  }<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span>  private void syncLoop() throws Throwable {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>    long totalSyncedToStore = 0;<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    inSync.set(false);<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    lock.lock();<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    try {<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      while (isRunning()) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>        try {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>          // Wait until new data is available<a name="line.756"></a>
-<span class="sourceLineNo">757</span>          if (slotIndex == 0) {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>            if (!loading.get()) {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>              periodicRoll();<a name="line.759"></a>
-<span class="sourceLineNo">760</span>            }<a name="line.760"></a>
-<span class="sourceLineNo">761</span><a name="line.761"></a>
-<span class="sourceLineNo">762</span>            if (LOG.isTraceEnabled()) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>              float rollTsSec = getMillisFromLastRoll() / 1000.0f;<a name="line.763"></a>
-<span class="sourceLineNo">764</span>              LOG.trace(String.format("Waiting for data. flushed=%s (%s/sec)",<a name="line.764"></a>
-<span class="sourceLineNo">765</span>                        StringUtils.humanSize(totalSynced.get()),<a name="line.765"></a>
-<span class="sourceLineNo">766</span>                        StringUtils.humanSize(totalSynced.get() / rollTsSec)));<a name="line.766"></a>
-<span class="sourceLineNo">767</span>            }<a name="line.767"></a>
-<span class="sourceLineNo">768</span><a name="line.768"></a>
-<span class="sourceLineNo">769</span>            waitCond.await(getMillisToNextPeriodicRoll(), TimeUnit.MILLISECONDS);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>            if (slotIndex == 0) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>              // no data.. probably a stop() or a periodic roll<a name="line.771"></a>
-<span class="sourceLineNo">772</span>              continue;<a name="line.772"></a>
-<span class="sourceLineNo">773</span>            }<a name="line.773"></a>
-<span class="sourceLineNo">774</span>          }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>          // Wait SYNC_WAIT_MSEC or the signal of "slots full" before flushing<a name="line.775"></a>
-<span class="sourceLineNo">776</span>          syncMaxSlot = runningProcCount;<a name="line.776"></a>
-<span class="sourceLineNo">777</span>          assert syncMaxSlot &gt; 0 : "unexpected syncMaxSlot=" + syncMaxSlot;<a name="line.777"></a>
-<span class="sourceLineNo">778</span>          final long syncWaitSt = System.currentTimeMillis();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>          if (slotIndex != syncMaxSlot) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>            slotCond.await(syncWaitMsec, TimeUnit.MILLISECONDS);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>          }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>          final long currentTs = System.currentTimeMillis();<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          final long syncWaitMs = currentTs - syncWaitSt;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>          final float rollSec = getMillisFromLastRoll() / 1000.0f;<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          final float syncedPerSec = totalSyncedToStore / rollSec;<a name="line.786"></a>
-<span class="sourceLineNo">787</span>          if (LOG.isTraceEnabled() &amp;&amp; (syncWaitMs &gt; 10 || slotIndex &lt; syncMaxSlot)) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>            LOG.trace(String.format("Sync wait %s, slotIndex=%s , totalSynced=%s (%s/sec)",<a name="line.788"></a>
-<span class="sourceLineNo">789</span>                      StringUtils.humanTimeDiff(syncWaitMs), slotIndex,<a name="line.789"></a>
-<span class="sourceLineNo">790</span>                      StringUtils.humanSize(totalSyncedToStore),<a name="line.790"></a>
-<span class="sourceLineNo">791</span>                      StringUtils.humanSize(syncedPerSec)));<a name="line.791"></a>
-<span class="sourceLineNo">792</span>          }<a name="line.792"></a>
-<span class="sourceLineNo">793</span><a name="line.793"></a>
-<span class="sourceLineNo">794</span>          // update webui circular buffers (TODO: get rid of allocations)<a name="line.794"></a>
-<span class="sourceLineNo">795</span>          final SyncMetrics syncMetrics = new SyncMetrics();<a name="line.795"></a>
-<span class="sourceLineNo">796</span>          syncMetrics.timestamp = currentTs;<a name="line.796"></a>
-<span class="sourceLineNo">797</span>          syncMetrics.syncWaitMs = syncWaitMs;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>          syncMetrics.syncedEntries = slotIndex;<a name="line.798"></a>
-<span class="sourceLineNo">799</span>          syncMetrics.totalSyncedBytes = totalSyncedToStore;<a name="line.799"></a>
-<span class="sourceLineNo">800</span>          syncMetrics.syncedPerSec = syncedPerSec;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>          syncMetricsQueue.add(syncMetrics);<a name="line.801"></a>
-<span class="sourceLineNo">802</span><a name="line.802"></a>
-<span class="sourceLineNo">803</span>          // sync<a name="line.803"></a>
-<span class="sourceLineNo">804</span>          inSync.set(true);<a name="line.804"></a>
-<span class="sourceLineNo">805</span>          long slotSize = syncSlots();<a name="line.805"></a>
-<span class="sourceLineNo">806</span>          logs.getLast().addToSize(slotSize);<a name="line.806"></a>
-<span class="sourceLineNo">807</span>          totalSyncedToStore = totalSynced.addAndGet(slotSize);<a name="line.807"></a>
-<span class="sourceLineNo">808</span>          slotIndex = 0;<a name="line.808"></a>
-<span class="sourceLineNo">809</span>          inSync.set(false);<a name="line.809"></a>
-<span class="sourceLineNo">810</span>          syncId.incrementAndGet();<a name="line.810"></a>
-<span class="sourceLineNo">811</span>        } catch (InterruptedException e) {<a name="line.811"></a>
-<span class="sourceLineNo">812</span>          Thread.currentThread().interrupt();<a name="line.812"></a>
-<span class="sourceLineNo">813</span>          syncException.compareAndSet(null, e);<a name="line.813"></a>
-<span class="sourceLineNo">814</span>          sendAbortProcessSignal();<a name="line.814"></a>
-<span class="sourceLineNo">815</span>          throw e;<a name="line.815"></a>
-<span class="sourceLineNo">816</span>        } catch (Throwable t) {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>          syncException.compareAndSet(null, t);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>          sendAbortProcessSignal();<a name="line.818"></a>
-<span class="sourceLineNo">819</span>          throw t;<a name="line.819"></a>
-<span class="sourceLineNo">820</span>        } finally {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>          syncCond.signalAll();<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        }<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      }<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    } finally {<a name="line.824"></a>
-<span class="sourceLineNo">825</span>      lock.unlock();<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>  }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
-<span class="sourceLineNo">829</span>  public ArrayList&lt;SyncMetrics&gt; getSyncMetrics() {<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    lock.lock();<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    try {<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      return new ArrayList&lt;&gt;(syncMetricsQueue);<a name="line.832"></a>
-<span class="sourceLineNo">833</span>    } finally {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>      lock.unlock();<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    }<a name="line.835"></a>
-<span class="sourceLineNo">836</span>  }<a name="line.836"></a>
-<span class="sourceLineNo">837</span><a name="line.837"></a>
-<span class="sourceLineNo">838</span>  private long syncSlots() throws Throwable {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    int retry = 0;<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    int logRolled = 0;<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    long totalSynced = 0;<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    do {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      try {<a name="line.843"></a>
-<span class="sourceLineNo">844</span>        totalSynced = syncSlots(stream, slots, 0, slotIndex);<a name="line.844"></a>
-<span class="sourceLineNo">845</span>        break;<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      } catch (Throwable e) {<a name="line.846"></a>
-<span class="sourceLineNo">847</span>        LOG.warn("unable to sync slots, retry=" + retry);<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        if (++retry &gt;= maxRetriesBeforeRoll) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>          if (logRolled &gt;= maxSyncFailureRoll &amp;&amp; isRunning()) {<a name="line.849"></a>
-<span class="sourceLineNo">850</span>            LOG.error("Sync slots after log roll failed, abort.", e);<a name="line.850"></a>
-<span class="sourceLineNo">851</span>            throw e;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>          }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>          if (!rollWriterWithRetries()) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>            throw e;<a name="line.855"></a>
-<span class="sourceLineNo">856</span>          }<a name="line.856"></a>
-<span class="sourceLineNo">857</span><a name="line.857"></a>
-<span class="sourceLineNo">858</span>          logRolled++;<a name="line.858"></a>
-<span class="sourceLineNo">859</span>          retry = 0;<a name="line.859"></a>
-<span class="sourceLineNo">860</span>        }<a name="line.860"></a>
-<span class="sourceLineNo">861</span>      }<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    } while (isRunning());<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    return totalSynced;<a name="line.863"></a>
-<span class="sourceLineNo">864</span>  }<a name="line.864"></a>
-<span class="sourceLineNo">865</span><a name="line.865"></a>
-<span class="sourceLineNo">866</span>  protected long syncSlots(final FSDataOutputStream stream, final ByteSlot[] slots,<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      final int offset, final int count) throws IOException {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    long totalSynced = 0;<a name="line.868"></a>
-<span class="sourceLineNo">869</span>    for (int i = 0; i &lt; count; ++i) {<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      final ByteSlot data = slots[offset + i];<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      data.writeTo(stream);<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      totalSynced += data.size();<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    }<a name="line.873"></a>
-<span class="sourceLineNo">874</span><a name="line.874"></a>
-<span class="sourceLineNo">875</span>    syncStream(stream);<a name="line.875"></a>
-<span class="sourceLineNo">876</span>    sendPostSyncSignal();<a name="line.876"></a>
-<span class="sourceLineNo">877</span><a name="line.877"></a>
-<span class="sourceLineNo">878</span>    if (LOG.isTraceEnabled()) {<a name="line.878"></a>
-<span class="sourceLineNo">879</span>      LOG.trace("Sync slots=" + count + '/' + syncMaxSlot +<a name="line.879"></a>
-<span class="sourceLineNo">880</span>                ", flushed=" + StringUtils.humanSize(totalSynced));<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    }<a name="line.881"></a>
-<span class="sourceLineNo">882</span>    return totalSynced;<a name="line.882"></a>
-<span class="sourceLineNo">883</span>  }<a name="line.883"></a>
-<span class="sourceLineNo">884</span><a name="line.884"></a>
-<span class="sourceLineNo">885</span>  protected void syncStream(final FSDataOutputStream stream) throws IOException {<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    if (useHsync) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      stream.hsync();<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    } else {<a name="line.888"></a>
-<span class="sourceLineNo">889</span>      stream.hflush();<a name="line.889"></a>
-<span class="sourceLineNo">890</span>    }<a name="line.890"></a>
-<span class="sourceLineNo">891</span>  }<a name="line.891"></a>
-<span class="sourceLineNo">892</span><a name="line.892"></a>
-<span class="sourceLineNo">893</span>  private boolean rollWriterWithRetries() {<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    for (int i = 0; i &lt; rollRetries &amp;&amp; isRunning(); ++i) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>      if (i &gt; 0) Threads.sleepWithoutInterrupt(waitBeforeRoll * i);<a name="line.895"></a>
-<span class="sourceLineNo">896</span><a name="line.896"></a>
-<span class="sourceLineNo">897</span>      try {<a name="line.897"></a>
-<span class="sourceLineNo">898</span>        if (rollWriter()) {<a name="line.898"></a>
-<span class="sourceLineNo">899</span>          return true;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>        }<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      } catch (IOException e) {<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        LOG.warn("Unable to roll the log, attempt=" + (i + 1), e);<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      }<a name="line.903"></a>
-<span class="sourceLineNo">904</span>    }<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    LOG.error(HBaseMarkers.FATAL, "Unable to roll the log");<a name="line.905"></a>
-<span class="sourceLineNo">906</span>    return false;<a name="line.906"></a>
-<span class="sourceLineNo">907</span>  }<a name="line.907"></a>
-<span class="sourceLineNo">908</span><a name="line.908"></a>
-<span class="sourceLineNo">909</span>  private boolean tryRollWriter() {<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    try {<a name="line.910"></a>
-<span class="sourceLineNo">911</span>      return rollWriter();<a name="line.911"></a>
-<span class="sourceLineNo">912</span>    } catch (IOException e) {<a name="line.912"></a>
-<span class="sourceLineNo">913</span>      LOG.warn("Unable to roll the log", e);<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      return false;<a name="line.914"></a>
-<span class="sourceLineNo">915</span>    }<a name="line.915"></a>
-<span class="sourceLineNo">916</span>  }<a name="line.916"></a>
-<span class="sourceLineNo">917</span><a name="line.917"></a>
-<span class="sourceLineNo">918</span>  public long getMillisToNextPeriodicRoll() {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    if (lastRollTs.get() &gt; 0 &amp;&amp; periodicRollMsec &gt; 0) {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      return periodicRollMsec - getMillisFromLastRoll();<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    }<a name="line.921"></a>
-<span class="sourceLineNo">922</span>    return Long.MAX_VALUE;<a name="line.922"></a>
-<span class="sourceLineNo">923</span>  }<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span>  public long getMillisFromLastRoll() {<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    return (System.currentTimeMillis() - lastRollTs.get());<a name="line.926"></a>
-<span class="sourceLineNo">927</span>  }<a name="line.927"></a>
-<span class="sourceLineNo">928</span><a name="line.928"></a>
-<span class="sourceLineNo">929</span>  @VisibleForTesting<a name="line.929"></a>
-<span class="sourceLineNo">930</span>  protected void periodicRollForTesting() throws IOException {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    lock.lock();<a name="line.931"></a>
-<span class="sourceLineNo">932</span>    try {<a name="line.932"></a>
-<span class="sourceLineNo">933</span>      periodicRoll();<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    } finally {<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      lock.unlock();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    }<a name="line.936"></a>
-<span class="sourceLineNo">937</span>  }<a name="line.937"></a>
-<span class="sourceLineNo">938</span><a name="line.938"></a>
-<span class="sourceLineNo">939</span>  @VisibleForTesting<a name="line.939"></a>
-<span class="sourceLineNo">940</span>  protected boolean rollWriterForTesting() throws IOException {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    lock.lock();<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    try {<a name="line.942"></a>
-<span class="sourceLineNo">943</span>      return rollWriter();<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    } finally {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>      lock.unlock();<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    }<a name="line.946"></a>
-<span class="sourceLineNo">947</span>  }<a name="line.947"></a>
-<span class="sourceLineNo">948</span><a name="line.948"></a>
-<span class="sourceLineNo">949</span>  @VisibleForTesting<a name="line.949"></a>
-<span class="sourceLineNo">950</span>  protected void removeInactiveLogsForTesting() throws Exception {<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    lock.lock();<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    try {<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      removeInactiveLogs();<a name="line.953"></a>
-<span class="sourceLineNo">954</span>    } finally  {<a name="line.954"></a>
-<span class="sourceLineNo">955</span>      lock.unlock();<a name="line.955"></a>
-<span class="sourceLineNo">956</span>    }<a name="line.956"></a>
-<span class="sourceLineNo">957</span>  }<a name="line.957"></a>
-<span class="sourceLineNo">958</span><a name="line.958"></a>
-<span class="sourceLineNo">959</span>  private void periodicRoll() throws IOException {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    if (storeTracker.isEmpty()) {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      if (LOG.isTraceEnabled()) {<a name="line.961"></a>
-<span class="sourceLineNo">962</span>        LOG.trace("no active procedures");<a name="line.962"></a>
-<span class="sourceLineNo">963</span>      }<a name="line.963"></a>
-<span class="sourceLineNo">964</span>      tryRollWriter();<a name="line.964"></a>
-<span class="sourceLineNo">965</span>      removeAllLogs(flushLogId - 1);<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    } else {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>      if (storeTracker.isUpdated()) {<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        if (LOG.isTraceEnabled()) {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          LOG.trace("all the active procedures are in the latest log");<a name="line.969"></a>
-<span class="sourceLineNo">970</span>        }<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        removeAllLogs(flushLogId - 1);<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      }<a name="line.972"></a>
-<span class="sourceLineNo">973</span><a name="line.973"></a>
-<span class="sourceLineNo">974</span>      // if the log size has exceeded the roll threshold<a name="line.974"></a>
-<span class="sourceLineNo">975</span>      // or the periodic roll timeout is expired, try to roll the wal.<a name="line.975"></a>
-<span class="sourceLineNo">976</span>      if (totalSynced.get() &gt; rollThreshold || getMillisToNextPeriodicRoll() &lt;= 0) {<a name="line.976"></a>
-<span class="sourceLineNo">977</span>        tryRollWriter();<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      }<a name="line.978"></a>
-<span class="sourceLineNo">979</span><a name="line.979"></a>
-<span class="sourceLineNo">980</span>      removeInactiveLogs();<a name="line.980"></a>
-<span class="sourceLineNo">981</span>    }<a name="line.981"></a>
-<span class="sourceLineNo">982</span>  }<a name="line.982"></a>
-<span class="sourceLineNo">983</span><a name="line.983"></a>
-<span class="sourceLineNo">984</span>  private boolean rollWriter() throws IOException {<a name="line.984"></a>
-<span class="sourceLineNo">985</span>    if (!isRunning()) return false;<a name="line.985"></a>
-<span class="sourceLineNo">986</span><a name="line.986"></a>
-<span class="sourceLineNo">987</span>    // Create new state-log<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    if (!rollWriter(flushLogId + 1)) {<a name="line.988"></a>
-<span class="sourceLineNo">989</span>      LOG.warn("someone else has already created log " + flushLogId);<a name="line.989"></a>
-<span class="sourceLineNo">990</span>      return false;<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    }<a name="line.991"></a>
-<span class="sourceLineNo">992</span><a name="line.992"></a>
-<span class="sourceLineNo">993</span>    // We have the lease on the log,<a name="line.993"></a>
-<span class="sourceLineNo">994</span>    // but we should check if someone else has created new files<a name="line.994"></a>
-<span class="sourceLineNo">995</span>    if (getMaxLogId(getLogFiles()) &gt; flushLogId) {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>      LOG.warn("Someone else created new logs. Expected maxLogId &lt; " + flushLogId);<a name="line.996"></a>
-<span class="sourceLineNo">997</span>      logs.getLast().removeFile(this.walArchiveDir);<a name="line.997"></a>
-<span class="sourceLineNo">998</span>      return false;<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    }<a name="line.999"></a>
-<span class="sourceLineNo">1000</span><a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    // We have the lease on the log<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>    return true;<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>  }<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span><a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>  private boolean rollWriter(final long logId) throws IOException {<a name="line.1005"></a>
+<span class="sourceLineNo">369</span>          continue;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>        // Create new state-log<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>          // someone else has already created this log<a name="line.374"></a>
+<span class="sourceLineNo">375</span>          LOG.debug("Someone else has already created log {}. Retrying.", flushLogId);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>          continue;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>        // We have the lease on the log<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        oldLogs = getLogFiles();<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          if (LOG.isDebugEnabled()) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            LOG.debug("Someone else created new logs. Expected maxLogId &lt; " + flushLogId);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          continue;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span>        LOG.trace("Lease acquired for flushLogId={}", flushLogId);<a name="line.389"></a>
+<span class="sourceLineNo">390</span>        break;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      }<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    } finally {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      lock.unlock();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  public void load(final ProcedureLoader loader) throws IOException {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    lock.lock();<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      if (logs.isEmpty()) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>      // Nothing to do, If we have only the current log.<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (logs.size() == 1) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        LOG.trace("No state logs to replay.");<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        loader.setMaxProcId(0);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        return;<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      }<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span>      // Load the old logs<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      final Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      it.next(); // Skip the current log<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        @Override<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        public void setMaxProcId(long maxProcId) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          loader.setMaxProcId(maxProcId);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>        @Override<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>          loader.load(procIter);<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        }<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span>        @Override<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          loader.handleCorrupted(procIter);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        }<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>        @Override<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          if (corruptedLogs == null) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          }<a name="line.436"></a>
+<span class="sourceLineNo">437</span>          corruptedLogs.add(log);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>          // TODO: sideline corrupted log<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        }<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      });<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    } finally {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      try {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        // try to cleanup inactive wals and complete the operation<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        buildHoldingCleanupTracker();<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        tryCleanupLogsOnLoad();<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        loading.set(false);<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      } finally {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        lock.unlock();<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><a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private void tryCleanupLogsOnLoad() {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    // nothing to cleanup.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    if (logs.size() &lt;= 1) return;<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span>    // the config says to not cleanup wals on load.<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      return;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
+<span class="sourceLineNo">463</span><a name="line.463"></a>
+<span class="sourceLineNo">464</span>    try {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      periodicRoll();<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    } catch (IOException e) {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    }<a name="line.468"></a>
+<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
+<span class="sourceLineNo">470</span><a name="line.470"></a>
+<span class="sourceLineNo">471</span>  @Override<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  public void insert(final Procedure proc, final Procedure[] subprocs) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    if (LOG.isTraceEnabled()) {<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
+<span class="sourceLineNo">476</span><a name="line.476"></a>
+<span class="sourceLineNo">477</span>    ByteSlot slot = acquireSlot();<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    try {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>      // Serialize the insert<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      long[] subProcIds = null;<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      if (subprocs != null) {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        subProcIds = new long[subprocs.length];<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        }<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      } else {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        assert !proc.hasParent();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      }<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>      // Push the transaction data and wait until it is persisted<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    } catch (IOException e) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      // We are not able to serialize the procedure.<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      // this is a code error, and we are not able to go on.<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.497"></a>
+<span class="sourceLineNo">498</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      throw new RuntimeException(e);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>    } finally {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      releaseSlot(slot);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
+<span class="sourceLineNo">503</span>  }<a name="line.503"></a>
+<span class="sourceLineNo">504</span><a name="line.504"></a>
+<span class="sourceLineNo">505</span>  @Override<a name="line.505"></a>
+<span class="sourceLineNo">506</span>  public void insert(final Procedure[] procs) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    if (LOG.isTraceEnabled()) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      LOG.trace("Insert " + Arrays.toString(procs));<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
+<span class="sourceLineNo">510</span><a name="line.510"></a>
+<span class="sourceLineNo">511</span>    ByteSlot slot = acquireSlot();<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    try {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      // Serialize the insert<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      long[] procIds = new long[procs.length];<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        assert !procs[i].hasParent();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        procIds[i] = procs[i].getProcId();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      }<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>      // Push the transaction data and wait until it is persisted<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    } catch (IOException e) {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      // We are not able to serialize the procedure.<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      // this is a code error, and we are not able to go on.<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.526"></a>
+<span class="sourceLineNo">527</span>          Arrays.toString(procs), e);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      throw new RuntimeException(e);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    } finally {<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      releaseSlot(slot);<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span>  }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>  @Override<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  public void update(final Procedure proc) {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    if (LOG.isTraceEnabled()) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      LOG.trace("Update " + proc);<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    }<a name="line.538"></a>
+<span class="sourceLineNo">539</span><a name="line.539"></a>
+<span class="sourceLineNo">540</span>    ByteSlot slot = acquireSlot();<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    try {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      // Serialize the update<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.543"></a>
+<span class="sourceLineNo">544</span><a name="line.544"></a>
+<span class="sourceLineNo">545</span>      // Push the transaction data and wait until it is persisted<a name="line.545"></a>
+<span class="sourceLineNo">546</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    } catch (IOException e) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      // We are not able to serialize the procedure.<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      // this is a code error, and we are not able to go on.<a name="line.549"></a>
+<span class="sourceLineNo">550</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      throw new RuntimeException(e);<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    } finally {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      releaseSlot(slot);<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span>  @Override<a name="line.557"></a>
+<span class="sourceLineNo">558</span>  public void delete(final long procId) {<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    if (LOG.isTraceEnabled()) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      LOG.trace("Delete " + procId);<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    ByteSlot slot = acquireSlot();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      // Serialize the delete<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.566"></a>
+<span class="sourceLineNo">567</span><a name="line.567"></a>
+<span class="sourceLineNo">568</span>      // Push the transaction data and wait until it is persisted<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    } catch (IOException e) {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      // We are not able to serialize the procedure.<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      // this is a code error, and we are not able to go on.<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.573"></a>
+<span class="sourceLineNo">574</span>      throw new RuntimeException(e);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    } finally {<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      releaseSlot(slot);<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
+<span class="sourceLineNo">579</span><a name="line.579"></a>
+<span class="sourceLineNo">580</span>  @Override<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  public void delete(final Procedure proc, final long[] subProcIds) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    assert proc != null : "expected a non-null procedure";<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    if (LOG.isTraceEnabled()) {<a name="line.584"></a>
+<span class="sourceLineNo">585</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    }<a name="line.586"></a>
+<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">588</span>    ByteSlot slot = acquireSlot();<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    try {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>      // Serialize the delete<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>      // Push the transaction data and wait until it is persisted<a name="line.593"></a>
+<span class="sourceLineNo">594</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>    } catch (IOException e) {<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      // We are not able to serialize the procedure.<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      // this is a code error, and we are not able to go on.<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      throw new RuntimeException(e);<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    } finally {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      releaseSlot(slot);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    }<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  }<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span>  @Override<a name="line.605"></a>
+<span class="sourceLineNo">606</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    if (count == 0) return;<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      delete(procIds);<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    } else if (count == 1) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      delete(procIds[offset]);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    } else {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
+<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>  private void delete(final long[] procIds) {<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    if (LOG.isTraceEnabled()) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    }<a name="line.620"></a>
+<span class="sourceLineNo">621</span><a name="line.621"></a>
+<span class="sourceLineNo">622</span>    final ByteSlot slot = acquireSlot();<a name="line.622"></a>
+<span class="sourceLineNo">623</span>    try {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>      // Serialize the delete<a name="line.624"></a>
+<span class="sourceLineNo">625</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      }<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span>      // Push the transaction data and wait until it is persisted<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    } catch (IOException e) {<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      // We are not able to serialize the procedure.<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      // this is a code error, and we are not able to go on.<a name="line.633"></a>
+<span class="sourceLineNo">634</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      throw new RuntimeException(e);<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    } finally {<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      releaseSlot(slot);<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    }<a name="line.638"></a>
+<span class="sourceLineNo">639</span>  }<a name="line.639"></a>
+<span class="sourceLineNo">640</span><a name="line.640"></a>
+<span class="sourceLineNo">641</span>  private ByteSlot acquireSlot() {<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    ByteSlot slot = slotsCache.poll();<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    return slot != null ? slot : new ByteSlot();<a name="line.643"></a>
+<span class="sourceLineNo">644</span>  }<a name="line.644"></a>
+<span class="sourceLineNo">645</span><a name="line.645"></a>
+<span class="sourceLineNo">646</span>  private void releaseSlot(final ByteSlot slot) {<a name="line.646"></a>
+<span class="sourceLineNo">647</span>    slot.reset();<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    slotsCache.offer(slot);<a name="line.648"></a>
+<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.651"></a>
+<span class="sourceLineNo">652</span><a name="line.652"></a>
+<span class="sourceLineNo">653</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      final long procId, final long[] subProcIds) {<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    if (!isRunning()) {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.656"></a>
+<span class="sourceLineNo">657</span>    }<a name="line.657"></a>
+<span class="sourceLineNo">658</span>    if (logs.isEmpty()) {<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.659"></a>
+<span class="sourceLineNo">660</span>    }<a name="line.660"></a>
+<span class="sourceLineNo">661</span><a name="line.661"></a>
+<span class="sourceLineNo">662</span>    long logId = -1;<a name="line.662"></a>
+<span class="sourceLineNo">663</span>    lock.lock();<a name="line.663"></a>
+<span class="sourceLineNo">664</span>    try {<a name="line.664"></a>
+<span class="sourceLineNo">665</span>      // Wait for the sync to be completed<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      while (true) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>        if (!isRunning()) {<a name="line.667"></a>
+<span class="sourceLineNo">668</span>          throw new RuntimeException("store no longer running");<a name="line.668"></a>
+<span class="sourceLineNo">669</span>        } else if (isSyncAborted()) {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.670"></a>
+<span class="sourceLineNo">671</span>        } else if (inSync.get()) {<a name="line.671"></a>
+<span class="sourceLineNo">672</span>          syncCond.await();<a name="line.672"></a>
+<span class="sourceLineNo">673</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>          slotCond.signal();<a name="line.674"></a>
+<span class="sourceLineNo">675</span>          syncCond.await();<a name="line.675"></a>
+<span class="sourceLineNo">676</span>        } else {<a name="line.676"></a>
+<span class="sourceLineNo">677</span>          break;<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        }<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      }<a name="line.679"></a>
+<span class="sourceLineNo">680</span><a name="line.680"></a>
+<span class="sourceLineNo">681</span>      final long pushSyncId = syncId.get();<a name="line.681"></a>
+<span class="sourceLineNo">682</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      slots[slotIndex++] = slot;<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      logId = flushLogId;<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>      // Notify that there is new data<a name="line.686"></a>
+<span cl

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
index db470db..ee6c19d 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
@@ -2761,44 +2761,78 @@ service.</div>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;newTableName,
+                boolean&nbsp;preserveSplits)</code>
+<div class="block">Create a new table by cloning the existent table schema.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">RawAsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;newTableName,
+                boolean&nbsp;preserveSplits)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;newTableName,
+                boolean&nbsp;preserveSplits)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;newTableName,
+                boolean&nbsp;preserveSplits)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AsyncAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;newTableName,
+                boolean&nbsp;preserveSplits)</code>
+<div class="block">Create a new table by cloning the existent table schema.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compact-org.apache.hadoop.hbase.TableName-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compact-org.apache.hadoop.hbase.TableName-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily)</code>
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily)</code>
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily)</code>
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">RawAsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-boolean-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily,
@@ -2807,7 +2841,7 @@ service.</div>
 <div class="block">Compact column family of a table, Asynchronous operation even if CompletableFuture.get()</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-boolean-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily,
@@ -2816,7 +2850,7 @@ service.</div>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily,
@@ -2824,19 +2858,19 @@ service.</div>
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">RawAsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily,
        <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily,
        <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily,
@@ -2844,7 +2878,7 @@ service.</div>
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily,
@@ -2852,64 +2886,64 @@ service.</div>
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compact-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">RawAsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compact-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">RawAsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#compareTableWithPeerCluster-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-org.apache.hadoop.hbase.replication.ReplicationPeerDescription-org.apache.hadoop.hbase.client.AsyncAdmin-">compareTableWithPeerCluster</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                            <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDesc,
                            <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&nbsp;peer,
                            <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdmin</a>&nbsp;peerAdmin)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncNonMetaRegionLocator.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#complete-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.LocateRequest-org.apache.hadoop.hbase.HRegionLocation-java.lang.Throwable-">complete</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
         <a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req,
         <a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;loc,
         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/client/TableState.html" title="class in org.apache.hadoop.hbase.client">TableState</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TableState.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableState.html#convert-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.TableState-">convert</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.TableState&nbsp;tableState)</code>
 <div class="block">Covert from PB version of TableState</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TableDescriptorBuilder.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#copy-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-">copy</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name,
     <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/MultiServerCallable.html" title="class in org.apache.hadoop.hbase.client">MultiServerCallable</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncRequestFutureImpl.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.html#createCallable-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.MultiAction-">createCallable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server,
               <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -2917,13 +2951,13 @@ service.</div>
 <div class="block">Create a callable.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
 <td class="colLast"><span class="typeNameLabel">RegionInfo.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html#createMobRegionInfo-org.apache.hadoop.hbase.TableName-">createMobRegionInfo</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Creates a RegionInfo object for MOB data.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionInfo.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html#createRegionName-org.apache.hadoop.hbase.TableName-byte:A-byte:A-boolean-">createRegionName</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 byte[]&nbsp;startKey,
@@ -2932,7 +2966,7 @@ service.</div>
 <div class="block">Make a region name of passed parameters.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionInfo.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html#createRegionName-org.apache.hadoop.hbase.TableName-byte:A-byte:A-int-boolean-">createRegionName</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 byte[]&nbsp;startKey,
@@ -2942,7 +2976,7 @@ service.</div>
 <div class="block">Make a region name of passed parameters.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionInfo.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html#createRegionName-org.apache.hadoop.hbase.TableName-byte:A-long-boolean-">createRegionName</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 byte[]&nbsp;startKey,
@@ -2951,7 +2985,7 @@ service.</div>
 <div class="block">Make a region name of passed parameters.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionInfo.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html#createRegionName-org.apache.hadoop.hbase.TableName-byte:A-long-int-boolean-">createRegionName</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 byte[]&nbsp;startKey,
@@ -2961,7 +2995,7 @@ service.</div>
 <div class="block">Make a region name of passed parameters.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionInfo.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html#createRegionName-org.apache.hadoop.hbase.TableName-byte:A-java.lang.String-boolean-">createRegionName</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 byte[]&nbsp;startKey,
@@ -2970,12 +3004,12 @@ service.</div>
 <div class="block">Make a region name of passed parameters.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">RawAsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#createTable-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateTableRequest-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
            org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateTableRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteColumn-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumn</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
             byte[]&nbsp;columnFamily)</code>
@@ -2986,7 +3020,7 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteColumn-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumn</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
             byte[]&nbsp;columnFamily)</code>
@@ -2996,140 +3030,140 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteColumnFamily-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumnFamily</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   byte[]&nbsp;columnFamily)</code>
 <div class="block">Delete a column family from a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">RawAsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#deleteColumnFamily-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumnFamily</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   byte[]&nbsp;columnFamily)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#deleteColumnFamily-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumnFamily</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   byte[]&nbsp;columnFamily)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteColumnFamily-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumnFamily</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   byte[]&nbsp;columnFamily)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteColumnFamily-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumnFamily</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   byte[]&nbsp;columnFamily)</code>
 <div class="block">Delete a column family from a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteColumnFamilyAsync-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumnFamilyAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                        byte[]&nbsp;columnFamily)</code>
 <div class="block">Delete a column family from a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteColumnFamilyAsync-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumnFamilyAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                        byte[]&nbsp;columnFamily)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteTable-org.apache.hadoop.hbase.TableName-">deleteTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Deletes a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">RawAsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#deleteTable-org.apache.hadoop.hbase.TableName-">deleteTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#deleteTable-org.apache.hadoop.hbase.TableName-">deleteTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteTable-org.apache.hadoop.hbase.TableName-">deleteTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteTable-org.apache.hadoop.hbase.TableName-">deleteTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Deletes a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteTableAsync-org.apache.hadoop.hbase.TableName-">deleteTableAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Deletes the table but does not block and wait for it to be completely removed.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteTableAsync-org.apache.hadoop.hbase.TableName-">deleteTableAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableTable-org.apache.hadoop.hbase.TableName-">disableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable table and wait on completion.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">RawAsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#disableTable-org.apache.hadoop.hbase.TableName-">disableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#disableTable-org.apache.hadoop.hbase.TableName-">disableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#disableTable-org.apache.hadoop.hbase.TableName-">disableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#disableTable-org.apache.hadoop.hbase.TableName-">disableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableTableAsync-org.apache.hadoop.hbase.TableName-">disableTableAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable the table but does not block and wait for it to be completely disabled.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#disableTableAsync-org.apache.hadoop.hbase.TableName-">disableTableAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableTableReplication-org.apache.hadoop.hbase.TableName-">disableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable a table's replication switch.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">RawAsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#disableTableReplication-org.apache.hadoop.hbase.TableName-">disableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#disableTableReplication-org.apache.hadoop.hbase.TableName-">disableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#disableTableReplication-org.apache.hadoop.hbase.TableName-">disableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#disableTableReplication-org.apache.hadoop.hbase.TableName-">disableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable a table's replication switch.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static &lt;R&gt;&nbsp;void</code></td>
 <td class="colLast"><span class="typeNameLabel">HTable.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HTable.html#doBatchWithCallback-java.util.List-java.lang.Object:A-org.apache.hadoop.hbase.client.coprocessor.Batch.Callback-org.apache.hadoop.hbase.client.ClusterConnection-java.util.concurrent.ExecutorService-org.apache.hadoop.hbase.TableName-">doBatchWithCallback</a></span>(<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;? extends <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;actions,
                    <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;results,
@@ -3138,89 +3172,89 @@ service.</div>
                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool,
                    <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableTable-org.apache.hadoop.hbase.TableName-">enableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">RawAsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#enableTable-org.apache.hadoop.hbase.TableName-">enableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#enableTable-org.apache.hadoop.hbase.TableName-">enableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#enableTable-org.apache.hadoop.hbase.TableName-">enableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#enableTable-org.apache.hadoop.hbase.TableName-">enableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableTableAsync-org.apache.hadoop.hbase.TableName-">enableTableAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable the table but does not block and wait for it to be completely enabled.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#enableTableAsync-org.apache.hadoop.hbase.TableName-">enableTableAsync</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableTableReplication-org.apache.hadoop.hbase.TableName-">enableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table's replication switch.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">RawAsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#enableTableReplication-org.apache.hadoop.hbase.TableName-">enableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#enableTableReplication-org.apache.hadoop.hbase.TableName-">enableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#enableTableReplication-org.apache.hadoop.hbase.TableName-">enableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#enableTableReplication-org.apache.hadoop.hbase.TableName-">enableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table's replication switch.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#flush-org.apache.hadoop.hbase.TableName-">flush</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Flush a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">RawAsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#flush-org.apache.hadoop.hbase.TableName-">flush</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#flush-org.apache.hadoop.hbase.TableName-">flush</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#flush-org.apache.hadoop.hbase.TableName-">flush</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#flush-org.apache.hadoop.hbase.TableName-">flush</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Flush a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static int</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionInfoBuilder.MutableRegionInfo.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfoBuilder.MutableRegionInfo.html#generateHashCode-org.apache.hadoop.hbase.TableName-byte:A-byte:A-long-int-boolean-byte:A-">generateHashCode</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 byte[]&nbsp;startKey,
@@ -3230,7 +3264,7 @@ service.</div>
                 boolean&nbsp;offLine,
                 byte[]&nbsp;regionName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getAlterStatus-org.apache.hadoop.hbase.TableName-">getAlterStatus</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -3239,142 +3273,142 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getAlterStatus-org.apache.hadoop.hbase.TableName-">getAlterStatus</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>default <a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutator.html" title="interface in org.apache.hadoop.hbase.client">AsyncBufferedMutator</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncConnection.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html#getBufferedMutator-org.apache.hadoop.hbase.TableName-">getBufferedMutator</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Retrieve an <a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutator.html" title="interface in org.apache.hadoop.hbase.client"><code>AsyncBufferedMutator</code></a> for performing client-side buffering of writes.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/BufferedMutator.html" title="interface in org.apache.hadoop.hbase.client">BufferedMutator</a></code></td>
 <td class="colLast"><span class="typeNameLabel">ConnectionImplementation.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#getBufferedMutator-org.apache.hadoop.hbase.TableName-">getBufferedMutator</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/BufferedMutator.html" title="interface in org.apache.hadoop.hbase.client">BufferedMutator</a></code></td>
 <td class="colLast"><span class="typeNameLabel">Connection.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html#getBufferedMutator-org.apache.hadoop.hbase.TableName-">getBufferedMutator</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">
  Retrieve a <a href="../../../../../org/apache/hadoop/hbase/client/BufferedMutator.html" title="interface in org.apache.hadoop.hbase.client"><code>BufferedMutator</code></a> for performing client-side buffering of writes.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>default <a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutator.html" title="interface in org.apache.hadoop.hbase.client">AsyncBufferedMutator</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncConnection.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html#getBufferedMutator-org.apache.hadoop.hbase.TableName-java.util.concurrent.ExecutorService-">getBufferedMutator</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool)</code>
 <div class="block">Retrieve an <a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutator.html" title="interface in org.apache.hadoop.hbase.client"><code>AsyncBufferedMutator</code></a> for performing client-side buffering of writes.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutatorBuilder.html" title="interface in org.apache.hadoop.hbase.client">AsyncBufferedMutatorBuilder</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncConnection.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html#getBufferedMutatorBuilder-org.apache.hadoop.hbase.TableName-">getBufferedMutatorBuilder</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Returns an <a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutatorBuilder.html" title="interface in org.apache.hadoop.hbase.client"><code>AsyncBufferedMutatorBuilder</code></a> for creating <a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutator.html" title="interface in org.apache.hadoop.hbase.client"><code>AsyncBufferedMutator</code></a>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutatorBuilder.html" title="interface in org.apache.hadoop.hbase.client">AsyncBufferedMutatorBuilder</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncConnectionImpl.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#getBufferedMutatorBuilder-org.apache.hadoop.hbase.TableName-">getBufferedMutatorBuilder</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutatorBuilder.html" title="interface in org.apache.hadoop.hbase.client">AsyncBufferedMutatorBuilder</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncConnection.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html#getBufferedMutatorBuilder-org.apache.hadoop.hbase.TableName-java.util.concurrent.ExecutorService-">getBufferedMutatorBuilder</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool)</code>
 <div class="block">Returns an <a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutatorBuilder.html" title="interface in org.apache.hadoop.hbase.client"><code>AsyncBufferedMutatorBuilder</code></a> for creating <a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutator.html" title="interface in org.apache.hadoop.hbase.client"><code>AsyncBufferedMutator</code></a>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutatorBuilder.html" title="interface in org.apache.hadoop.hbase.client">AsyncBufferedMutatorBuilder</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncConnectionImpl.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#getBufferedMutatorBuilder-org.apache.hadoop.hbase.TableName-java.util.concurrent.ExecutorService-">getBufferedMutatorBuilder</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MetaCache.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/MetaCache.html#getCachedLocation-org.apache.hadoop.hbase.TableName-byte:A-">getCachedLocation</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                  byte[]&nbsp;row)</code>
 <div class="block">Search the cache for a location that fits our table and row key.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a></code></td>
 <td class="colLast"><span class="typeNameLabel">ConnectionImplementation.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#getCachedLocation-org.apache.hadoop.hbase.TableName-byte:A-">getCachedLocation</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                  byte[]&nbsp;row)</code>
 <div class="block">Search the cache for a location that fits our table and row key.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a></code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getCompactionState-org.apache.hadoop.hbase.TableName-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a></code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getCompactionState-org.apache.hadoop.hbase.TableName-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getCompactionState-org.apache.hadoop.hbase.TableName-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a></code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getCompactionState-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">RawAsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getCompactionState-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getCompactionState-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a></code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getCompactionState-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getCompactionState-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></code></td>
 <td class="colLast"><span class="typeNameLabel">Admin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getDescriptor-org.apache.hadoop.hbase.TableName-">getDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get a table descriptor.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">RawAsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getDescriptor-org.apache.hadoop.hbase.TableName-">getDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getDescriptor-org.apache.hadoop.hbase.TableName-">getDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getDescriptor-org.apache.hadoop.hbase.TableName-">getDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getDescriptor-org.apache.hadoop.hbase.TableName-">getDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Method for getting the tableDescriptor</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) static <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/HBase

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html
index 4e06fa8..37f4bd5 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.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,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":10,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":10,"i97":10,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i
 109":10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":10,"i122":10,"i123":10,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":10,"i130":10,"i131":10,"i132":10,"i133":10,"i134":10,"i135":10,"i136":10,"i137":10,"i138":10,"i139":10,"i140":10,"i141":10,"i142":10,"i143":10,"i144":10,"i145":10,"i146":10,"i147":10,"i148":10,"i149":10,"i150":10,"i151":10,"i152":10,"i153":10,"i154":10,"i155":10,"i156":10,"i157":10,"i158":10,"i159":10,"i160":10,"i161":10,"i162":10,"i163":10,"i164":10,"i165":10,"i166":10,"i167":10,"i168":10,"i169":10,"i170":10,"i171":10,"i172":10,"i173":10,"i174":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,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":10,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":10,"i97":10,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i
 109":10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":10,"i122":10,"i123":10,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":10,"i130":10,"i131":10,"i132":10,"i133":10,"i134":10,"i135":10,"i136":10,"i137":10,"i138":10,"i139":10,"i140":10,"i141":10,"i142":10,"i143":10,"i144":10,"i145":10,"i146":10,"i147":10,"i148":10,"i149":10,"i150":10,"i151":10,"i152":10,"i153":10,"i154":10,"i155":10,"i156":10,"i157":10,"i158":10,"i159":10,"i160":10,"i161":10,"i162":10,"i163":10,"i164":10,"i165":10,"i166":10,"i167":10,"i168":10,"i169":10,"i170":10,"i171":10,"i172":10,"i173":10,"i174":10,"i175":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -459,6 +459,14 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 </td>
 </tr>
 <tr id="i19" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;newTableName,
+                boolean&nbsp;preserveSplits)</code>
+<div class="block">Create a new table by cloning the existent table schema.</div>
+</td>
+</tr>
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#compact-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.client.RegionInfo-boolean-byte:A-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn,
        <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
@@ -467,7 +475,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <div class="block">Compact the region at specific region server.</div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-boolean-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily,
@@ -476,7 +484,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <div class="block">Compact column family of a table, Asynchronous operation even if CompletableFuture.get()</div>
 </td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily,
@@ -484,73 +492,73 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#compactRegion-byte:A-">compactRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Compact an individual region.</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#compactRegion-byte:A-byte:A-">compactRegion</a></span>(byte[]&nbsp;regionName,
              byte[]&nbsp;columnFamily)</code>
 <div class="block">Compact a column family within a region.</div>
 </td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#compactRegion-byte:A-byte:A-boolean-">compactRegion</a></span>(byte[]&nbsp;regionName,
              byte[]&nbsp;columnFamily,
              boolean&nbsp;major)</code>&nbsp;</td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#compactRegionServer-org.apache.hadoop.hbase.ServerName-">compactRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</code>
 <div class="block">Compact all regions on the region server.</div>
 </td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#compactRegionServer-org.apache.hadoop.hbase.ServerName-boolean-">compactRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn,
                    boolean&nbsp;major)</code>&nbsp;</td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#compareRegionsWithSplitKeys-java.util.List-byte:A:A-">compareRegionsWithSplitKeys</a></span>(<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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;locations,
                            byte[][]&nbsp;splitKeys)</code>&nbsp;</td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#compareTableWithPeerCluster-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-org.apache.hadoop.hbase.replication.ReplicationPeerDescription-org.apache.hadoop.hbase.client.AsyncAdmin-">compareTableWithPeerCluster</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                            <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDesc,
                            <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&nbsp;peer,
                            <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdmin</a>&nbsp;peerAdmin)</code>&nbsp;</td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>private &lt;T&gt;&nbsp;void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#completeConditionalOnFuture-java.util.concurrent.CompletableFuture-java.util.concurrent.CompletableFuture-">completeConditionalOnFuture</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;T&gt;&nbsp;dependentFuture,
                            <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;T&gt;&nbsp;parentFuture)</code>&nbsp;</td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>private &lt;T&gt;&nbsp;boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#completeExceptionally-java.util.concurrent.CompletableFuture-java.lang.Throwable-">completeExceptionally</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;T&gt;&nbsp;future,
                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</code>&nbsp;</td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code>&lt;S,R&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;R&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#coprocessorService-java.util.function.Function-org.apache.hadoop.hbase.client.ServiceCaller-">coprocessorService</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java.util.function">Function</a>&lt;com.google.protobuf.RpcChannel,S&gt;&nbsp;stubMaker,
                   <a href="../../../../../org/apache/hadoop/hbase/client/ServiceCaller.html" title="interface in org.apache.hadoop.hbase.client">ServiceCaller</a>&lt;S,R&gt;&nbsp;callable)</code>
 <div class="block">Execute the given coprocessor call on the master.</div>
 </td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>&lt;S,R&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;R&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#coprocessorService-java.util.function.Function-org.apache.hadoop.hbase.client.ServiceCaller-org.apache.hadoop.hbase.ServerName-">coprocessorService</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java.util.function">Function</a>&lt;com.google.protobuf.RpcChannel,S&gt;&nbsp;stubMaker,
                   <a href="../../../../../org/apache/hadoop/hbase/client/ServiceCaller.html" title="interface in org.apache.hadoop.hbase.client">ServiceCaller</a>&lt;S,R&gt;&nbsp;callable,
@@ -558,26 +566,26 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <div class="block">Execute the given coprocessor call on the given region server.</div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#createNamespace-org.apache.hadoop.hbase.NamespaceDescriptor-">createNamespace</a></span>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;descriptor)</code>
 <div class="block">Create a new namespace.</div>
 </td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</code>
 <div class="block">Creates a new table.</div>
 </td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-byte:A:A-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
            byte[][]&nbsp;splitKeys)</code>
 <div class="block">Creates a new table with an initial set of empty regions defined by the specified split keys.</div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-byte:A-byte:A-int-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
            byte[]&nbsp;startKey,
@@ -586,12 +594,12 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <div class="block">Creates a new table with the specified number of regions.</div>
 </td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#createTable-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateTableRequest-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
            org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateTableRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#decommissionRegionServers-java.util.List-boolean-">decommissionRegionServers</a></span>(<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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers,
                          boolean&nbsp;offload)</code>
@@ -599,50 +607,50 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
  assigned to them.</div>
 </td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#deleteColumnFamily-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumnFamily</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   byte[]&nbsp;columnFamily)</code>
 <div class="block">Delete a column family from a table.</div>
 </td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#deleteNamespace-java.lang.String-">deleteNamespace</a></span>(<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;name)</code>
 <div class="block">Delete an existing namespace.</div>
 </td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#deleteSnapshot-java.lang.String-">deleteSnapshot</a></span>(<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;snapshotName)</code>
 <div class="block">Delete an existing snapshot.</div>
 </td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#deleteSnapshots--">deleteSnapshots</a></span>()</code>
 <div class="block">Delete all existing snapshots.</div>
 </td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#deleteSnapshots-java.util.regex.Pattern-">deleteSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;snapshotNamePattern)</code>
 <div class="block">Delete existing snapshots whose names match the pattern passed.</div>
 </td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#deleteTable-org.apache.hadoop.hbase.TableName-">deleteTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Deletes a table.</div>
 </td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#deleteTableSnapshots-java.util.regex.Pattern-">deleteTableSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern)</code>
 <div class="block">Delete all existing snapshots matching the given table name pattern.</div>
 </td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#deleteTableSnapshots-java.util.regex.Pattern-java.util.regex.Pattern-">deleteTableSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;snapshotNamePattern)</code>
@@ -650,43 +658,43 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
  name regular expression.</div>
 </td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#disableReplicationPeer-java.lang.String-">disableReplicationPeer</a></span>(<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;peerId)</code>
 <div class="block">Stop the replication stream to the specified peer</div>
 </td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#disableTable-org.apache.hadoop.hbase.TableName-">disableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable a table.</div>
 </td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#disableTableReplication-org.apache.hadoop.hbase.TableName-">disableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable a table's replication switch.</div>
 </td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#enableReplicationPeer-java.lang.String-">enableReplicationPeer</a></span>(<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;peerId)</code>
 <div class="block">Restart the replication stream to the specified peer</div>
 </td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#enableTable-org.apache.hadoop.hbase.TableName-">enableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table.</div>
 </td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#enableTableReplication-org.apache.hadoop.hbase.TableName-">enableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table's replication switch.</div>
 </td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#execProcedure-java.lang.String-java.lang.String-java.util.Map-">execProcedure</a></span>(<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;signature,
              <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;instance,
@@ -694,7 +702,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <div class="block">Execute a distributed procedure on a cluster.</div>
 </td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;byte[]&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#execProcedureWithReturn-java.lang.String-java.lang.String-java.util.Map-">execProcedureWithReturn</a></span>(<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;signature,
                        <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;instance,
@@ -702,238 +710,238 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <div class="block">Execute a distributed procedure on a cluster.</div>
 </td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code>private &lt;T&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;T&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#failedFuture-java.lang.Throwable-">failedFuture</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</code>&nbsp;</td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#flush-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.client.RegionInfo-">flush</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
      <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#flush-org.apache.hadoop.hbase.TableName-">flush</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Flush a table.</div>
 </td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#flushRegion-byte:A-">flushRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Flush an individual region.</div>
 </td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i61" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#flushRegionServer-org.apache.hadoop.hbase.ServerName-">flushRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</code>
 <div class="block">Flush all region on the region server.</div>
 </td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i62" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getClusterMetrics--">getClusterMetrics</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getClusterMetrics-java.util.EnumSet-">getClusterMetrics</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase">ClusterMetrics.Option</a>&gt;&nbsp;options)</code>&nbsp;</td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getCompactionState-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getCompactionStateForRegion-byte:A-">getCompactionStateForRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Get the current compaction state of region.</div>
 </td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getCompletedSnapshots-java.util.regex.Pattern-">getCompletedSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>&nbsp;</td>
 </tr>
-<tr id="i66" class="altColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getCompletedSnapshots-java.util.regex.Pattern-java.util.regex.Pattern-">getCompletedSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern,
                      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;snapshotNamePattern)</code>&nbsp;</td>
 </tr>
-<tr id="i67" class="rowColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getDescriptor-org.apache.hadoop.hbase.TableName-">getDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Method for getting the tableDescriptor</div>
 </td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getLastMajorCompactionTimestamp-org.apache.hadoop.hbase.TableName-">getLastMajorCompactionTimestamp</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the timestamp of the last major compaction for the passed table.</div>
 </td>
 </tr>
-<tr id="i69" class="rowColor">
+<tr id="i70" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getLastMajorCompactionTimestampForRegion-byte:A-">getLastMajorCompactionTimestampForRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Get the timestamp of the last major compaction for the passed region.</div>
 </td>
 </tr>
-<tr id="i70" class="altColor">
+<tr id="i71" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getLocks--">getLocks</a></span>()</code>
 <div class="block">List locks.</div>
 </td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i72" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getNamespaceDescriptor-java.lang.String-">getNamespaceDescriptor</a></span>(<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;name)</code>
 <div class="block">Get a namespace descriptor by name</div>
 </td>
 </tr>
-<tr id="i72" class="altColor">
+<tr id="i73" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getProcedureResult-long-java.util.concurrent.CompletableFuture-int-">getProcedureResult</a></span>(long&nbsp;procId,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;future,
                   int&nbsp;retries)</code>&nbsp;</td>
 </tr>
-<tr id="i73" class="rowColor">
+<tr id="i74" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getProcedures--">getProcedures</a></span>()</code>
 <div class="block">List procedures</div>
 </td>
 </tr>
-<tr id="i74" class="altColor">
+<tr id="i75" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/quotas/QuotaSettings.html" title="class in org.apache.hadoop.hbase.quotas">QuotaSettings</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getQuota-org.apache.hadoop.hbase.quotas.QuotaFilter-">getQuota</a></span>(<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaFilter.html" title="class in org.apache.hadoop.hbase.quotas">QuotaFilter</a>&nbsp;filter)</code>
 <div class="block">List the quotas based on the filter.</div>
 </td>
 </tr>
-<tr id="i75" class="rowColor">
+<tr id="i76" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getRegionInfo-byte:A-">getRegionInfo</a></span>(byte[]&nbsp;regionNameOrEncodedRegionName)</code>
 <div class="block">Get the region info for the passed region name.</div>
 </td>
 </tr>
-<tr id="i76" class="altColor">
+<tr id="i77" class="rowColor">
 <td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getRegionLocation-byte:A-">getRegionLocation</a></span>(byte[]&nbsp;regionNameOrEncodedRegionName)</code>
 <div class="block">Get the region location for the passed region name.</div>
 </td>
 </tr>
-<tr id="i77" class="rowColor">
+<tr id="i78" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getRegionMetrics-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest-org.apache.hadoop.hbase.ServerName-">getRegionMetrics</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest&nbsp;request,
                 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
-<tr id="i78" class="altColor">
+<tr id="i79" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getRegionMetrics-org.apache.hadoop.hbase.ServerName-">getRegionMetrics</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Get a list of <a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase"><code>RegionMetrics</code></a> of all regions hosted on a region seerver.</div>
 </td>
 </tr>
-<tr id="i79" class="rowColor">
+<tr id="i80" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getRegionMetrics-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.TableName-">getRegionMetrics</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                 <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get a list of <a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase"><code>RegionMetrics</code></a> of all regions hosted on a region seerver for a table.</div>
 </td>
 </tr>
-<tr id="i80" class="altColor">
+<tr id="i81" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getRegions-org.apache.hadoop.hbase.ServerName-">getRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Get all the online regions on a region server.</div>
 </td>
 </tr>
-<tr id="i81" class="rowColor">
+<tr id="i82" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getRegions-org.apache.hadoop.hbase.TableName-">getRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the regions of a given table.</div>
 </td>
 </tr>
-<tr id="i82" class="altColor">
+<tr id="i83" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getReplicationPeerConfig-java.lang.String-">getReplicationPeerConfig</a></span>(<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;peerId)</code>
 <div class="block">Returns the configured ReplicationPeerConfig for the specified peer</div>
 </td>
 </tr>
-<tr id="i83" class="rowColor">
+<tr id="i84" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/security/SecurityCapability.html" title="enum in org.apache.hadoop.hbase.client.security">SecurityCapability</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getSecurityCapabilities--">getSecurityCapabilities</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i84" class="altColor">
+<tr id="i85" class="rowColor">
 <td class="colFirst"><code>private byte[][]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getSplitKeys-byte:A-byte:A-int-">getSplitKeys</a></span>(byte[]&nbsp;startKey,
             byte[]&nbsp;endKey,
             int&nbsp;numRegions)</code>&nbsp;</td>
 </tr>
-<tr id="i85" class="rowColor">
+<tr id="i86" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getTableDescriptors-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableDescriptorsRequest-">getTableDescriptors</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableDescriptorsRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr id="i86" class="altColor">
+<tr id="i87" class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getTableHRegionLocations-org.apache.hadoop.hbase.TableName-">getTableHRegionLocations</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">List all region locations for the specific table.</div>
 </td>
 </tr>
-<tr id="i87" class="rowColor">
+<tr id="i88" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getTableNames-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableNamesRequest-">getTableNames</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableNamesRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr id="i88" class="altColor">
+<tr id="i89" class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;byte[][]&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#getTableSplits-org.apache.hadoop.hbase.TableName-">getTableSplits</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i89" class="rowColor">
+<tr id="i90" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#internalDeleteSnapshot-org.apache.hadoop.hbase.client.SnapshotDescription-">internalDeleteSnapshot</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&nbsp;snapshot)</code>&nbsp;</td>
 </tr>
-<tr id="i90" class="altColor">
+<tr id="i91" class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#internalDeleteSnapshots-java.util.regex.Pattern-java.util.regex.Pattern-">internalDeleteSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;snapshotNamePattern)</code>&nbsp;</td>
 </tr>
-<tr id="i91" class="rowColor">
+<tr id="i92" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#internalRestoreSnapshot-java.lang.String-org.apache.hadoop.hbase.TableName-">internalRestoreSnapshot</a></span>(<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;snapshotName,
                        <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i92" class="altColor">
+<tr id="i93" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#isBalancerEnabled--">isBalancerEnabled</a></span>()</code>
 <div class="block">Query the current state of the balancer.</div>
 </td>
 </tr>
-<tr id="i93" class="rowColor">
+<tr id="i94" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#isCatalogJanitorEnabled--">isCatalogJanitorEnabled</a></span>()</code>
 <div class="block">Query on the catalog janitor state.</div>
 </td>
 </tr>
-<tr id="i94" class="altColor">
+<tr id="i95" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#isCleanerChoreEnabled--">isCleanerChoreEnabled</a></span>()</code>
 <div class="block">Query the current state of the cleaner chore.</div>
 </td>
 </tr>
-<tr id="i95" class="rowColor">
+<tr id="i96" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#isMasterInMaintenanceMode--">isMasterInMaintenanceMode</a></span>()</code>
 <div class="block">Check whether master is in maintenance mode</div>
 </td>
 </tr>
-<tr id="i96" class="altColor">
+<tr id="i97" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#isMergeEnabled--">isMergeEnabled</a></span>()</code>
 <div class="block">Query the current state of the Merge switch.</div>
 </td>
 </tr>
-<tr id="i97" class="rowColor">
+<tr id="i98" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#isNormalizerEnabled--">isNormalizerEnabled</a></span>()</code>
 <div class="block">Query the current state of the region normalizer</div>
 </td>
 </tr>
-<tr id="i98" class="altColor">
+<tr id="i99" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#isProcedureFinished-java.lang.String-java.lang.String-java.util.Map-">isProcedureFinished</a></span>(<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;signature,
                    <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;instance,
@@ -941,27 +949,27 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <div class="block">Check the current state of the specified procedure.</div>
 </td>
 </tr>
-<tr id="i99" class="rowColor">
+<tr id="i100" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#isSnapshotFinished-org.apache.hadoop.hbase.client.SnapshotDescription-">isSnapshotFinished</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&nbsp;snapshot)</code>
 <div class="block">Check the current state of the passed snapshot.</div>
 </td>
 </tr>
-<tr id="i100" class="altColor">
+<tr id="i101" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#isSplitEnabled--">isSplitEnabled</a></span>()</code>
 <div class="block">Query the current state of the Split switch.</div>
 </td>
 </tr>
-<tr id="i101" class="rowColor">
+<tr id="i102" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#isSplitOrMergeOn-org.apache.hadoop.hbase.client.MasterSwitchType-">isSplitOrMergeOn</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client">MasterSwitchType</a>&nbsp;switchType)</code>&nbsp;</td>
 </tr>
-<tr id="i102" class="altColor">
+<tr id="i103" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#isTableAvailable-org.apache.hadoop.hbase.TableName-">isTableAvailable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i103" class="rowColor">
+<tr id="i104" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#isTableAvailable-org.apache.hadoop.hbase.TableName-byte:A:A-">isTableAvailable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 byte[][]&nbsp;splitKeys)</code>
@@ -969,110 +977,110 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
  which was used while creating the given table.</div>
 </td>
 </tr>
-<tr id="i104" class="altColor">
+<tr id="i105" class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#isTableAvailable-org.apache.hadoop.hbase.TableName-java.util.Optional-">isTableAvailable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 <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;byte[][]&gt;&nbsp;splitKeys)</code>&nbsp;</td>
 </tr>
-<tr id="i105" class="rowColor">
+<tr id="i106" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#isTableDisabled-org.apache.hadoop.hbase.TableName-">isTableDisabled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i106" class="altColor">
+<tr id="i107" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#isTableEnabled-org.apache.hadoop.hbase.TableName-">isTableEnabled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i107" class="rowColor">
+<tr id="i108" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#listDecommissionedRegionServers--">listDecommissionedRegionServers</a></span>()</code>
 <div class="block">List region servers marked as decommissioned, which can not be assigned regions.</div>
 </td>
 </tr>
-<tr id="i108" class="altColor">
+<tr id="i109" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#listNamespaceDescriptors--">listNamespaceDescriptors</a></span>()</code>
 <div class="block">List available namespace descriptors</div>
 </td>
 </tr>
-<tr id="i109" class="rowColor">
+<tr id="i110" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/replication/TableCFs.html" title="class in org.apache.hadoop.hbase.client.replication">TableCFs</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#listReplicatedTableCFs--">listReplicatedTableCFs</a></span>()</code>
 <div class="block">Find all table and column families that are replicated from this cluster</div>
 </td>
 </tr>
-<tr id="i110" class="altColor">
+<tr id="i111" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/replication/ReplicationPeerDescription.html" title="class in org.

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.MergeTableRegionProcedureBiConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.MergeTableRegionProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.MergeTableRegionProcedureBiConsumer.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.MergeTableRegionProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.MergeTableRegionProcedureBiConsumer.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyColumnFamilyProcedureBiConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyColumnFamilyProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyColumnFamilyProcedureBiConsumer.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyColumnFamilyProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyColumnFamilyProcedureBiConsumer.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyNamespaceProcedureBiConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyNamespaceProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyNamespaceProcedureBiConsumer.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyNamespaceProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyNamespaceProcedureBiConsumer.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyTableProcedureBiConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyTableProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyTableProcedureBiConsumer.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyTableProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyTableProcedureBiConsumer.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.SplitTableRegionProcedureBiConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.SplitTableRegionProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.SplitTableRegionProcedureBiConsumer.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.SplitTableRegionProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.SplitTableRegionProcedureBiConsumer.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
index e6e43ee..a8b77ae 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
@@ -367,650 +367,650 @@
 <span class="sourceLineNo">359</span>    lock.lock();<a name="line.359"></a>
 <span class="sourceLineNo">360</span>    try {<a name="line.360"></a>
 <span class="sourceLineNo">361</span>      LOG.trace("Starting WAL Procedure Store lease recovery");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      FileStatus[] oldLogs = getLogFiles();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      while (isRunning()) {<a name="line.363"></a>
+<span class="sourceLineNo">362</span>      while (isRunning()) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        FileStatus[] oldLogs = getLogFiles();<a name="line.363"></a>
 <span class="sourceLineNo">364</span>        // Get Log-MaxID and recover lease on old logs<a name="line.364"></a>
 <span class="sourceLineNo">365</span>        try {<a name="line.365"></a>
 <span class="sourceLineNo">366</span>          flushLogId = initOldLogs(oldLogs);<a name="line.366"></a>
 <span class="sourceLineNo">367</span>        } catch (FileNotFoundException e) {<a name="line.367"></a>
 <span class="sourceLineNo">368</span>          LOG.warn("Someone else is active and deleted logs. retrying.", e);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          oldLogs = getLogFiles();<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          continue;<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>        // Create new state-log<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          // someone else has already created this log<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          LOG.debug("Someone else has already created log " + flushLogId);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          continue;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        }<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>        // We have the lease on the log<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        oldLogs = getLogFiles();<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          if (LOG.isDebugEnabled()) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>            LOG.debug("Someone else created new logs. Expected maxLogId &lt; " + flushLogId);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>          }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>          continue;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>        LOG.trace("Lease acquired for flushLogId={}", flushLogId);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        break;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      }<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    } finally {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      lock.unlock();<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><a name="line.397"></a>
-<span class="sourceLineNo">398</span>  @Override<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public void load(final ProcedureLoader loader) throws IOException {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    lock.lock();<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    try {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      if (logs.isEmpty()) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>      // Nothing to do, If we have only the current log.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      if (logs.size() == 1) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        LOG.trace("No state logs to replay.");<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        loader.setMaxProcId(0);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        return;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>      // Load the old logs<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      final Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      it.next(); // Skip the current log<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        @Override<a name="line.418"></a>
-<span class="sourceLineNo">419</span>        public void setMaxProcId(long maxProcId) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          loader.setMaxProcId(maxProcId);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>        @Override<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          loader.load(procIter);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>        @Override<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          loader.handleCorrupted(procIter);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        }<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span>        @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          if (corruptedLogs == null) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>          }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>          corruptedLogs.add(log);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          // TODO: sideline corrupted log<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      });<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    } finally {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      try {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        // try to cleanup inactive wals and complete the operation<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        buildHoldingCleanupTracker();<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        tryCleanupLogsOnLoad();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        loading.set(false);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      } finally {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        lock.unlock();<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>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  private void tryCleanupLogsOnLoad() {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    // nothing to cleanup.<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    if (logs.size() &lt;= 1) return;<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span>    // the config says to not cleanup wals on load.<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      return;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>    try {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      periodicRoll();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    } catch (IOException e) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>  }<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>  @Override<a name="line.472"></a>
-<span class="sourceLineNo">473</span>  public void insert(final Procedure proc, final Procedure[] subprocs) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    if (LOG.isTraceEnabled()) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    ByteSlot slot = acquireSlot();<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    try {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      // Serialize the insert<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      long[] subProcIds = null;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (subprocs != null) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>        subProcIds = new long[subprocs.length];<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      } else {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        assert !proc.hasParent();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>      // Push the transaction data and wait until it is persisted<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    } catch (IOException e) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      // We are not able to serialize the procedure.<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      // this is a code error, and we are not able to go on.<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.498"></a>
-<span class="sourceLineNo">499</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      throw new RuntimeException(e);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    } finally {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      releaseSlot(slot);<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>  @Override<a name="line.506"></a>
-<span class="sourceLineNo">507</span>  public void insert(final Procedure[] procs) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    if (LOG.isTraceEnabled()) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      LOG.trace("Insert " + Arrays.toString(procs));<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>    ByteSlot slot = acquireSlot();<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    try {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      // Serialize the insert<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      long[] procIds = new long[procs.length];<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        assert !procs[i].hasParent();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        procIds[i] = procs[i].getProcId();<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>      // Push the transaction data and wait until it is persisted<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    } catch (IOException e) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      // We are not able to serialize the procedure.<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      // this is a code error, and we are not able to go on.<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.527"></a>
-<span class="sourceLineNo">528</span>          Arrays.toString(procs), e);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      throw new RuntimeException(e);<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    } finally {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      releaseSlot(slot);<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    }<a name="line.532"></a>
-<span class="sourceLineNo">533</span>  }<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>  @Override<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  public void update(final Procedure proc) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    if (LOG.isTraceEnabled()) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      LOG.trace("Update " + proc);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    }<a name="line.539"></a>
-<span class="sourceLineNo">540</span><a name="line.540"></a>
-<span class="sourceLineNo">541</span>    ByteSlot slot = acquireSlot();<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    try {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      // Serialize the update<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>      // Push the transaction data and wait until it is persisted<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    } catch (IOException e) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      // We are not able to serialize the procedure.<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      // this is a code error, and we are not able to go on.<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      throw new RuntimeException(e);<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    } finally {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      releaseSlot(slot);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    }<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  }<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>  @Override<a name="line.558"></a>
-<span class="sourceLineNo">559</span>  public void delete(final long procId) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    if (LOG.isTraceEnabled()) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      LOG.trace("Delete " + procId);<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>    ByteSlot slot = acquireSlot();<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    try {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      // Serialize the delete<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>      // Push the transaction data and wait until it is persisted<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    } catch (IOException e) {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>      // We are not able to serialize the procedure.<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      // this is a code error, and we are not able to go on.<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      throw new RuntimeException(e);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    } finally {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      releaseSlot(slot);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    }<a name="line.578"></a>
-<span class="sourceLineNo">579</span>  }<a name="line.579"></a>
-<span class="sourceLineNo">580</span><a name="line.580"></a>
-<span class="sourceLineNo">581</span>  @Override<a name="line.581"></a>
-<span class="sourceLineNo">582</span>  public void delete(final Procedure proc, final long[] subProcIds) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    assert proc != null : "expected a non-null procedure";<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    if (LOG.isTraceEnabled()) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    }<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>    ByteSlot slot = acquireSlot();<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    try {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      // Serialize the delete<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>      // Push the transaction data and wait until it is persisted<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    } catch (IOException e) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      // We are not able to serialize the procedure.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      // this is a code error, and we are not able to go on.<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      throw new RuntimeException(e);<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    } finally {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      releaseSlot(slot);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>  }<a name="line.604"></a>
-<span class="sourceLineNo">605</span><a name="line.605"></a>
-<span class="sourceLineNo">606</span>  @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    if (count == 0) return;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      delete(procIds);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    } else if (count == 1) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      delete(procIds[offset]);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    } else {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    }<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>  private void delete(final long[] procIds) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if (LOG.isTraceEnabled()) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>    final ByteSlot slot = acquireSlot();<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    try {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      // Serialize the delete<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>      // Push the transaction data and wait until it is persisted<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    } catch (IOException e) {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      // We are not able to serialize the procedure.<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      // this is a code error, and we are not able to go on.<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      throw new RuntimeException(e);<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    } finally {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      releaseSlot(slot);<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    }<a name="line.639"></a>
-<span class="sourceLineNo">640</span>  }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>  private ByteSlot acquireSlot() {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    ByteSlot slot = slotsCache.poll();<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    return slot != null ? slot : new ByteSlot();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>  private void releaseSlot(final ByteSlot slot) {<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    slot.reset();<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    slotsCache.offer(slot);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>  }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.652"></a>
-<span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      final long procId, final long[] subProcIds) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    if (!isRunning()) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    if (logs.isEmpty()) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>    long logId = -1;<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    lock.lock();<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    try {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      // Wait for the sync to be completed<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      while (true) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        if (!isRunning()) {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>          throw new RuntimeException("store no longer running");<a name="line.669"></a>
-<span class="sourceLineNo">670</span>        } else if (isSyncAborted()) {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.671"></a>
-<span class="sourceLineNo">672</span>        } else if (inSync.get()) {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          syncCond.await();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>          slotCond.signal();<a name="line.675"></a>
-<span class="sourceLineNo">676</span>          syncCond.await();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>        } else {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>          break;<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        }<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      }<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>      final long pushSyncId = syncId.get();<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      slots[slotIndex++] = slot;<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      logId = flushLogId;<a name="line.685"></a>
-<span class="sourceLineNo">686</span><a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // Notify that there is new data<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      if (slotIndex == 1) {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        waitCond.signal();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      }<a name="line.690"></a>
-<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span>      // Notify that the slots are full<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      if (slotIndex == syncMaxSlot) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>        waitCond.signal();<a name="line.694"></a>
-<span class="sourceLineNo">695</span>        slotCond.signal();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>      }<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span>      while (pushSyncId == syncId.get() &amp;&amp; isRunning()) {<a name="line.698"></a>
-<span class="sourceLineNo">699</span>        syncCond.await();<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      }<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    } catch (InterruptedException e) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      Thread.currentThread().interrupt();<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      sendAbortProcessSignal();<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      throw new RuntimeException(e);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    } finally {<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      lock.unlock();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      if (isSyncAborted()) {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>        throw new RuntimeException("sync aborted", syncException.get());<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      }<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    }<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    return logId;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>  private void updateStoreTracker(final PushType type,<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      final long procId, final long[] subProcIds) {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    switch (type) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      case INSERT:<a name="line.717"></a>
-<span class="sourceLineNo">718</span>        if (subProcIds == null) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          storeTracker.insert(procId);<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        } else if (procId == Procedure.NO_PROC_ID) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          storeTracker.insert(subProcIds);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        } else {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          storeTracker.insert(procId, subProcIds);<a name="line.723"></a>
-<span class="sourceLineNo">724</span>          holdingCleanupTracker.setDeletedIfSet(procId);<a name="line.724"></a>
-<span class="sourceLineNo">725</span>        }<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        break;<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      case UPDATE:<a name="line.727"></a>
-<span class="sourceLineNo">728</span>        storeTracker.update(procId);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>        holdingCleanupTracker.setDeletedIfSet(procId);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        break;<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      case DELETE:<a name="line.731"></a>
-<span class="sourceLineNo">732</span>        if (subProcIds != null &amp;&amp; subProcIds.length &gt; 0) {<a name="line.732"></a>
-<span class="sourceLineNo">733</span>          storeTracker.delete(subProcIds);<a name="line.733"></a>
-<span class="sourceLineNo">734</span>          holdingCleanupTracker.setDeletedIfSet(subProcIds);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>        } else {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          storeTracker.delete(procId);<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          holdingCleanupTracker.setDeletedIfSet(procId);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>        }<a name="line.738"></a>
-<span class="sourceLineNo">739</span>        break;<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      default:<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        throw new RuntimeException("invalid push type " + type);<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    }<a name="line.742"></a>
-<span class="sourceLineNo">743</span>  }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span>  private boolean isSyncAborted() {<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    return syncException.get() != null;<a name="line.746"></a>
-<span class="sourceLineNo">747</span>  }<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span>  private void syncLoop() throws Throwable {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>    long totalSyncedToStore = 0;<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    inSync.set(false);<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    lock.lock();<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    try {<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      while (isRunning()) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>        try {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>          // Wait until new data is available<a name="line.756"></a>
-<span class="sourceLineNo">757</span>          if (slotIndex == 0) {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>            if (!loading.get()) {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>              periodicRoll();<a name="line.759"></a>
-<span class="sourceLineNo">760</span>            }<a name="line.760"></a>
-<span class="sourceLineNo">761</span><a name="line.761"></a>
-<span class="sourceLineNo">762</span>            if (LOG.isTraceEnabled()) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>              float rollTsSec = getMillisFromLastRoll() / 1000.0f;<a name="line.763"></a>
-<span class="sourceLineNo">764</span>              LOG.trace(String.format("Waiting for data. flushed=%s (%s/sec)",<a name="line.764"></a>
-<span class="sourceLineNo">765</span>                        StringUtils.humanSize(totalSynced.get()),<a name="line.765"></a>
-<span class="sourceLineNo">766</span>                        StringUtils.humanSize(totalSynced.get() / rollTsSec)));<a name="line.766"></a>
-<span class="sourceLineNo">767</span>            }<a name="line.767"></a>
-<span class="sourceLineNo">768</span><a name="line.768"></a>
-<span class="sourceLineNo">769</span>            waitCond.await(getMillisToNextPeriodicRoll(), TimeUnit.MILLISECONDS);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>            if (slotIndex == 0) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>              // no data.. probably a stop() or a periodic roll<a name="line.771"></a>
-<span class="sourceLineNo">772</span>              continue;<a name="line.772"></a>
-<span class="sourceLineNo">773</span>            }<a name="line.773"></a>
-<span class="sourceLineNo">774</span>          }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>          // Wait SYNC_WAIT_MSEC or the signal of "slots full" before flushing<a name="line.775"></a>
-<span class="sourceLineNo">776</span>          syncMaxSlot = runningProcCount;<a name="line.776"></a>
-<span class="sourceLineNo">777</span>          assert syncMaxSlot &gt; 0 : "unexpected syncMaxSlot=" + syncMaxSlot;<a name="line.777"></a>
-<span class="sourceLineNo">778</span>          final long syncWaitSt = System.currentTimeMillis();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>          if (slotIndex != syncMaxSlot) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>            slotCond.await(syncWaitMsec, TimeUnit.MILLISECONDS);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>          }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>          final long currentTs = System.currentTimeMillis();<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          final long syncWaitMs = currentTs - syncWaitSt;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>          final float rollSec = getMillisFromLastRoll() / 1000.0f;<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          final float syncedPerSec = totalSyncedToStore / rollSec;<a name="line.786"></a>
-<span class="sourceLineNo">787</span>          if (LOG.isTraceEnabled() &amp;&amp; (syncWaitMs &gt; 10 || slotIndex &lt; syncMaxSlot)) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>            LOG.trace(String.format("Sync wait %s, slotIndex=%s , totalSynced=%s (%s/sec)",<a name="line.788"></a>
-<span class="sourceLineNo">789</span>                      StringUtils.humanTimeDiff(syncWaitMs), slotIndex,<a name="line.789"></a>
-<span class="sourceLineNo">790</span>                      StringUtils.humanSize(totalSyncedToStore),<a name="line.790"></a>
-<span class="sourceLineNo">791</span>                      StringUtils.humanSize(syncedPerSec)));<a name="line.791"></a>
-<span class="sourceLineNo">792</span>          }<a name="line.792"></a>
-<span class="sourceLineNo">793</span><a name="line.793"></a>
-<span class="sourceLineNo">794</span>          // update webui circular buffers (TODO: get rid of allocations)<a name="line.794"></a>
-<span class="sourceLineNo">795</span>          final SyncMetrics syncMetrics = new SyncMetrics();<a name="line.795"></a>
-<span class="sourceLineNo">796</span>          syncMetrics.timestamp = currentTs;<a name="line.796"></a>
-<span class="sourceLineNo">797</span>          syncMetrics.syncWaitMs = syncWaitMs;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>          syncMetrics.syncedEntries = slotIndex;<a name="line.798"></a>
-<span class="sourceLineNo">799</span>          syncMetrics.totalSyncedBytes = totalSyncedToStore;<a name="line.799"></a>
-<span class="sourceLineNo">800</span>          syncMetrics.syncedPerSec = syncedPerSec;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>          syncMetricsQueue.add(syncMetrics);<a name="line.801"></a>
-<span class="sourceLineNo">802</span><a name="line.802"></a>
-<span class="sourceLineNo">803</span>          // sync<a name="line.803"></a>
-<span class="sourceLineNo">804</span>          inSync.set(true);<a name="line.804"></a>
-<span class="sourceLineNo">805</span>          long slotSize = syncSlots();<a name="line.805"></a>
-<span class="sourceLineNo">806</span>          logs.getLast().addToSize(slotSize);<a name="line.806"></a>
-<span class="sourceLineNo">807</span>          totalSyncedToStore = totalSynced.addAndGet(slotSize);<a name="line.807"></a>
-<span class="sourceLineNo">808</span>          slotIndex = 0;<a name="line.808"></a>
-<span class="sourceLineNo">809</span>          inSync.set(false);<a name="line.809"></a>
-<span class="sourceLineNo">810</span>          syncId.incrementAndGet();<a name="line.810"></a>
-<span class="sourceLineNo">811</span>        } catch (InterruptedException e) {<a name="line.811"></a>
-<span class="sourceLineNo">812</span>          Thread.currentThread().interrupt();<a name="line.812"></a>
-<span class="sourceLineNo">813</span>          syncException.compareAndSet(null, e);<a name="line.813"></a>
-<span class="sourceLineNo">814</span>          sendAbortProcessSignal();<a name="line.814"></a>
-<span class="sourceLineNo">815</span>          throw e;<a name="line.815"></a>
-<span class="sourceLineNo">816</span>        } catch (Throwable t) {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>          syncException.compareAndSet(null, t);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>          sendAbortProcessSignal();<a name="line.818"></a>
-<span class="sourceLineNo">819</span>          throw t;<a name="line.819"></a>
-<span class="sourceLineNo">820</span>        } finally {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>          syncCond.signalAll();<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        }<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      }<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    } finally {<a name="line.824"></a>
-<span class="sourceLineNo">825</span>      lock.unlock();<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>  }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
-<span class="sourceLineNo">829</span>  public ArrayList&lt;SyncMetrics&gt; getSyncMetrics() {<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    lock.lock();<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    try {<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      return new ArrayList&lt;&gt;(syncMetricsQueue);<a name="line.832"></a>
-<span class="sourceLineNo">833</span>    } finally {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>      lock.unlock();<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    }<a name="line.835"></a>
-<span class="sourceLineNo">836</span>  }<a name="line.836"></a>
-<span class="sourceLineNo">837</span><a name="line.837"></a>
-<span class="sourceLineNo">838</span>  private long syncSlots() throws Throwable {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    int retry = 0;<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    int logRolled = 0;<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    long totalSynced = 0;<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    do {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      try {<a name="line.843"></a>
-<span class="sourceLineNo">844</span>        totalSynced = syncSlots(stream, slots, 0, slotIndex);<a name="line.844"></a>
-<span class="sourceLineNo">845</span>        break;<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      } catch (Throwable e) {<a name="line.846"></a>
-<span class="sourceLineNo">847</span>        LOG.warn("unable to sync slots, retry=" + retry);<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        if (++retry &gt;= maxRetriesBeforeRoll) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>          if (logRolled &gt;= maxSyncFailureRoll &amp;&amp; isRunning()) {<a name="line.849"></a>
-<span class="sourceLineNo">850</span>            LOG.error("Sync slots after log roll failed, abort.", e);<a name="line.850"></a>
-<span class="sourceLineNo">851</span>            throw e;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>          }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>          if (!rollWriterWithRetries()) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>            throw e;<a name="line.855"></a>
-<span class="sourceLineNo">856</span>          }<a name="line.856"></a>
-<span class="sourceLineNo">857</span><a name="line.857"></a>
-<span class="sourceLineNo">858</span>          logRolled++;<a name="line.858"></a>
-<span class="sourceLineNo">859</span>          retry = 0;<a name="line.859"></a>
-<span class="sourceLineNo">860</span>        }<a name="line.860"></a>
-<span class="sourceLineNo">861</span>      }<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    } while (isRunning());<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    return totalSynced;<a name="line.863"></a>
-<span class="sourceLineNo">864</span>  }<a name="line.864"></a>
-<span class="sourceLineNo">865</span><a name="line.865"></a>
-<span class="sourceLineNo">866</span>  protected long syncSlots(final FSDataOutputStream stream, final ByteSlot[] slots,<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      final int offset, final int count) throws IOException {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    long totalSynced = 0;<a name="line.868"></a>
-<span class="sourceLineNo">869</span>    for (int i = 0; i &lt; count; ++i) {<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      final ByteSlot data = slots[offset + i];<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      data.writeTo(stream);<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      totalSynced += data.size();<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    }<a name="line.873"></a>
-<span class="sourceLineNo">874</span><a name="line.874"></a>
-<span class="sourceLineNo">875</span>    syncStream(stream);<a name="line.875"></a>
-<span class="sourceLineNo">876</span>    sendPostSyncSignal();<a name="line.876"></a>
-<span class="sourceLineNo">877</span><a name="line.877"></a>
-<span class="sourceLineNo">878</span>    if (LOG.isTraceEnabled()) {<a name="line.878"></a>
-<span class="sourceLineNo">879</span>      LOG.trace("Sync slots=" + count + '/' + syncMaxSlot +<a name="line.879"></a>
-<span class="sourceLineNo">880</span>                ", flushed=" + StringUtils.humanSize(totalSynced));<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    }<a name="line.881"></a>
-<span class="sourceLineNo">882</span>    return totalSynced;<a name="line.882"></a>
-<span class="sourceLineNo">883</span>  }<a name="line.883"></a>
-<span class="sourceLineNo">884</span><a name="line.884"></a>
-<span class="sourceLineNo">885</span>  protected void syncStream(final FSDataOutputStream stream) throws IOException {<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    if (useHsync) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      stream.hsync();<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    } else {<a name="line.888"></a>
-<span class="sourceLineNo">889</span>      stream.hflush();<a name="line.889"></a>
-<span class="sourceLineNo">890</span>    }<a name="line.890"></a>
-<span class="sourceLineNo">891</span>  }<a name="line.891"></a>
-<span class="sourceLineNo">892</span><a name="line.892"></a>
-<span class="sourceLineNo">893</span>  private boolean rollWriterWithRetries() {<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    for (int i = 0; i &lt; rollRetries &amp;&amp; isRunning(); ++i) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>      if (i &gt; 0) Threads.sleepWithoutInterrupt(waitBeforeRoll * i);<a name="line.895"></a>
-<span class="sourceLineNo">896</span><a name="line.896"></a>
-<span class="sourceLineNo">897</span>      try {<a name="line.897"></a>
-<span class="sourceLineNo">898</span>        if (rollWriter()) {<a name="line.898"></a>
-<span class="sourceLineNo">899</span>          return true;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>        }<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      } catch (IOException e) {<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        LOG.warn("Unable to roll the log, attempt=" + (i + 1), e);<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      }<a name="line.903"></a>
-<span class="sourceLineNo">904</span>    }<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    LOG.error(HBaseMarkers.FATAL, "Unable to roll the log");<a name="line.905"></a>
-<span class="sourceLineNo">906</span>    return false;<a name="line.906"></a>
-<span class="sourceLineNo">907</span>  }<a name="line.907"></a>
-<span class="sourceLineNo">908</span><a name="line.908"></a>
-<span class="sourceLineNo">909</span>  private boolean tryRollWriter() {<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    try {<a name="line.910"></a>
-<span class="sourceLineNo">911</span>      return rollWriter();<a name="line.911"></a>
-<span class="sourceLineNo">912</span>    } catch (IOException e) {<a name="line.912"></a>
-<span class="sourceLineNo">913</span>      LOG.warn("Unable to roll the log", e);<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      return false;<a name="line.914"></a>
-<span class="sourceLineNo">915</span>    }<a name="line.915"></a>
-<span class="sourceLineNo">916</span>  }<a name="line.916"></a>
-<span class="sourceLineNo">917</span><a name="line.917"></a>
-<span class="sourceLineNo">918</span>  public long getMillisToNextPeriodicRoll() {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    if (lastRollTs.get() &gt; 0 &amp;&amp; periodicRollMsec &gt; 0) {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      return periodicRollMsec - getMillisFromLastRoll();<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    }<a name="line.921"></a>
-<span class="sourceLineNo">922</span>    return Long.MAX_VALUE;<a name="line.922"></a>
-<span class="sourceLineNo">923</span>  }<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span>  public long getMillisFromLastRoll() {<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    return (System.currentTimeMillis() - lastRollTs.get());<a name="line.926"></a>
-<span class="sourceLineNo">927</span>  }<a name="line.927"></a>
-<span class="sourceLineNo">928</span><a name="line.928"></a>
-<span class="sourceLineNo">929</span>  @VisibleForTesting<a name="line.929"></a>
-<span class="sourceLineNo">930</span>  protected void periodicRollForTesting() throws IOException {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    lock.lock();<a name="line.931"></a>
-<span class="sourceLineNo">932</span>    try {<a name="line.932"></a>
-<span class="sourceLineNo">933</span>      periodicRoll();<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    } finally {<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      lock.unlock();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    }<a name="line.936"></a>
-<span class="sourceLineNo">937</span>  }<a name="line.937"></a>
-<span class="sourceLineNo">938</span><a name="line.938"></a>
-<span class="sourceLineNo">939</span>  @VisibleForTesting<a name="line.939"></a>
-<span class="sourceLineNo">940</span>  protected boolean rollWriterForTesting() throws IOException {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    lock.lock();<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    try {<a name="line.942"></a>
-<span class="sourceLineNo">943</span>      return rollWriter();<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    } finally {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>      lock.unlock();<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    }<a name="line.946"></a>
-<span class="sourceLineNo">947</span>  }<a name="line.947"></a>
-<span class="sourceLineNo">948</span><a name="line.948"></a>
-<span class="sourceLineNo">949</span>  @VisibleForTesting<a name="line.949"></a>
-<span class="sourceLineNo">950</span>  protected void removeInactiveLogsForTesting() throws Exception {<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    lock.lock();<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    try {<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      removeInactiveLogs();<a name="line.953"></a>
-<span class="sourceLineNo">954</span>    } finally  {<a name="line.954"></a>
-<span class="sourceLineNo">955</span>      lock.unlock();<a name="line.955"></a>
-<span class="sourceLineNo">956</span>    }<a name="line.956"></a>
-<span class="sourceLineNo">957</span>  }<a name="line.957"></a>
-<span class="sourceLineNo">958</span><a name="line.958"></a>
-<span class="sourceLineNo">959</span>  private void periodicRoll() throws IOException {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    if (storeTracker.isEmpty()) {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      if (LOG.isTraceEnabled()) {<a name="line.961"></a>
-<span class="sourceLineNo">962</span>        LOG.trace("no active procedures");<a name="line.962"></a>
-<span class="sourceLineNo">963</span>      }<a name="line.963"></a>
-<span class="sourceLineNo">964</span>      tryRollWriter();<a name="line.964"></a>
-<span class="sourceLineNo">965</span>      removeAllLogs(flushLogId - 1);<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    } else {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>      if (storeTracker.isUpdated()) {<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        if (LOG.isTraceEnabled()) {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          LOG.trace("all the active procedures are in the latest log");<a name="line.969"></a>
-<span class="sourceLineNo">970</span>        }<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        removeAllLogs(flushLogId - 1);<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      }<a name="line.972"></a>
-<span class="sourceLineNo">973</span><a name="line.973"></a>
-<span class="sourceLineNo">974</span>      // if the log size has exceeded the roll threshold<a name="line.974"></a>
-<span class="sourceLineNo">975</span>      // or the periodic roll timeout is expired, try to roll the wal.<a name="line.975"></a>
-<span class="sourceLineNo">976</span>      if (totalSynced.get() &gt; rollThreshold || getMillisToNextPeriodicRoll() &lt;= 0) {<a name="line.976"></a>
-<span class="sourceLineNo">977</span>        tryRollWriter();<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      }<a name="line.978"></a>
-<span class="sourceLineNo">979</span><a name="line.979"></a>
-<span class="sourceLineNo">980</span>      removeInactiveLogs();<a name="line.980"></a>
-<span class="sourceLineNo">981</span>    }<a name="line.981"></a>
-<span class="sourceLineNo">982</span>  }<a name="line.982"></a>
-<span class="sourceLineNo">983</span><a name="line.983"></a>
-<span class="sourceLineNo">984</span>  private boolean rollWriter() throws IOException {<a name="line.984"></a>
-<span class="sourceLineNo">985</span>    if (!isRunning()) return false;<a name="line.985"></a>
-<span class="sourceLineNo">986</span><a name="line.986"></a>
-<span class="sourceLineNo">987</span>    // Create new state-log<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    if (!rollWriter(flushLogId + 1)) {<a name="line.988"></a>
-<span class="sourceLineNo">989</span>      LOG.warn("someone else has already created log " + flushLogId);<a name="line.989"></a>
-<span class="sourceLineNo">990</span>      return false;<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    }<a name="line.991"></a>
-<span class="sourceLineNo">992</span><a name="line.992"></a>
-<span class="sourceLineNo">993</span>    // We have the lease on the log,<a name="line.993"></a>
-<span class="sourceLineNo">994</span>    // but we should check if someone else has created new files<a name="line.994"></a>
-<span class="sourceLineNo">995</span>    if (getMaxLogId(getLogFiles()) &gt; flushLogId) {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>      LOG.warn("Someone else created new logs. Expected maxLogId &lt; " + flushLogId);<a name="line.996"></a>
-<span class="sourceLineNo">997</span>      logs.getLast().removeFile(this.walArchiveDir);<a name="line.997"></a>
-<span class="sourceLineNo">998</span>      return false;<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    }<a name="line.999"></a>
-<span class="sourceLineNo">1000</span><a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    // We have the lease on the log<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>    return true;<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>  }<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span><a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>  private boolean rollWriter(final long logId) throws IOException {<a name="line.1005"></a>
+<span class="sourceLineNo">369</span>          continue;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>        // Create new state-log<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>          // someone else has already created this log<a name="line.374"></a>
+<span class="sourceLineNo">375</span>          LOG.debug("Someone else has already created log {}. Retrying.", flushLogId);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>          continue;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>        // We have the lease on the log<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        oldLogs = getLogFiles();<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          if (LOG.isDebugEnabled()) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            LOG.debug("Someone else created new logs. Expected maxLogId &lt; " + flushLogId);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          continue;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span>        LOG.trace("Lease acquired for flushLogId={}", flushLogId);<a name="line.389"></a>
+<span class="sourceLineNo">390</span>        break;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      }<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    } finally {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      lock.unlock();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  public void load(final ProcedureLoader loader) throws IOException {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    lock.lock();<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      if (logs.isEmpty()) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>      // Nothing to do, If we have only the current log.<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (logs.size() == 1) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        LOG.trace("No state logs to replay.");<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        loader.setMaxProcId(0);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        return;<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      }<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span>      // Load the old logs<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      final Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      it.next(); // Skip the current log<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        @Override<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        public void setMaxProcId(long maxProcId) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          loader.setMaxProcId(maxProcId);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>        @Override<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>          loader.load(procIter);<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        }<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span>        @Override<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          loader.handleCorrupted(procIter);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        }<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>        @Override<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          if (corruptedLogs == null) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          }<a name="line.436"></a>
+<span class="sourceLineNo">437</span>          corruptedLogs.add(log);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>          // TODO: sideline corrupted log<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        }<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      });<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    } finally {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      try {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        // try to cleanup inactive wals and complete the operation<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        buildHoldingCleanupTracker();<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        tryCleanupLogsOnLoad();<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        loading.set(false);<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      } finally {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        lock.unlock();<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><a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private void tryCleanupLogsOnLoad() {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    // nothing to cleanup.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    if (logs.size() &lt;= 1) return;<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span>    // the config says to not cleanup wals on load.<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      return;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
+<span class="sourceLineNo">463</span><a name="line.463"></a>
+<span class="sourceLineNo">464</span>    try {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      periodicRoll();<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    } catch (IOException e) {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    }<a name="line.468"></a>
+<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
+<span class="sourceLineNo">470</span><a name="line.470"></a>
+<span class="sourceLineNo">471</span>  @Override<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  public void insert(final Procedure proc, final Procedure[] subprocs) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    if (LOG.isTraceEnabled()) {<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
+<span class="sourceLineNo">476</span><a name="line.476"></a>
+<span class="sourceLineNo">477</span>    ByteSlot slot = acquireSlot();<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    try {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>      // Serialize the insert<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      long[] subProcIds = null;<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      if (subprocs != null) {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        subProcIds = new long[subprocs.length];<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        }<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      } else {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        assert !proc.hasParent();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      }<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>      // Push the transaction data and wait until it is persisted<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    } catch (IOException e) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      // We are not able to serialize the procedure.<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      // this is a code error, and we are not able to go on.<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.497"></a>
+<span class="sourceLineNo">498</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      throw new RuntimeException(e);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>    } finally {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      releaseSlot(slot);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
+<span class="sourceLineNo">503</span>  }<a name="line.503"></a>
+<span class="sourceLineNo">504</span><a name="line.504"></a>
+<span class="sourceLineNo">505</span>  @Override<a name="line.505"></a>
+<span class="sourceLineNo">506</span>  public void insert(final Procedure[] procs) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    if (LOG.isTraceEnabled()) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      LOG.trace("Insert " + Arrays.toString(procs));<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
+<span class="sourceLineNo">510</span><a name="line.510"></a>
+<span class="sourceLineNo">511</span>    ByteSlot slot = acquireSlot();<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    try {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      // Serialize the insert<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      long[] procIds = new long[procs.length];<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        assert !procs[i].hasParent();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        procIds[i] = procs[i].getProcId();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      }<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>      // Push the transaction data and wait until it is persisted<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    } catch (IOException e) {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      // We are not able to serialize the procedure.<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      // this is a code error, and we are not able to go on.<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.526"></a>
+<span class="sourceLineNo">527</span>          Arrays.toString(procs), e);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      throw new RuntimeException(e);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    } finally {<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      releaseSlot(slot);<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span>  }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>  @Override<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  public void update(final Procedure proc) {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    if (LOG.isTraceEnabled()) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      LOG.trace("Update " + proc);<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    }<a name="line.538"></a>
+<span class="sourceLineNo">539</span><a name="line.539"></a>
+<span class="sourceLineNo">540</span>    ByteSlot slot = acquireSlot();<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    try {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      // Serialize the update<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.543"></a>
+<span class="sourceLineNo">544</span><a name="line.544"></a>
+<span class="sourceLineNo">545</span>      // Push the transaction data and wait until it is persisted<a name="line.545"></a>
+<span class="sourceLineNo">546</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    } catch (IOException e) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      // We are not able to serialize the procedure.<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      // this is a code error, and we are not able to go on.<a name="line.549"></a>
+<span class="sourceLineNo">550</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      throw new RuntimeException(e);<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    } finally {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      releaseSlot(slot);<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span>  @Override<a name="line.557"></a>
+<span class="sourceLineNo">558</span>  public void delete(final long procId) {<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    if (LOG.isTraceEnabled()) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      LOG.trace("Delete " + procId);<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    ByteSlot slot = acquireSlot();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      // Serialize the delete<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.566"></a>
+<span class="sourceLineNo">567</span><a name="line.567"></a>
+<span class="sourceLineNo">568</span>      // Push the transaction data and wait until it is persisted<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    } catch (IOException e) {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      // We are not able to serialize the procedure.<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      // this is a code error, and we are not able to go on.<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.573"></a>
+<span class="sourceLineNo">574</span>      throw new RuntimeException(e);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    } finally {<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      releaseSlot(slot);<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
+<span class="sourceLineNo">579</span><a name="line.579"></a>
+<span class="sourceLineNo">580</span>  @Override<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  public void delete(final Procedure proc, final long[] subProcIds) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    assert proc != null : "expected a non-null procedure";<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    if (LOG.isTraceEnabled()) {<a name="line.584"></a>
+<span class="sourceLineNo">585</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    }<a name="line.586"></a>
+<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">588</span>    ByteSlot slot = acquireSlot();<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    try {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>      // Serialize the delete<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>      // Push the transaction data and wait until it is persisted<a name="line.593"></a>
+<span class="sourceLineNo">594</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>    } catch (IOException e) {<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      // We are not able to serialize the procedure.<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      // this is a code error, and we are not able to go on.<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      throw new RuntimeException(e);<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    } finally {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      releaseSlot(slot);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    }<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  }<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span>  @Override<a name="line.605"></a>
+<span class="sourceLineNo">606</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    if (count == 0) return;<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      delete(procIds);<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    } else if (count == 1) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      delete(procIds[offset]);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    } else {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
+<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>  private void delete(final long[] procIds) {<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    if (LOG.isTraceEnabled()) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    }<a name="line.620"></a>
+<span class="sourceLineNo">621</span><a name="line.621"></a>
+<span class="sourceLineNo">622</span>    final ByteSlot slot = acquireSlot();<a name="line.622"></a>
+<span class="sourceLineNo">623</span>    try {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>      // Serialize the delete<a name="line.624"></a>
+<span class="sourceLineNo">625</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      }<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span>      // Push the transaction data and wait until it is persisted<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    } catch (IOException e) {<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      // We are not able to serialize the procedure.<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      // this is a code error, and we are not able to go on.<a name="line.633"></a>
+<span class="sourceLineNo">634</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      throw new RuntimeException(e);<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    } finally {<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      releaseSlot(slot);<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    }<a name="line.638"></a>
+<span class="sourceLineNo">639</span>  }<a name="line.639"></a>
+<span class="sourceLineNo">640</span><a name="line.640"></a>
+<span class="sourceLineNo">641</span>  private ByteSlot acquireSlot() {<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    ByteSlot slot = slotsCache.poll();<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    return slot != null ? slot : new ByteSlot();<a name="line.643"></a>
+<span class="sourceLineNo">644</span>  }<a name="line.644"></a>
+<span class="sourceLineNo">645</span><a name="line.645"></a>
+<span class="sourceLineNo">646</span>  private void releaseSlot(final ByteSlot slot) {<a name="line.646"></a>
+<span class="sourceLineNo">647</span>    slot.reset();<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    slotsCache.offer(slot);<a name="line.648"></a>
+<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.651"></a>
+<span class="sourceLineNo">652</span><a name="line.652"></a>
+<span class="sourceLineNo">653</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      final long procId, final long[] subProcIds) {<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    if (!isRunning()) {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.656"></a>
+<span class="sourceLineNo">657</span>    }<a name="line.657"></a>
+<span class="sourceLineNo">658</span>    if (logs.isEmpty()) {<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.659"></a>
+<span class="sourceLineNo">660</span>    }<a name="line.660"></a>
+<span class="sourceLineNo">661</span><a name="line.661"></a>
+<span class="sourceLineNo">662</span>    long logId = -1;<a name="line.662"></a>
+<span class="sourceLineNo">663</span>    lock.lock();<a name="line.663"></a>
+<span class="sourceLineNo">664</span>    try {<a name="line.664"></a>
+<span class="sourceLineNo">665</span>      // Wait for the sync to be completed<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      while (true) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>        if (!isRunning()) {<a name="line.667"></a>
+<span class="sourceLineNo">668</span>          throw new RuntimeException("store no longer running");<a name="line.668"></a>
+<span class="sourceLineNo">669</span>        } else if (isSyncAborted()) {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.670"></a>
+<span class="sourceLineNo">671</span>        } else if (inSync.get()) {<a name="line.671"></a>
+<span class="sourceLineNo">672</span>          syncCond.await();<a name="line.672"></a>
+<span class="sourceLineNo">673</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>          slotCond.signal();<a name="line.674"></a>
+<span class="sourceLineNo">675</span>          syncCond.await();<a name="line.675"></a>
+<span class="sourceLineNo">676</span>        } else {<a name="line.676"></a>
+<span class="sourceLineNo">677</span>          break;<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        }<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      }<a name="line.679"></a>
+<span class="sourceLineNo">680</span><a name="line.680"></a>
+<span class="sourceLineNo">681</span>      final long pushSyncId = syncId.get();<a name="line.681"></a>
+<span class="sourceLineNo">682</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      slots[slotIndex++] = slot;<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      logId = flushLogId;<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>      // Notify that there is new data<a name="line.686"></a>
+<span class="sourceLineNo">687</span>      if (slotIn

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html
index e6e43ee..a8b77ae 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html
@@ -367,650 +367,650 @@
 <span class="sourceLineNo">359</span>    lock.lock();<a name="line.359"></a>
 <span class="sourceLineNo">360</span>    try {<a name="line.360"></a>
 <span class="sourceLineNo">361</span>      LOG.trace("Starting WAL Procedure Store lease recovery");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      FileStatus[] oldLogs = getLogFiles();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      while (isRunning()) {<a name="line.363"></a>
+<span class="sourceLineNo">362</span>      while (isRunning()) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        FileStatus[] oldLogs = getLogFiles();<a name="line.363"></a>
 <span class="sourceLineNo">364</span>        // Get Log-MaxID and recover lease on old logs<a name="line.364"></a>
 <span class="sourceLineNo">365</span>        try {<a name="line.365"></a>
 <span class="sourceLineNo">366</span>          flushLogId = initOldLogs(oldLogs);<a name="line.366"></a>
 <span class="sourceLineNo">367</span>        } catch (FileNotFoundException e) {<a name="line.367"></a>
 <span class="sourceLineNo">368</span>          LOG.warn("Someone else is active and deleted logs. retrying.", e);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          oldLogs = getLogFiles();<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          continue;<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>        // Create new state-log<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          // someone else has already created this log<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          LOG.debug("Someone else has already created log " + flushLogId);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          continue;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        }<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>        // We have the lease on the log<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        oldLogs = getLogFiles();<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          if (LOG.isDebugEnabled()) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>            LOG.debug("Someone else created new logs. Expected maxLogId &lt; " + flushLogId);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>          }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>          continue;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>        LOG.trace("Lease acquired for flushLogId={}", flushLogId);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        break;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      }<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    } finally {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      lock.unlock();<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><a name="line.397"></a>
-<span class="sourceLineNo">398</span>  @Override<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public void load(final ProcedureLoader loader) throws IOException {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    lock.lock();<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    try {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      if (logs.isEmpty()) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>      // Nothing to do, If we have only the current log.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      if (logs.size() == 1) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        LOG.trace("No state logs to replay.");<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        loader.setMaxProcId(0);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        return;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>      // Load the old logs<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      final Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      it.next(); // Skip the current log<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        @Override<a name="line.418"></a>
-<span class="sourceLineNo">419</span>        public void setMaxProcId(long maxProcId) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          loader.setMaxProcId(maxProcId);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>        @Override<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          loader.load(procIter);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>        @Override<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          loader.handleCorrupted(procIter);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        }<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span>        @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          if (corruptedLogs == null) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>          }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>          corruptedLogs.add(log);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          // TODO: sideline corrupted log<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      });<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    } finally {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      try {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        // try to cleanup inactive wals and complete the operation<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        buildHoldingCleanupTracker();<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        tryCleanupLogsOnLoad();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        loading.set(false);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      } finally {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        lock.unlock();<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>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  private void tryCleanupLogsOnLoad() {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    // nothing to cleanup.<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    if (logs.size() &lt;= 1) return;<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span>    // the config says to not cleanup wals on load.<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      return;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>    try {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      periodicRoll();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    } catch (IOException e) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>  }<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>  @Override<a name="line.472"></a>
-<span class="sourceLineNo">473</span>  public void insert(final Procedure proc, final Procedure[] subprocs) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    if (LOG.isTraceEnabled()) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    ByteSlot slot = acquireSlot();<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    try {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      // Serialize the insert<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      long[] subProcIds = null;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (subprocs != null) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>        subProcIds = new long[subprocs.length];<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      } else {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        assert !proc.hasParent();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>      // Push the transaction data and wait until it is persisted<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    } catch (IOException e) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      // We are not able to serialize the procedure.<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      // this is a code error, and we are not able to go on.<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.498"></a>
-<span class="sourceLineNo">499</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      throw new RuntimeException(e);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    } finally {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      releaseSlot(slot);<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>  @Override<a name="line.506"></a>
-<span class="sourceLineNo">507</span>  public void insert(final Procedure[] procs) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    if (LOG.isTraceEnabled()) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      LOG.trace("Insert " + Arrays.toString(procs));<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>    ByteSlot slot = acquireSlot();<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    try {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      // Serialize the insert<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      long[] procIds = new long[procs.length];<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        assert !procs[i].hasParent();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        procIds[i] = procs[i].getProcId();<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>      // Push the transaction data and wait until it is persisted<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    } catch (IOException e) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      // We are not able to serialize the procedure.<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      // this is a code error, and we are not able to go on.<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.527"></a>
-<span class="sourceLineNo">528</span>          Arrays.toString(procs), e);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      throw new RuntimeException(e);<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    } finally {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      releaseSlot(slot);<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    }<a name="line.532"></a>
-<span class="sourceLineNo">533</span>  }<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>  @Override<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  public void update(final Procedure proc) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    if (LOG.isTraceEnabled()) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      LOG.trace("Update " + proc);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    }<a name="line.539"></a>
-<span class="sourceLineNo">540</span><a name="line.540"></a>
-<span class="sourceLineNo">541</span>    ByteSlot slot = acquireSlot();<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    try {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      // Serialize the update<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>      // Push the transaction data and wait until it is persisted<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    } catch (IOException e) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      // We are not able to serialize the procedure.<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      // this is a code error, and we are not able to go on.<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      throw new RuntimeException(e);<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    } finally {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      releaseSlot(slot);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    }<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  }<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>  @Override<a name="line.558"></a>
-<span class="sourceLineNo">559</span>  public void delete(final long procId) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    if (LOG.isTraceEnabled()) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      LOG.trace("Delete " + procId);<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>    ByteSlot slot = acquireSlot();<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    try {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      // Serialize the delete<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>      // Push the transaction data and wait until it is persisted<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    } catch (IOException e) {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>      // We are not able to serialize the procedure.<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      // this is a code error, and we are not able to go on.<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      throw new RuntimeException(e);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    } finally {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      releaseSlot(slot);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    }<a name="line.578"></a>
-<span class="sourceLineNo">579</span>  }<a name="line.579"></a>
-<span class="sourceLineNo">580</span><a name="line.580"></a>
-<span class="sourceLineNo">581</span>  @Override<a name="line.581"></a>
-<span class="sourceLineNo">582</span>  public void delete(final Procedure proc, final long[] subProcIds) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    assert proc != null : "expected a non-null procedure";<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    if (LOG.isTraceEnabled()) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    }<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>    ByteSlot slot = acquireSlot();<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    try {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      // Serialize the delete<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>      // Push the transaction data and wait until it is persisted<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    } catch (IOException e) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      // We are not able to serialize the procedure.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      // this is a code error, and we are not able to go on.<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      throw new RuntimeException(e);<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    } finally {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      releaseSlot(slot);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>  }<a name="line.604"></a>
-<span class="sourceLineNo">605</span><a name="line.605"></a>
-<span class="sourceLineNo">606</span>  @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    if (count == 0) return;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      delete(procIds);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    } else if (count == 1) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      delete(procIds[offset]);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    } else {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    }<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>  private void delete(final long[] procIds) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if (LOG.isTraceEnabled()) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>    final ByteSlot slot = acquireSlot();<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    try {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      // Serialize the delete<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>      // Push the transaction data and wait until it is persisted<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    } catch (IOException e) {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      // We are not able to serialize the procedure.<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      // this is a code error, and we are not able to go on.<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      throw new RuntimeException(e);<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    } finally {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      releaseSlot(slot);<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    }<a name="line.639"></a>
-<span class="sourceLineNo">640</span>  }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>  private ByteSlot acquireSlot() {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    ByteSlot slot = slotsCache.poll();<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    return slot != null ? slot : new ByteSlot();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>  private void releaseSlot(final ByteSlot slot) {<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    slot.reset();<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    slotsCache.offer(slot);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>  }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.652"></a>
-<span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      final long procId, final long[] subProcIds) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    if (!isRunning()) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    if (logs.isEmpty()) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>    long logId = -1;<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    lock.lock();<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    try {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      // Wait for the sync to be completed<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      while (true) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        if (!isRunning()) {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>          throw new RuntimeException("store no longer running");<a name="line.669"></a>
-<span class="sourceLineNo">670</span>        } else if (isSyncAborted()) {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.671"></a>
-<span class="sourceLineNo">672</span>        } else if (inSync.get()) {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          syncCond.await();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>          slotCond.signal();<a name="line.675"></a>
-<span class="sourceLineNo">676</span>          syncCond.await();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>        } else {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>          break;<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        }<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      }<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>      final long pushSyncId = syncId.get();<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      slots[slotIndex++] = slot;<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      logId = flushLogId;<a name="line.685"></a>
-<span class="sourceLineNo">686</span><a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // Notify that there is new data<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      if (slotIndex == 1) {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        waitCond.signal();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      }<a name="line.690"></a>
-<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span>      // Notify that the slots are full<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      if (slotIndex == syncMaxSlot) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>        waitCond.signal();<a name="line.694"></a>
-<span class="sourceLineNo">695</span>        slotCond.signal();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>      }<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span>      while (pushSyncId == syncId.get() &amp;&amp; isRunning()) {<a name="line.698"></a>
-<span class="sourceLineNo">699</span>        syncCond.await();<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      }<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    } catch (InterruptedException e) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      Thread.currentThread().interrupt();<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      sendAbortProcessSignal();<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      throw new RuntimeException(e);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    } finally {<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      lock.unlock();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      if (isSyncAborted()) {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>        throw new RuntimeException("sync aborted", syncException.get());<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      }<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    }<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    return logId;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>  private void updateStoreTracker(final PushType type,<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      final long procId, final long[] subProcIds) {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    switch (type) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      case INSERT:<a name="line.717"></a>
-<span class="sourceLineNo">718</span>        if (subProcIds == null) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          storeTracker.insert(procId);<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        } else if (procId == Procedure.NO_PROC_ID) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          storeTracker.insert(subProcIds);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        } else {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          storeTracker.insert(procId, subProcIds);<a name="line.723"></a>
-<span class="sourceLineNo">724</span>          holdingCleanupTracker.setDeletedIfSet(procId);<a name="line.724"></a>
-<span class="sourceLineNo">725</span>        }<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        break;<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      case UPDATE:<a name="line.727"></a>
-<span class="sourceLineNo">728</span>        storeTracker.update(procId);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>        holdingCleanupTracker.setDeletedIfSet(procId);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        break;<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      case DELETE:<a name="line.731"></a>
-<span class="sourceLineNo">732</span>        if (subProcIds != null &amp;&amp; subProcIds.length &gt; 0) {<a name="line.732"></a>
-<span class="sourceLineNo">733</span>          storeTracker.delete(subProcIds);<a name="line.733"></a>
-<span class="sourceLineNo">734</span>          holdingCleanupTracker.setDeletedIfSet(subProcIds);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>        } else {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          storeTracker.delete(procId);<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          holdingCleanupTracker.setDeletedIfSet(procId);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>        }<a name="line.738"></a>
-<span class="sourceLineNo">739</span>        break;<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      default:<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        throw new RuntimeException("invalid push type " + type);<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    }<a name="line.742"></a>
-<span class="sourceLineNo">743</span>  }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span>  private boolean isSyncAborted() {<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    return syncException.get() != null;<a name="line.746"></a>
-<span class="sourceLineNo">747</span>  }<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span>  private void syncLoop() throws Throwable {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>    long totalSyncedToStore = 0;<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    inSync.set(false);<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    lock.lock();<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    try {<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      while (isRunning()) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>        try {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>          // Wait until new data is available<a name="line.756"></a>
-<span class="sourceLineNo">757</span>          if (slotIndex == 0) {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>            if (!loading.get()) {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>              periodicRoll();<a name="line.759"></a>
-<span class="sourceLineNo">760</span>            }<a name="line.760"></a>
-<span class="sourceLineNo">761</span><a name="line.761"></a>
-<span class="sourceLineNo">762</span>            if (LOG.isTraceEnabled()) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>              float rollTsSec = getMillisFromLastRoll() / 1000.0f;<a name="line.763"></a>
-<span class="sourceLineNo">764</span>              LOG.trace(String.format("Waiting for data. flushed=%s (%s/sec)",<a name="line.764"></a>
-<span class="sourceLineNo">765</span>                        StringUtils.humanSize(totalSynced.get()),<a name="line.765"></a>
-<span class="sourceLineNo">766</span>                        StringUtils.humanSize(totalSynced.get() / rollTsSec)));<a name="line.766"></a>
-<span class="sourceLineNo">767</span>            }<a name="line.767"></a>
-<span class="sourceLineNo">768</span><a name="line.768"></a>
-<span class="sourceLineNo">769</span>            waitCond.await(getMillisToNextPeriodicRoll(), TimeUnit.MILLISECONDS);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>            if (slotIndex == 0) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>              // no data.. probably a stop() or a periodic roll<a name="line.771"></a>
-<span class="sourceLineNo">772</span>              continue;<a name="line.772"></a>
-<span class="sourceLineNo">773</span>            }<a name="line.773"></a>
-<span class="sourceLineNo">774</span>          }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>          // Wait SYNC_WAIT_MSEC or the signal of "slots full" before flushing<a name="line.775"></a>
-<span class="sourceLineNo">776</span>          syncMaxSlot = runningProcCount;<a name="line.776"></a>
-<span class="sourceLineNo">777</span>          assert syncMaxSlot &gt; 0 : "unexpected syncMaxSlot=" + syncMaxSlot;<a name="line.777"></a>
-<span class="sourceLineNo">778</span>          final long syncWaitSt = System.currentTimeMillis();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>          if (slotIndex != syncMaxSlot) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>            slotCond.await(syncWaitMsec, TimeUnit.MILLISECONDS);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>          }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>          final long currentTs = System.currentTimeMillis();<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          final long syncWaitMs = currentTs - syncWaitSt;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>          final float rollSec = getMillisFromLastRoll() / 1000.0f;<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          final float syncedPerSec = totalSyncedToStore / rollSec;<a name="line.786"></a>
-<span class="sourceLineNo">787</span>          if (LOG.isTraceEnabled() &amp;&amp; (syncWaitMs &gt; 10 || slotIndex &lt; syncMaxSlot)) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>            LOG.trace(String.format("Sync wait %s, slotIndex=%s , totalSynced=%s (%s/sec)",<a name="line.788"></a>
-<span class="sourceLineNo">789</span>                      StringUtils.humanTimeDiff(syncWaitMs), slotIndex,<a name="line.789"></a>
-<span class="sourceLineNo">790</span>                      StringUtils.humanSize(totalSyncedToStore),<a name="line.790"></a>
-<span class="sourceLineNo">791</span>                      StringUtils.humanSize(syncedPerSec)));<a name="line.791"></a>
-<span class="sourceLineNo">792</span>          }<a name="line.792"></a>
-<span class="sourceLineNo">793</span><a name="line.793"></a>
-<span class="sourceLineNo">794</span>          // update webui circular buffers (TODO: get rid of allocations)<a name="line.794"></a>
-<span class="sourceLineNo">795</span>          final SyncMetrics syncMetrics = new SyncMetrics();<a name="line.795"></a>
-<span class="sourceLineNo">796</span>          syncMetrics.timestamp = currentTs;<a name="line.796"></a>
-<span class="sourceLineNo">797</span>          syncMetrics.syncWaitMs = syncWaitMs;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>          syncMetrics.syncedEntries = slotIndex;<a name="line.798"></a>
-<span class="sourceLineNo">799</span>          syncMetrics.totalSyncedBytes = totalSyncedToStore;<a name="line.799"></a>
-<span class="sourceLineNo">800</span>          syncMetrics.syncedPerSec = syncedPerSec;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>          syncMetricsQueue.add(syncMetrics);<a name="line.801"></a>
-<span class="sourceLineNo">802</span><a name="line.802"></a>
-<span class="sourceLineNo">803</span>          // sync<a name="line.803"></a>
-<span class="sourceLineNo">804</span>          inSync.set(true);<a name="line.804"></a>
-<span class="sourceLineNo">805</span>          long slotSize = syncSlots();<a name="line.805"></a>
-<span class="sourceLineNo">806</span>          logs.getLast().addToSize(slotSize);<a name="line.806"></a>
-<span class="sourceLineNo">807</span>          totalSyncedToStore = totalSynced.addAndGet(slotSize);<a name="line.807"></a>
-<span class="sourceLineNo">808</span>          slotIndex = 0;<a name="line.808"></a>
-<span class="sourceLineNo">809</span>          inSync.set(false);<a name="line.809"></a>
-<span class="sourceLineNo">810</span>          syncId.incrementAndGet();<a name="line.810"></a>
-<span class="sourceLineNo">811</span>        } catch (InterruptedException e) {<a name="line.811"></a>
-<span class="sourceLineNo">812</span>          Thread.currentThread().interrupt();<a name="line.812"></a>
-<span class="sourceLineNo">813</span>          syncException.compareAndSet(null, e);<a name="line.813"></a>
-<span class="sourceLineNo">814</span>          sendAbortProcessSignal();<a name="line.814"></a>
-<span class="sourceLineNo">815</span>          throw e;<a name="line.815"></a>
-<span class="sourceLineNo">816</span>        } catch (Throwable t) {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>          syncException.compareAndSet(null, t);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>          sendAbortProcessSignal();<a name="line.818"></a>
-<span class="sourceLineNo">819</span>          throw t;<a name="line.819"></a>
-<span class="sourceLineNo">820</span>        } finally {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>          syncCond.signalAll();<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        }<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      }<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    } finally {<a name="line.824"></a>
-<span class="sourceLineNo">825</span>      lock.unlock();<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>  }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
-<span class="sourceLineNo">829</span>  public ArrayList&lt;SyncMetrics&gt; getSyncMetrics() {<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    lock.lock();<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    try {<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      return new ArrayList&lt;&gt;(syncMetricsQueue);<a name="line.832"></a>
-<span class="sourceLineNo">833</span>    } finally {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>      lock.unlock();<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    }<a name="line.835"></a>
-<span class="sourceLineNo">836</span>  }<a name="line.836"></a>
-<span class="sourceLineNo">837</span><a name="line.837"></a>
-<span class="sourceLineNo">838</span>  private long syncSlots() throws Throwable {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    int retry = 0;<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    int logRolled = 0;<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    long totalSynced = 0;<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    do {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      try {<a name="line.843"></a>
-<span class="sourceLineNo">844</span>        totalSynced = syncSlots(stream, slots, 0, slotIndex);<a name="line.844"></a>
-<span class="sourceLineNo">845</span>        break;<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      } catch (Throwable e) {<a name="line.846"></a>
-<span class="sourceLineNo">847</span>        LOG.warn("unable to sync slots, retry=" + retry);<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        if (++retry &gt;= maxRetriesBeforeRoll) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>          if (logRolled &gt;= maxSyncFailureRoll &amp;&amp; isRunning()) {<a name="line.849"></a>
-<span class="sourceLineNo">850</span>            LOG.error("Sync slots after log roll failed, abort.", e);<a name="line.850"></a>
-<span class="sourceLineNo">851</span>            throw e;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>          }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>          if (!rollWriterWithRetries()) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>            throw e;<a name="line.855"></a>
-<span class="sourceLineNo">856</span>          }<a name="line.856"></a>
-<span class="sourceLineNo">857</span><a name="line.857"></a>
-<span class="sourceLineNo">858</span>          logRolled++;<a name="line.858"></a>
-<span class="sourceLineNo">859</span>          retry = 0;<a name="line.859"></a>
-<span class="sourceLineNo">860</span>        }<a name="line.860"></a>
-<span class="sourceLineNo">861</span>      }<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    } while (isRunning());<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    return totalSynced;<a name="line.863"></a>
-<span class="sourceLineNo">864</span>  }<a name="line.864"></a>
-<span class="sourceLineNo">865</span><a name="line.865"></a>
-<span class="sourceLineNo">866</span>  protected long syncSlots(final FSDataOutputStream stream, final ByteSlot[] slots,<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      final int offset, final int count) throws IOException {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    long totalSynced = 0;<a name="line.868"></a>
-<span class="sourceLineNo">869</span>    for (int i = 0; i &lt; count; ++i) {<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      final ByteSlot data = slots[offset + i];<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      data.writeTo(stream);<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      totalSynced += data.size();<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    }<a name="line.873"></a>
-<span class="sourceLineNo">874</span><a name="line.874"></a>
-<span class="sourceLineNo">875</span>    syncStream(stream);<a name="line.875"></a>
-<span class="sourceLineNo">876</span>    sendPostSyncSignal();<a name="line.876"></a>
-<span class="sourceLineNo">877</span><a name="line.877"></a>
-<span class="sourceLineNo">878</span>    if (LOG.isTraceEnabled()) {<a name="line.878"></a>
-<span class="sourceLineNo">879</span>      LOG.trace("Sync slots=" + count + '/' + syncMaxSlot +<a name="line.879"></a>
-<span class="sourceLineNo">880</span>                ", flushed=" + StringUtils.humanSize(totalSynced));<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    }<a name="line.881"></a>
-<span class="sourceLineNo">882</span>    return totalSynced;<a name="line.882"></a>
-<span class="sourceLineNo">883</span>  }<a name="line.883"></a>
-<span class="sourceLineNo">884</span><a name="line.884"></a>
-<span class="sourceLineNo">885</span>  protected void syncStream(final FSDataOutputStream stream) throws IOException {<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    if (useHsync) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      stream.hsync();<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    } else {<a name="line.888"></a>
-<span class="sourceLineNo">889</span>      stream.hflush();<a name="line.889"></a>
-<span class="sourceLineNo">890</span>    }<a name="line.890"></a>
-<span class="sourceLineNo">891</span>  }<a name="line.891"></a>
-<span class="sourceLineNo">892</span><a name="line.892"></a>
-<span class="sourceLineNo">893</span>  private boolean rollWriterWithRetries() {<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    for (int i = 0; i &lt; rollRetries &amp;&amp; isRunning(); ++i) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>      if (i &gt; 0) Threads.sleepWithoutInterrupt(waitBeforeRoll * i);<a name="line.895"></a>
-<span class="sourceLineNo">896</span><a name="line.896"></a>
-<span class="sourceLineNo">897</span>      try {<a name="line.897"></a>
-<span class="sourceLineNo">898</span>        if (rollWriter()) {<a name="line.898"></a>
-<span class="sourceLineNo">899</span>          return true;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>        }<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      } catch (IOException e) {<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        LOG.warn("Unable to roll the log, attempt=" + (i + 1), e);<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      }<a name="line.903"></a>
-<span class="sourceLineNo">904</span>    }<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    LOG.error(HBaseMarkers.FATAL, "Unable to roll the log");<a name="line.905"></a>
-<span class="sourceLineNo">906</span>    return false;<a name="line.906"></a>
-<span class="sourceLineNo">907</span>  }<a name="line.907"></a>
-<span class="sourceLineNo">908</span><a name="line.908"></a>
-<span class="sourceLineNo">909</span>  private boolean tryRollWriter() {<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    try {<a name="line.910"></a>
-<span class="sourceLineNo">911</span>      return rollWriter();<a name="line.911"></a>
-<span class="sourceLineNo">912</span>    } catch (IOException e) {<a name="line.912"></a>
-<span class="sourceLineNo">913</span>      LOG.warn("Unable to roll the log", e);<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      return false;<a name="line.914"></a>
-<span class="sourceLineNo">915</span>    }<a name="line.915"></a>
-<span class="sourceLineNo">916</span>  }<a name="line.916"></a>
-<span class="sourceLineNo">917</span><a name="line.917"></a>
-<span class="sourceLineNo">918</span>  public long getMillisToNextPeriodicRoll() {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    if (lastRollTs.get() &gt; 0 &amp;&amp; periodicRollMsec &gt; 0) {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      return periodicRollMsec - getMillisFromLastRoll();<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    }<a name="line.921"></a>
-<span class="sourceLineNo">922</span>    return Long.MAX_VALUE;<a name="line.922"></a>
-<span class="sourceLineNo">923</span>  }<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span>  public long getMillisFromLastRoll() {<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    return (System.currentTimeMillis() - lastRollTs.get());<a name="line.926"></a>
-<span class="sourceLineNo">927</span>  }<a name="line.927"></a>
-<span class="sourceLineNo">928</span><a name="line.928"></a>
-<span class="sourceLineNo">929</span>  @VisibleForTesting<a name="line.929"></a>
-<span class="sourceLineNo">930</span>  protected void periodicRollForTesting() throws IOException {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    lock.lock();<a name="line.931"></a>
-<span class="sourceLineNo">932</span>    try {<a name="line.932"></a>
-<span class="sourceLineNo">933</span>      periodicRoll();<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    } finally {<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      lock.unlock();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    }<a name="line.936"></a>
-<span class="sourceLineNo">937</span>  }<a name="line.937"></a>
-<span class="sourceLineNo">938</span><a name="line.938"></a>
-<span class="sourceLineNo">939</span>  @VisibleForTesting<a name="line.939"></a>
-<span class="sourceLineNo">940</span>  protected boolean rollWriterForTesting() throws IOException {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    lock.lock();<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    try {<a name="line.942"></a>
-<span class="sourceLineNo">943</span>      return rollWriter();<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    } finally {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>      lock.unlock();<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    }<a name="line.946"></a>
-<span class="sourceLineNo">947</span>  }<a name="line.947"></a>
-<span class="sourceLineNo">948</span><a name="line.948"></a>
-<span class="sourceLineNo">949</span>  @VisibleForTesting<a name="line.949"></a>
-<span class="sourceLineNo">950</span>  protected void removeInactiveLogsForTesting() throws Exception {<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    lock.lock();<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    try {<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      removeInactiveLogs();<a name="line.953"></a>
-<span class="sourceLineNo">954</span>    } finally  {<a name="line.954"></a>
-<span class="sourceLineNo">955</span>      lock.unlock();<a name="line.955"></a>
-<span class="sourceLineNo">956</span>    }<a name="line.956"></a>
-<span class="sourceLineNo">957</span>  }<a name="line.957"></a>
-<span class="sourceLineNo">958</span><a name="line.958"></a>
-<span class="sourceLineNo">959</span>  private void periodicRoll() throws IOException {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    if (storeTracker.isEmpty()) {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      if (LOG.isTraceEnabled()) {<a name="line.961"></a>
-<span class="sourceLineNo">962</span>        LOG.trace("no active procedures");<a name="line.962"></a>
-<span class="sourceLineNo">963</span>      }<a name="line.963"></a>
-<span class="sourceLineNo">964</span>      tryRollWriter();<a name="line.964"></a>
-<span class="sourceLineNo">965</span>      removeAllLogs(flushLogId - 1);<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    } else {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>      if (storeTracker.isUpdated()) {<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        if (LOG.isTraceEnabled()) {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          LOG.trace("all the active procedures are in the latest log");<a name="line.969"></a>
-<span class="sourceLineNo">970</span>        }<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        removeAllLogs(flushLogId - 1);<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      }<a name="line.972"></a>
-<span class="sourceLineNo">973</span><a name="line.973"></a>
-<span class="sourceLineNo">974</span>      // if the log size has exceeded the roll threshold<a name="line.974"></a>
-<span class="sourceLineNo">975</span>      // or the periodic roll timeout is expired, try to roll the wal.<a name="line.975"></a>
-<span class="sourceLineNo">976</span>      if (totalSynced.get() &gt; rollThreshold || getMillisToNextPeriodicRoll() &lt;= 0) {<a name="line.976"></a>
-<span class="sourceLineNo">977</span>        tryRollWriter();<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      }<a name="line.978"></a>
-<span class="sourceLineNo">979</span><a name="line.979"></a>
-<span class="sourceLineNo">980</span>      removeInactiveLogs();<a name="line.980"></a>
-<span class="sourceLineNo">981</span>    }<a name="line.981"></a>
-<span class="sourceLineNo">982</span>  }<a name="line.982"></a>
-<span class="sourceLineNo">983</span><a name="line.983"></a>
-<span class="sourceLineNo">984</span>  private boolean rollWriter() throws IOException {<a name="line.984"></a>
-<span class="sourceLineNo">985</span>    if (!isRunning()) return false;<a name="line.985"></a>
-<span class="sourceLineNo">986</span><a name="line.986"></a>
-<span class="sourceLineNo">987</span>    // Create new state-log<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    if (!rollWriter(flushLogId + 1)) {<a name="line.988"></a>
-<span class="sourceLineNo">989</span>      LOG.warn("someone else has already created log " + flushLogId);<a name="line.989"></a>
-<span class="sourceLineNo">990</span>      return false;<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    }<a name="line.991"></a>
-<span class="sourceLineNo">992</span><a name="line.992"></a>
-<span class="sourceLineNo">993</span>    // We have the lease on the log,<a name="line.993"></a>
-<span class="sourceLineNo">994</span>    // but we should check if someone else has created new files<a name="line.994"></a>
-<span class="sourceLineNo">995</span>    if (getMaxLogId(getLogFiles()) &gt; flushLogId) {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>      LOG.warn("Someone else created new logs. Expected maxLogId &lt; " + flushLogId);<a name="line.996"></a>
-<span class="sourceLineNo">997</span>      logs.getLast().removeFile(this.walArchiveDir);<a name="line.997"></a>
-<span class="sourceLineNo">998</span>      return false;<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    }<a name="line.999"></a>
-<span class="sourceLineNo">1000</span><a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    // We have the lease on the log<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>    return true;<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>  }<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span><a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>  private boolean rollWriter(final long logId) throws IOException {<a name="line.1005"></a>
+<span class="sourceLineNo">369</span>          continue;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>        // Create new state-log<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>          // someone else has already created this log<a name="line.374"></a>
+<span class="sourceLineNo">375</span>          LOG.debug("Someone else has already created log {}. Retrying.", flushLogId);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>          continue;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>        // We have the lease on the log<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        oldLogs = getLogFiles();<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          if (LOG.isDebugEnabled()) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            LOG.debug("Someone else created new logs. Expected maxLogId &lt; " + flushLogId);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          continue;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span>        LOG.trace("Lease acquired for flushLogId={}", flushLogId);<a name="line.389"></a>
+<span class="sourceLineNo">390</span>        break;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      }<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    } finally {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      lock.unlock();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  public void load(final ProcedureLoader loader) throws IOException {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    lock.lock();<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      if (logs.isEmpty()) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>      // Nothing to do, If we have only the current log.<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (logs.size() == 1) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        LOG.trace("No state logs to replay.");<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        loader.setMaxProcId(0);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        return;<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      }<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span>      // Load the old logs<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      final Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      it.next(); // Skip the current log<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        @Override<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        public void setMaxProcId(long maxProcId) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          loader.setMaxProcId(maxProcId);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>        @Override<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>          loader.load(procIter);<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        }<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span>        @Override<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          loader.handleCorrupted(procIter);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        }<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>        @Override<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          if (corruptedLogs == null) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          }<a name="line.436"></a>
+<span class="sourceLineNo">437</span>          corruptedLogs.add(log);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>          // TODO: sideline corrupted log<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        }<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      });<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    } finally {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      try {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        // try to cleanup inactive wals and complete the operation<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        buildHoldingCleanupTracker();<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        tryCleanupLogsOnLoad();<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        loading.set(false);<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      } finally {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        lock.unlock();<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><a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private void tryCleanupLogsOnLoad() {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    // nothing to cleanup.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    if (logs.size() &lt;= 1) return;<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span>    // the config says to not cleanup wals on load.<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      return;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
+<span class="sourceLineNo">463</span><a name="line.463"></a>
+<span class="sourceLineNo">464</span>    try {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      periodicRoll();<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    } catch (IOException e) {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    }<a name="line.468"></a>
+<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
+<span class="sourceLineNo">470</span><a name="line.470"></a>
+<span class="sourceLineNo">471</span>  @Override<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  public void insert(final Procedure proc, final Procedure[] subprocs) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    if (LOG.isTraceEnabled()) {<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
+<span class="sourceLineNo">476</span><a name="line.476"></a>
+<span class="sourceLineNo">477</span>    ByteSlot slot = acquireSlot();<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    try {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>      // Serialize the insert<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      long[] subProcIds = null;<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      if (subprocs != null) {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        subProcIds = new long[subprocs.length];<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        }<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      } else {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        assert !proc.hasParent();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      }<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>      // Push the transaction data and wait until it is persisted<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    } catch (IOException e) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      // We are not able to serialize the procedure.<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      // this is a code error, and we are not able to go on.<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.497"></a>
+<span class="sourceLineNo">498</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      throw new RuntimeException(e);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>    } finally {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      releaseSlot(slot);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
+<span class="sourceLineNo">503</span>  }<a name="line.503"></a>
+<span class="sourceLineNo">504</span><a name="line.504"></a>
+<span class="sourceLineNo">505</span>  @Override<a name="line.505"></a>
+<span class="sourceLineNo">506</span>  public void insert(final Procedure[] procs) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    if (LOG.isTraceEnabled()) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      LOG.trace("Insert " + Arrays.toString(procs));<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
+<span class="sourceLineNo">510</span><a name="line.510"></a>
+<span class="sourceLineNo">511</span>    ByteSlot slot = acquireSlot();<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    try {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      // Serialize the insert<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      long[] procIds = new long[procs.length];<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        assert !procs[i].hasParent();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        procIds[i] = procs[i].getProcId();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      }<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>      // Push the transaction data and wait until it is persisted<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    } catch (IOException e) {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      // We are not able to serialize the procedure.<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      // this is a code error, and we are not able to go on.<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.526"></a>
+<span class="sourceLineNo">527</span>          Arrays.toString(procs), e);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      throw new RuntimeException(e);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    } finally {<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      releaseSlot(slot);<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span>  }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>  @Override<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  public void update(final Procedure proc) {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    if (LOG.isTraceEnabled()) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      LOG.trace("Update " + proc);<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    }<a name="line.538"></a>
+<span class="sourceLineNo">539</span><a name="line.539"></a>
+<span class="sourceLineNo">540</span>    ByteSlot slot = acquireSlot();<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    try {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      // Serialize the update<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.543"></a>
+<span class="sourceLineNo">544</span><a name="line.544"></a>
+<span class="sourceLineNo">545</span>      // Push the transaction data and wait until it is persisted<a name="line.545"></a>
+<span class="sourceLineNo">546</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    } catch (IOException e) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      // We are not able to serialize the procedure.<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      // this is a code error, and we are not able to go on.<a name="line.549"></a>
+<span class="sourceLineNo">550</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      throw new RuntimeException(e);<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    } finally {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      releaseSlot(slot);<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span>  @Override<a name="line.557"></a>
+<span class="sourceLineNo">558</span>  public void delete(final long procId) {<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    if (LOG.isTraceEnabled()) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      LOG.trace("Delete " + procId);<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    ByteSlot slot = acquireSlot();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      // Serialize the delete<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.566"></a>
+<span class="sourceLineNo">567</span><a name="line.567"></a>
+<span class="sourceLineNo">568</span>      // Push the transaction data and wait until it is persisted<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    } catch (IOException e) {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      // We are not able to serialize the procedure.<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      // this is a code error, and we are not able to go on.<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.573"></a>
+<span class="sourceLineNo">574</span>      throw new RuntimeException(e);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    } finally {<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      releaseSlot(slot);<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
+<span class="sourceLineNo">579</span><a name="line.579"></a>
+<span class="sourceLineNo">580</span>  @Override<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  public void delete(final Procedure proc, final long[] subProcIds) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    assert proc != null : "expected a non-null procedure";<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    if (LOG.isTraceEnabled()) {<a name="line.584"></a>
+<span class="sourceLineNo">585</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    }<a name="line.586"></a>
+<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">588</span>    ByteSlot slot = acquireSlot();<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    try {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>      // Serialize the delete<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>      // Push the transaction data and wait until it is persisted<a name="line.593"></a>
+<span class="sourceLineNo">594</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>    } catch (IOException e) {<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      // We are not able to serialize the procedure.<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      // this is a code error, and we are not able to go on.<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      throw new RuntimeException(e);<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    } finally {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      releaseSlot(slot);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    }<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  }<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span>  @Override<a name="line.605"></a>
+<span class="sourceLineNo">606</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    if (count == 0) return;<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      delete(procIds);<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    } else if (count == 1) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      delete(procIds[offset]);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    } else {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
+<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>  private void delete(final long[] procIds) {<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    if (LOG.isTraceEnabled()) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    }<a name="line.620"></a>
+<span class="sourceLineNo">621</span><a name="line.621"></a>
+<span class="sourceLineNo">622</span>    final ByteSlot slot = acquireSlot();<a name="line.622"></a>
+<span class="sourceLineNo">623</span>    try {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>      // Serialize the delete<a name="line.624"></a>
+<span class="sourceLineNo">625</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      }<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span>      // Push the transaction data and wait until it is persisted<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    } catch (IOException e) {<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      // We are not able to serialize the procedure.<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      // this is a code error, and we are not able to go on.<a name="line.633"></a>
+<span class="sourceLineNo">634</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      throw new RuntimeException(e);<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    } finally {<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      releaseSlot(slot);<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    }<a name="line.638"></a>
+<span class="sourceLineNo">639</span>  }<a name="line.639"></a>
+<span class="sourceLineNo">640</span><a name="line.640"></a>
+<span class="sourceLineNo">641</span>  private ByteSlot acquireSlot() {<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    ByteSlot slot = slotsCache.poll();<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    return slot != null ? slot : new ByteSlot();<a name="line.643"></a>
+<span class="sourceLineNo">644</span>  }<a name="line.644"></a>
+<span class="sourceLineNo">645</span><a name="line.645"></a>
+<span class="sourceLineNo">646</span>  private void releaseSlot(final ByteSlot slot) {<a name="line.646"></a>
+<span class="sourceLineNo">647</span>    slot.reset();<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    slotsCache.offer(slot);<a name="line.648"></a>
+<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.651"></a>
+<span class="sourceLineNo">652</span><a name="line.652"></a>
+<span class="sourceLineNo">653</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      final long procId, final long[] subProcIds) {<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    if (!isRunning()) {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.656"></a>
+<span class="sourceLineNo">657</span>    }<a name="line.657"></a>
+<span class="sourceLineNo">658</span>    if (logs.isEmpty()) {<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.659"></a>
+<span class="sourceLineNo">660</span>    }<a name="line.660"></a>
+<span class="sourceLineNo">661</span><a name="line.661"></a>
+<span class="sourceLineNo">662</span>    long logId = -1;<a name="line.662"></a>
+<span class="sourceLineNo">663</span>    lock.lock();<a name="line.663"></a>
+<span class="sourceLineNo">664</span>    try {<a name="line.664"></a>
+<span class="sourceLineNo">665</span>      // Wait for the sync to be completed<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      while (true) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>        if (!isRunning()) {<a name="line.667"></a>
+<span class="sourceLineNo">668</span>          throw new RuntimeException("store no longer running");<a name="line.668"></a>
+<span class="sourceLineNo">669</span>        } else if (isSyncAborted()) {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.670"></a>
+<span class="sourceLineNo">671</span>        } else if (inSync.get()) {<a name="line.671"></a>
+<span class="sourceLineNo">672</span>          syncCond.await();<a name="line.672"></a>
+<span class="sourceLineNo">673</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>          slotCond.signal();<a name="line.674"></a>
+<span class="sourceLineNo">675</span>          syncCond.await();<a name="line.675"></a>
+<span class="sourceLineNo">676</span>        } else {<a name="line.676"></a>
+<span class="sourceLineNo">677</span>          break;<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        }<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      }<a name="line.679"></a>
+<span class="sourceLineNo">680</span><a name="line.680"></a>
+<span class="sourceLineNo">681</span>      final long pushSyncId = syncId.get();<a name="line.681"></a>
+<span class="sourceLineNo">682</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      slots[slotIndex++] = slot;<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      logId = flushLogId;<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>      // Notify that there is new data<a name=

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html
index cdb80a0..b442170 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html
@@ -126,227 +126,226 @@
 <span class="sourceLineNo">118</span>      final long openSeqNum = -1;<a name="line.118"></a>
 <span class="sourceLineNo">119</span><a name="line.119"></a>
 <span class="sourceLineNo">120</span>      // TODO: move under trace, now is visible for debugging<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      LOG.info(String.format("Load hbase:meta entry region=%s regionState=%s lastHost=%s regionLocation=%s",<a name="line.121"></a>
-<span class="sourceLineNo">122</span>        regionInfo, state, lastHost, regionLocation));<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>      visitor.visitRegionState(regionInfo, state, regionLocation, lastHost, openSeqNum);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public void updateRegionLocation(RegionStates.RegionStateNode regionStateNode)<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      throws IOException {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    if (regionStateNode.getRegionInfo().isMetaRegion()) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      updateMetaLocation(regionStateNode.getRegionInfo(), regionStateNode.getRegionLocation());<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    } else {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      long openSeqNum = regionStateNode.getState() == State.OPEN ?<a name="line.133"></a>
-<span class="sourceLineNo">134</span>          regionStateNode.getOpenSeqNum() : HConstants.NO_SEQNUM;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      updateUserRegionLocation(regionStateNode.getRegionInfo(), regionStateNode.getState(),<a name="line.135"></a>
-<span class="sourceLineNo">136</span>          regionStateNode.getRegionLocation(), regionStateNode.getLastHost(), openSeqNum,<a name="line.136"></a>
-<span class="sourceLineNo">137</span>          regionStateNode.getProcedure().getProcId());<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  private void updateMetaLocation(final RegionInfo regionInfo, final ServerName serverName)<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      throws IOException {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    try {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      MetaTableLocator.setMetaLocation(master.getZooKeeper(), serverName,<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        regionInfo.getReplicaId(), State.OPEN);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    } catch (KeeperException e) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      throw new IOException(e);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private void updateUserRegionLocation(final RegionInfo regionInfo, final State state,<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      final ServerName regionLocation, final ServerName lastHost, final long openSeqNum,<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      final long pid)<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      throws IOException {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    long time = EnvironmentEdgeManager.currentTime();<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    final int replicaId = regionInfo.getReplicaId();<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    final Put put = new Put(MetaTableAccessor.getMetaKeyForRegion(regionInfo), time);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    MetaTableAccessor.addRegionInfo(put, regionInfo);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    final StringBuilder info =<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      new StringBuilder("pid=").append(pid).append(" updating hbase:meta row=")<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        .append(regionInfo.getRegionNameAsString()).append(", regionState=").append(state);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    if (openSeqNum &gt;= 0) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      Preconditions.checkArgument(state == State.OPEN &amp;&amp; regionLocation != null,<a name="line.163"></a>
-<span class="sourceLineNo">164</span>          "Open region should be on a server");<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      MetaTableAccessor.addLocation(put, regionLocation, openSeqNum, replicaId);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      // only update replication barrier for default replica<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      if (regionInfo.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID &amp;&amp;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        hasGlobalReplicationScope(regionInfo.getTable())) {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        MetaTableAccessor.addReplicationBarrier(put, openSeqNum);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      info.append(", openSeqNum=").append(openSeqNum);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      info.append(", regionLocation=").append(regionLocation);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    } else if (regionLocation != null &amp;&amp; !regionLocation.equals(lastHost)) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      // Ideally, if no regionLocation, write null to the hbase:meta but this will confuse clients<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      // currently; they want a server to hit. TODO: Make clients wait if no location.<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      put.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.176"></a>
-<span class="sourceLineNo">177</span>          .setRow(put.getRow())<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          .setFamily(HConstants.CATALOG_FAMILY)<a name="line.178"></a>
-<span class="sourceLineNo">179</span>          .setQualifier(getServerNameColumn(replicaId))<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          .setTimestamp(put.getTimestamp())<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          .setType(Cell.Type.Put)<a name="line.181"></a>
-<span class="sourceLineNo">182</span>          .setValue(Bytes.toBytes(regionLocation.getServerName()))<a name="line.182"></a>
-<span class="sourceLineNo">183</span>          .build());<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      info.append(", regionLocation=").append(regionLocation);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    put.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        .setRow(put.getRow())<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        .setFamily(HConstants.CATALOG_FAMILY)<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        .setQualifier(getStateColumn(replicaId))<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        .setTimestamp(put.getTimestamp())<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        .setType(Cell.Type.Put)<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        .setValue(Bytes.toBytes(state.name()))<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        .build());<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    LOG.info(info.toString());<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    updateRegionLocation(regionInfo, state, put);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  }<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>  private void updateRegionLocation(RegionInfo regionInfo, State state, Put put)<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      throws IOException {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    try (Table table = master.getConnection().getTable(TableName.META_TABLE_NAME)) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      table.put(put);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    } catch (IOException e) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      // TODO: Revist!!!! Means that if a server is loaded, then we will abort our host!<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      // In tests we abort the Master!<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      String msg = String.format("FAILED persisting region=%s state=%s",<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        regionInfo.getShortNameToLog(), state);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      LOG.error(msg, e);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      master.abort(msg, e);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      throw e;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>  private long getOpenSeqNumForParentRegion(RegionInfo region) throws IOException {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    MasterFileSystem mfs = master.getMasterFileSystem();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    long maxSeqId =<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        WALSplitter.getMaxRegionSequenceId(mfs.getFileSystem(), mfs.getRegionDir(region));<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    return maxSeqId &gt; 0 ? maxSeqId + 1 : HConstants.NO_SEQNUM;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  }<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>  // ============================================================================================<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  //  Update Region Splitting State helpers<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  // ============================================================================================<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  public void splitRegion(RegionInfo parent, RegionInfo hriA, RegionInfo hriB,<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      ServerName serverName) throws IOException {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    TableDescriptor htd = getTableDescriptor(parent.getTable());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    long parentOpenSeqNum = HConstants.NO_SEQNUM;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    if (htd.hasGlobalReplicationScope()) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      parentOpenSeqNum = getOpenSeqNumForParentRegion(parent);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    MetaTableAccessor.splitRegion(master.getConnection(), parent, parentOpenSeqNum, hriA, hriB,<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      serverName, getRegionReplication(htd));<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>  // ============================================================================================<a name="line.234"></a>
-<span class="sourceLineNo">235</span>  //  Update Region Merging State helpers<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  // ============================================================================================<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  public void mergeRegions(RegionInfo child, RegionInfo hriA, RegionInfo hriB,<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      ServerName serverName) throws IOException {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    TableDescriptor htd = getTableDescriptor(child.getTable());<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    long regionAOpenSeqNum = -1L;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    long regionBOpenSeqNum = -1L;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    if (htd.hasGlobalReplicationScope()) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      regionAOpenSeqNum = getOpenSeqNumForParentRegion(hriA);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      regionBOpenSeqNum = getOpenSeqNumForParentRegion(hriB);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    MetaTableAccessor.mergeRegions(master.getConnection(), child, hriA, regionAOpenSeqNum, hriB,<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      regionBOpenSeqNum, serverName, getRegionReplication(htd));<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  // ============================================================================================<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  //  Delete Region State helpers<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  // ============================================================================================<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public void deleteRegion(final RegionInfo regionInfo) throws IOException {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    deleteRegions(Collections.singletonList(regionInfo));<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>  public void deleteRegions(final List&lt;RegionInfo&gt; regions) throws IOException {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    MetaTableAccessor.deleteRegions(master.getConnection(), regions);<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>  //  Table Descriptors helpers<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  // ==========================================================================<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  private boolean hasGlobalReplicationScope(TableName tableName) throws IOException {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    return hasGlobalReplicationScope(getTableDescriptor(tableName));<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>  private boolean hasGlobalReplicationScope(TableDescriptor htd) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    return htd != null ? htd.hasGlobalReplicationScope() : false;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private int getRegionReplication(TableDescriptor htd) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    return htd != null ? htd.getRegionReplication() : 1;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  private TableDescriptor getTableDescriptor(TableName tableName) throws IOException {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    return master.getTableDescriptors().get(tableName);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  // ==========================================================================<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  //  Server Name<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  // ==========================================================================<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  /**<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * Returns the {@link ServerName} from catalog table {@link Result}<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * where the region is transitioning. It should be the same as<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * {@link MetaTableAccessor#getServerName(Result,int)} if the server is at OPEN state.<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * @param r Result to pull the transitioning server name from<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * @return A ServerName instance or {@link MetaTableAccessor#getServerName(Result,int)}<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * if necessary fields not found or empty.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   */<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  static ServerName getRegionServer(final Result r, int replicaId) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    final Cell cell = r.getColumnLatestCell(HConstants.CATALOG_FAMILY,<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        getServerNameColumn(replicaId));<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    if (cell == null || cell.getValueLength() == 0) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      RegionLocations locations = MetaTableAccessor.getRegionLocations(r);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      if (locations != null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        HRegionLocation location = locations.getRegionLocation(replicaId);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        if (location != null) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>          return location.getServerName();<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>      return null;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    return ServerName.parseServerName(Bytes.toString(cell.getValueArray(),<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      cell.getValueOffset(), cell.getValueLength()));<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>  private static byte[] getServerNameColumn(int replicaId) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    return replicaId == 0<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        ? HConstants.SERVERNAME_QUALIFIER<a name="line.311"></a>
-<span class="sourceLineNo">312</span>        : Bytes.toBytes(HConstants.SERVERNAME_QUALIFIER_STR + META_REPLICA_ID_DELIMITER<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          + String.format(RegionInfo.REPLICA_ID_FORMAT, replicaId));<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>  // ==========================================================================<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  //  Region State<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  // ==========================================================================<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * Pull the region state from a catalog table {@link Result}.<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * @param r Result to pull the region state from<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * @return the region state, or null if unknown.<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   */<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  @VisibleForTesting<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  public static State getRegionState(final Result r, int replicaId) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    Cell cell = r.getColumnLatestCell(HConstants.CATALOG_FAMILY, getStateColumn(replicaId));<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    if (cell == null || cell.getValueLength() == 0) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      return null;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    return State.valueOf(Bytes.toString(cell.getValueArray(), cell.getValueOffset(),<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        cell.getValueLength()));<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  private static byte[] getStateColumn(int replicaId) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    return replicaId == 0<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        ? HConstants.STATE_QUALIFIER<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        : Bytes.toBytes(HConstants.STATE_QUALIFIER_STR + META_REPLICA_ID_DELIMITER<a name="line.338"></a>
-<span class="sourceLineNo">339</span>          + String.format(RegionInfo.REPLICA_ID_FORMAT, replicaId));<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  }<a name="line.340"></a>
-<span class="sourceLineNo">341</span>}<a name="line.341"></a>
+<span class="sourceLineNo">121</span>      LOG.info("Load hbase:meta entry region={}, regionState={}, lastHost={}, " +<a name="line.121"></a>
+<span class="sourceLineNo">122</span>          "regionLocation={}", regionInfo.getEncodedName(), state, lastHost, regionLocation);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      visitor.visitRegionState(regionInfo, state, regionLocation, lastHost, openSeqNum);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    }<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>  public void updateRegionLocation(RegionStates.RegionStateNode regionStateNode)<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      throws IOException {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    if (regionStateNode.getRegionInfo().isMetaRegion()) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      updateMetaLocation(regionStateNode.getRegionInfo(), regionStateNode.getRegionLocation());<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    } else {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      long openSeqNum = regionStateNode.getState() == State.OPEN ?<a name="line.132"></a>
+<span class="sourceLineNo">133</span>          regionStateNode.getOpenSeqNum() : HConstants.NO_SEQNUM;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      updateUserRegionLocation(regionStateNode.getRegionInfo(), regionStateNode.getState(),<a name="line.134"></a>
+<span class="sourceLineNo">135</span>          regionStateNode.getRegionLocation(), regionStateNode.getLastHost(), openSeqNum,<a name="line.135"></a>
+<span class="sourceLineNo">136</span>          regionStateNode.getProcedure().getProcId());<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private void updateMetaLocation(final RegionInfo regionInfo, final ServerName serverName)<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      throws IOException {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    try {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      MetaTableLocator.setMetaLocation(master.getZooKeeper(), serverName,<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        regionInfo.getReplicaId(), State.OPEN);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    } catch (KeeperException e) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      throw new IOException(e);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  private void updateUserRegionLocation(final RegionInfo regionInfo, final State state,<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      final ServerName regionLocation, final ServerName lastHost, final long openSeqNum,<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      final long pid)<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      throws IOException {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    long time = EnvironmentEdgeManager.currentTime();<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    final int replicaId = regionInfo.getReplicaId();<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    final Put put = new Put(MetaTableAccessor.getMetaKeyForRegion(regionInfo), time);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    MetaTableAccessor.addRegionInfo(put, regionInfo);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    final StringBuilder info =<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      new StringBuilder("pid=").append(pid).append(" updating hbase:meta row=")<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        .append(regionInfo.getEncodedName()).append(", regionState=").append(state);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    if (openSeqNum &gt;= 0) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      Preconditions.checkArgument(state == State.OPEN &amp;&amp; regionLocation != null,<a name="line.162"></a>
+<span class="sourceLineNo">163</span>          "Open region should be on a server");<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      MetaTableAccessor.addLocation(put, regionLocation, openSeqNum, replicaId);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      // only update replication barrier for default replica<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      if (regionInfo.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID &amp;&amp;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        hasGlobalReplicationScope(regionInfo.getTable())) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        MetaTableAccessor.addReplicationBarrier(put, openSeqNum);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      }<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      info.append(", openSeqNum=").append(openSeqNum);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      info.append(", regionLocation=").append(regionLocation);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    } else if (regionLocation != null &amp;&amp; !regionLocation.equals(lastHost)) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      // Ideally, if no regionLocation, write null to the hbase:meta but this will confuse clients<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      // currently; they want a server to hit. TODO: Make clients wait if no location.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      put.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.175"></a>
+<span class="sourceLineNo">176</span>          .setRow(put.getRow())<a name="line.176"></a>
+<span class="sourceLineNo">177</span>          .setFamily(HConstants.CATALOG_FAMILY)<a name="line.177"></a>
+<span class="sourceLineNo">178</span>          .setQualifier(getServerNameColumn(replicaId))<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          .setTimestamp(put.getTimestamp())<a name="line.179"></a>
+<span class="sourceLineNo">180</span>          .setType(Cell.Type.Put)<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          .setValue(Bytes.toBytes(regionLocation.getServerName()))<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          .build());<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      info.append(", regionLocation=").append(regionLocation);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    put.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        .setRow(put.getRow())<a name="line.186"></a>
+<span class="sourceLineNo">187</span>        .setFamily(HConstants.CATALOG_FAMILY)<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .setQualifier(getStateColumn(replicaId))<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        .setTimestamp(put.getTimestamp())<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        .setType(Cell.Type.Put)<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        .setValue(Bytes.toBytes(state.name()))<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        .build());<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    LOG.info(info.toString());<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    updateRegionLocation(regionInfo, state, put);<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>  private void updateRegionLocation(RegionInfo regionInfo, State state, Put put)<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      throws IOException {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    try (Table table = master.getConnection().getTable(TableName.META_TABLE_NAME)) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      table.put(put);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    } catch (IOException e) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      // TODO: Revist!!!! Means that if a server is loaded, then we will abort our host!<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      // In tests we abort the Master!<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      String msg = String.format("FAILED persisting region=%s state=%s",<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        regionInfo.getShortNameToLog(), state);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      LOG.error(msg, e);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      master.abort(msg, e);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      throw e;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>  private long getOpenSeqNumForParentRegion(RegionInfo region) throws IOException {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    MasterFileSystem mfs = master.getMasterFileSystem();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    long maxSeqId =<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        WALSplitter.getMaxRegionSequenceId(mfs.getFileSystem(), mfs.getRegionDir(region));<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    return maxSeqId &gt; 0 ? maxSeqId + 1 : HConstants.NO_SEQNUM;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>  // ============================================================================================<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  //  Update Region Splitting State helpers<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  // ============================================================================================<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  public void splitRegion(RegionInfo parent, RegionInfo hriA, RegionInfo hriB,<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      ServerName serverName) throws IOException {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    TableDescriptor htd = getTableDescriptor(parent.getTable());<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    long parentOpenSeqNum = HConstants.NO_SEQNUM;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    if (htd.hasGlobalReplicationScope()) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      parentOpenSeqNum = getOpenSeqNumForParentRegion(parent);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    MetaTableAccessor.splitRegion(master.getConnection(), parent, parentOpenSeqNum, hriA, hriB,<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      serverName, getRegionReplication(htd));<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  // ============================================================================================<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  //  Update Region Merging State helpers<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  // ============================================================================================<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  public void mergeRegions(RegionInfo child, RegionInfo hriA, RegionInfo hriB,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      ServerName serverName) throws IOException {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    TableDescriptor htd = getTableDescriptor(child.getTable());<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    long regionAOpenSeqNum = -1L;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    long regionBOpenSeqNum = -1L;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    if (htd.hasGlobalReplicationScope()) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      regionAOpenSeqNum = getOpenSeqNumForParentRegion(hriA);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      regionBOpenSeqNum = getOpenSeqNumForParentRegion(hriB);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    MetaTableAccessor.mergeRegions(master.getConnection(), child, hriA, regionAOpenSeqNum, hriB,<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      regionBOpenSeqNum, serverName, getRegionReplication(htd));<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  }<a name="line.247"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span>  // ============================================================================================<a name="line.249"></a>
+<span class="sourceLineNo">250</span>  //  Delete Region State helpers<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  // ============================================================================================<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  public void deleteRegion(final RegionInfo regionInfo) throws IOException {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    deleteRegions(Collections.singletonList(regionInfo));<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>  public void deleteRegions(final List&lt;RegionInfo&gt; regions) throws IOException {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    MetaTableAccessor.deleteRegions(master.getConnection(), regions);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  }<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>  // ==========================================================================<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  //  Table Descriptors helpers<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  // ==========================================================================<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  private boolean hasGlobalReplicationScope(TableName tableName) throws IOException {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    return hasGlobalReplicationScope(getTableDescriptor(tableName));<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  }<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>  private boolean hasGlobalReplicationScope(TableDescriptor htd) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    return htd != null ? htd.hasGlobalReplicationScope() : false;<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>  private int getRegionReplication(TableDescriptor htd) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    return htd != null ? htd.getRegionReplication() : 1;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>  private TableDescriptor getTableDescriptor(TableName tableName) throws IOException {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    return master.getTableDescriptors().get(tableName);<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>  // ==========================================================================<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  //  Server Name<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  // ==========================================================================<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>  /**<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   * Returns the {@link ServerName} from catalog table {@link Result}<a name="line.284"></a>
+<span class="sourceLineNo">285</span>   * where the region is transitioning. It should be the same as<a name="line.285"></a>
+<span class="sourceLineNo">286</span>   * {@link MetaTableAccessor#getServerName(Result,int)} if the server is at OPEN state.<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * @param r Result to pull the transitioning server name from<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * @return A ServerName instance or {@link MetaTableAccessor#getServerName(Result,int)}<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   * if necessary fields not found or empty.<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   */<a name="line.290"></a>
+<span class="sourceLineNo">291</span>  static ServerName getRegionServer(final Result r, int replicaId) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    final Cell cell = r.getColumnLatestCell(HConstants.CATALOG_FAMILY,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        getServerNameColumn(replicaId));<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    if (cell == null || cell.getValueLength() == 0) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      RegionLocations locations = MetaTableAccessor.getRegionLocations(r);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      if (locations != null) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>        HRegionLocation location = locations.getRegionLocation(replicaId);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        if (location != null) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>          return location.getServerName();<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>      return null;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    return ServerName.parseServerName(Bytes.toString(cell.getValueArray(),<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      cell.getValueOffset(), cell.getValueLength()));<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  private static byte[] getServerNameColumn(int replicaId) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    return replicaId == 0<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        ? HConstants.SERVERNAME_QUALIFIER<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        : Bytes.toBytes(HConstants.SERVERNAME_QUALIFIER_STR + META_REPLICA_ID_DELIMITER<a name="line.311"></a>
+<span class="sourceLineNo">312</span>          + String.format(RegionInfo.REPLICA_ID_FORMAT, replicaId));<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>  //  Region State<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>   * Pull the region state from a catalog table {@link Result}.<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * @param r Result to pull the region state from<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * @return the region state, or null if unknown.<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  @VisibleForTesting<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public static State getRegionState(final Result r, int replicaId) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    Cell cell = r.getColumnLatestCell(HConstants.CATALOG_FAMILY, getStateColumn(replicaId));<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    if (cell == null || cell.getValueLength() == 0) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      return null;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    return State.valueOf(Bytes.toString(cell.getValueArray(), cell.getValueOffset(),<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        cell.getValueLength()));<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  }<a name="line.332"></a>
+<span class="sourceLineNo">333</span><a name="line.333"></a>
+<span class="sourceLineNo">334</span>  private static byte[] getStateColumn(int replicaId) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    return replicaId == 0<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        ? HConstants.STATE_QUALIFIER<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        : Bytes.toBytes(HConstants.STATE_QUALIFIER_STR + META_REPLICA_ID_DELIMITER<a name="line.337"></a>
+<span class="sourceLineNo">338</span>          + String.format(RegionInfo.REPLICA_ID_FORMAT, replicaId));<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
+<span class="sourceLineNo">340</span>}<a name="line.340"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html
index e6e43ee..a8b77ae 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html
@@ -367,650 +367,650 @@
 <span class="sourceLineNo">359</span>    lock.lock();<a name="line.359"></a>
 <span class="sourceLineNo">360</span>    try {<a name="line.360"></a>
 <span class="sourceLineNo">361</span>      LOG.trace("Starting WAL Procedure Store lease recovery");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      FileStatus[] oldLogs = getLogFiles();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      while (isRunning()) {<a name="line.363"></a>
+<span class="sourceLineNo">362</span>      while (isRunning()) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        FileStatus[] oldLogs = getLogFiles();<a name="line.363"></a>
 <span class="sourceLineNo">364</span>        // Get Log-MaxID and recover lease on old logs<a name="line.364"></a>
 <span class="sourceLineNo">365</span>        try {<a name="line.365"></a>
 <span class="sourceLineNo">366</span>          flushLogId = initOldLogs(oldLogs);<a name="line.366"></a>
 <span class="sourceLineNo">367</span>        } catch (FileNotFoundException e) {<a name="line.367"></a>
 <span class="sourceLineNo">368</span>          LOG.warn("Someone else is active and deleted logs. retrying.", e);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          oldLogs = getLogFiles();<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          continue;<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>        // Create new state-log<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          // someone else has already created this log<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          LOG.debug("Someone else has already created log " + flushLogId);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          continue;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        }<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>        // We have the lease on the log<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        oldLogs = getLogFiles();<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          if (LOG.isDebugEnabled()) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>            LOG.debug("Someone else created new logs. Expected maxLogId &lt; " + flushLogId);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>          }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>          continue;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>        LOG.trace("Lease acquired for flushLogId={}", flushLogId);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        break;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      }<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    } finally {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      lock.unlock();<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><a name="line.397"></a>
-<span class="sourceLineNo">398</span>  @Override<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public void load(final ProcedureLoader loader) throws IOException {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    lock.lock();<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    try {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      if (logs.isEmpty()) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>      // Nothing to do, If we have only the current log.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      if (logs.size() == 1) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        LOG.trace("No state logs to replay.");<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        loader.setMaxProcId(0);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        return;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>      // Load the old logs<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      final Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      it.next(); // Skip the current log<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        @Override<a name="line.418"></a>
-<span class="sourceLineNo">419</span>        public void setMaxProcId(long maxProcId) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          loader.setMaxProcId(maxProcId);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>        @Override<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          loader.load(procIter);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>        @Override<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          loader.handleCorrupted(procIter);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        }<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span>        @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          if (corruptedLogs == null) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>          }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>          corruptedLogs.add(log);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          // TODO: sideline corrupted log<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      });<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    } finally {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      try {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        // try to cleanup inactive wals and complete the operation<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        buildHoldingCleanupTracker();<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        tryCleanupLogsOnLoad();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        loading.set(false);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      } finally {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        lock.unlock();<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>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  private void tryCleanupLogsOnLoad() {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    // nothing to cleanup.<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    if (logs.size() &lt;= 1) return;<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span>    // the config says to not cleanup wals on load.<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      return;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>    try {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      periodicRoll();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    } catch (IOException e) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>  }<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>  @Override<a name="line.472"></a>
-<span class="sourceLineNo">473</span>  public void insert(final Procedure proc, final Procedure[] subprocs) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    if (LOG.isTraceEnabled()) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    ByteSlot slot = acquireSlot();<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    try {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      // Serialize the insert<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      long[] subProcIds = null;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (subprocs != null) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>        subProcIds = new long[subprocs.length];<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      } else {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        assert !proc.hasParent();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>      // Push the transaction data and wait until it is persisted<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    } catch (IOException e) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      // We are not able to serialize the procedure.<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      // this is a code error, and we are not able to go on.<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.498"></a>
-<span class="sourceLineNo">499</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      throw new RuntimeException(e);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    } finally {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      releaseSlot(slot);<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>  @Override<a name="line.506"></a>
-<span class="sourceLineNo">507</span>  public void insert(final Procedure[] procs) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    if (LOG.isTraceEnabled()) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      LOG.trace("Insert " + Arrays.toString(procs));<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>    ByteSlot slot = acquireSlot();<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    try {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      // Serialize the insert<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      long[] procIds = new long[procs.length];<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        assert !procs[i].hasParent();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        procIds[i] = procs[i].getProcId();<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>      // Push the transaction data and wait until it is persisted<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    } catch (IOException e) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      // We are not able to serialize the procedure.<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      // this is a code error, and we are not able to go on.<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.527"></a>
-<span class="sourceLineNo">528</span>          Arrays.toString(procs), e);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      throw new RuntimeException(e);<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    } finally {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      releaseSlot(slot);<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    }<a name="line.532"></a>
-<span class="sourceLineNo">533</span>  }<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>  @Override<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  public void update(final Procedure proc) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    if (LOG.isTraceEnabled()) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      LOG.trace("Update " + proc);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    }<a name="line.539"></a>
-<span class="sourceLineNo">540</span><a name="line.540"></a>
-<span class="sourceLineNo">541</span>    ByteSlot slot = acquireSlot();<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    try {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      // Serialize the update<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>      // Push the transaction data and wait until it is persisted<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    } catch (IOException e) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      // We are not able to serialize the procedure.<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      // this is a code error, and we are not able to go on.<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      throw new RuntimeException(e);<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    } finally {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      releaseSlot(slot);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    }<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  }<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>  @Override<a name="line.558"></a>
-<span class="sourceLineNo">559</span>  public void delete(final long procId) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    if (LOG.isTraceEnabled()) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      LOG.trace("Delete " + procId);<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>    ByteSlot slot = acquireSlot();<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    try {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      // Serialize the delete<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>      // Push the transaction data and wait until it is persisted<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    } catch (IOException e) {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>      // We are not able to serialize the procedure.<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      // this is a code error, and we are not able to go on.<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      throw new RuntimeException(e);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    } finally {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      releaseSlot(slot);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    }<a name="line.578"></a>
-<span class="sourceLineNo">579</span>  }<a name="line.579"></a>
-<span class="sourceLineNo">580</span><a name="line.580"></a>
-<span class="sourceLineNo">581</span>  @Override<a name="line.581"></a>
-<span class="sourceLineNo">582</span>  public void delete(final Procedure proc, final long[] subProcIds) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    assert proc != null : "expected a non-null procedure";<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    if (LOG.isTraceEnabled()) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    }<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>    ByteSlot slot = acquireSlot();<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    try {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      // Serialize the delete<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>      // Push the transaction data and wait until it is persisted<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    } catch (IOException e) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      // We are not able to serialize the procedure.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      // this is a code error, and we are not able to go on.<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      throw new RuntimeException(e);<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    } finally {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      releaseSlot(slot);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>  }<a name="line.604"></a>
-<span class="sourceLineNo">605</span><a name="line.605"></a>
-<span class="sourceLineNo">606</span>  @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    if (count == 0) return;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      delete(procIds);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    } else if (count == 1) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      delete(procIds[offset]);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    } else {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    }<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>  private void delete(final long[] procIds) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if (LOG.isTraceEnabled()) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>    final ByteSlot slot = acquireSlot();<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    try {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      // Serialize the delete<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>      // Push the transaction data and wait until it is persisted<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    } catch (IOException e) {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      // We are not able to serialize the procedure.<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      // this is a code error, and we are not able to go on.<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      throw new RuntimeException(e);<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    } finally {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      releaseSlot(slot);<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    }<a name="line.639"></a>
-<span class="sourceLineNo">640</span>  }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>  private ByteSlot acquireSlot() {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    ByteSlot slot = slotsCache.poll();<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    return slot != null ? slot : new ByteSlot();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>  private void releaseSlot(final ByteSlot slot) {<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    slot.reset();<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    slotsCache.offer(slot);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>  }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.652"></a>
-<span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      final long procId, final long[] subProcIds) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    if (!isRunning()) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    if (logs.isEmpty()) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>    long logId = -1;<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    lock.lock();<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    try {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      // Wait for the sync to be completed<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      while (true) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        if (!isRunning()) {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>          throw new RuntimeException("store no longer running");<a name="line.669"></a>
-<span class="sourceLineNo">670</span>        } else if (isSyncAborted()) {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.671"></a>
-<span class="sourceLineNo">672</span>        } else if (inSync.get()) {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          syncCond.await();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>          slotCond.signal();<a name="line.675"></a>
-<span class="sourceLineNo">676</span>          syncCond.await();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>        } else {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>          break;<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        }<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      }<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>      final long pushSyncId = syncId.get();<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      slots[slotIndex++] = slot;<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      logId = flushLogId;<a name="line.685"></a>
-<span class="sourceLineNo">686</span><a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // Notify that there is new data<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      if (slotIndex == 1) {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        waitCond.signal();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      }<a name="line.690"></a>
-<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span>      // Notify that the slots are full<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      if (slotIndex == syncMaxSlot) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>        waitCond.signal();<a name="line.694"></a>
-<span class="sourceLineNo">695</span>        slotCond.signal();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>      }<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span>      while (pushSyncId == syncId.get() &amp;&amp; isRunning()) {<a name="line.698"></a>
-<span class="sourceLineNo">699</span>        syncCond.await();<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      }<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    } catch (InterruptedException e) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      Thread.currentThread().interrupt();<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      sendAbortProcessSignal();<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      throw new RuntimeException(e);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    } finally {<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      lock.unlock();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      if (isSyncAborted()) {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>        throw new RuntimeException("sync aborted", syncException.get());<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      }<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    }<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    return logId;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>  private void updateStoreTracker(final PushType type,<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      final long procId, final long[] subProcIds) {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    switch (type) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      case INSERT:<a name="line.717"></a>
-<span class="sourceLineNo">718</span>        if (subProcIds == null) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          storeTracker.insert(procId);<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        } else if (procId == Procedure.NO_PROC_ID) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          storeTracker.insert(subProcIds);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        } else {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          storeTracker.insert(procId, subProcIds);<a name="line.723"></a>
-<span class="sourceLineNo">724</span>          holdingCleanupTracker.setDeletedIfSet(procId);<a name="line.724"></a>
-<span class="sourceLineNo">725</span>        }<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        break;<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      case UPDATE:<a name="line.727"></a>
-<span class="sourceLineNo">728</span>        storeTracker.update(procId);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>        holdingCleanupTracker.setDeletedIfSet(procId);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        break;<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      case DELETE:<a name="line.731"></a>
-<span class="sourceLineNo">732</span>        if (subProcIds != null &amp;&amp; subProcIds.length &gt; 0) {<a name="line.732"></a>
-<span class="sourceLineNo">733</span>          storeTracker.delete(subProcIds);<a name="line.733"></a>
-<span class="sourceLineNo">734</span>          holdingCleanupTracker.setDeletedIfSet(subProcIds);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>        } else {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          storeTracker.delete(procId);<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          holdingCleanupTracker.setDeletedIfSet(procId);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>        }<a name="line.738"></a>
-<span class="sourceLineNo">739</span>        break;<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      default:<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        throw new RuntimeException("invalid push type " + type);<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    }<a name="line.742"></a>
-<span class="sourceLineNo">743</span>  }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span>  private boolean isSyncAborted() {<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    return syncException.get() != null;<a name="line.746"></a>
-<span class="sourceLineNo">747</span>  }<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span>  private void syncLoop() throws Throwable {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>    long totalSyncedToStore = 0;<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    inSync.set(false);<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    lock.lock();<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    try {<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      while (isRunning()) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>        try {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>          // Wait until new data is available<a name="line.756"></a>
-<span class="sourceLineNo">757</span>          if (slotIndex == 0) {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>            if (!loading.get()) {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>              periodicRoll();<a name="line.759"></a>
-<span class="sourceLineNo">760</span>            }<a name="line.760"></a>
-<span class="sourceLineNo">761</span><a name="line.761"></a>
-<span class="sourceLineNo">762</span>            if (LOG.isTraceEnabled()) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>              float rollTsSec = getMillisFromLastRoll() / 1000.0f;<a name="line.763"></a>
-<span class="sourceLineNo">764</span>              LOG.trace(String.format("Waiting for data. flushed=%s (%s/sec)",<a name="line.764"></a>
-<span class="sourceLineNo">765</span>                        StringUtils.humanSize(totalSynced.get()),<a name="line.765"></a>
-<span class="sourceLineNo">766</span>                        StringUtils.humanSize(totalSynced.get() / rollTsSec)));<a name="line.766"></a>
-<span class="sourceLineNo">767</span>            }<a name="line.767"></a>
-<span class="sourceLineNo">768</span><a name="line.768"></a>
-<span class="sourceLineNo">769</span>            waitCond.await(getMillisToNextPeriodicRoll(), TimeUnit.MILLISECONDS);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>            if (slotIndex == 0) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>              // no data.. probably a stop() or a periodic roll<a name="line.771"></a>
-<span class="sourceLineNo">772</span>              continue;<a name="line.772"></a>
-<span class="sourceLineNo">773</span>            }<a name="line.773"></a>
-<span class="sourceLineNo">774</span>          }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>          // Wait SYNC_WAIT_MSEC or the signal of "slots full" before flushing<a name="line.775"></a>
-<span class="sourceLineNo">776</span>          syncMaxSlot = runningProcCount;<a name="line.776"></a>
-<span class="sourceLineNo">777</span>          assert syncMaxSlot &gt; 0 : "unexpected syncMaxSlot=" + syncMaxSlot;<a name="line.777"></a>
-<span class="sourceLineNo">778</span>          final long syncWaitSt = System.currentTimeMillis();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>          if (slotIndex != syncMaxSlot) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>            slotCond.await(syncWaitMsec, TimeUnit.MILLISECONDS);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>          }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>          final long currentTs = System.currentTimeMillis();<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          final long syncWaitMs = currentTs - syncWaitSt;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>          final float rollSec = getMillisFromLastRoll() / 1000.0f;<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          final float syncedPerSec = totalSyncedToStore / rollSec;<a name="line.786"></a>
-<span class="sourceLineNo">787</span>          if (LOG.isTraceEnabled() &amp;&amp; (syncWaitMs &gt; 10 || slotIndex &lt; syncMaxSlot)) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>            LOG.trace(String.format("Sync wait %s, slotIndex=%s , totalSynced=%s (%s/sec)",<a name="line.788"></a>
-<span class="sourceLineNo">789</span>                      StringUtils.humanTimeDiff(syncWaitMs), slotIndex,<a name="line.789"></a>
-<span class="sourceLineNo">790</span>                      StringUtils.humanSize(totalSyncedToStore),<a name="line.790"></a>
-<span class="sourceLineNo">791</span>                      StringUtils.humanSize(syncedPerSec)));<a name="line.791"></a>
-<span class="sourceLineNo">792</span>          }<a name="line.792"></a>
-<span class="sourceLineNo">793</span><a name="line.793"></a>
-<span class="sourceLineNo">794</span>          // update webui circular buffers (TODO: get rid of allocations)<a name="line.794"></a>
-<span class="sourceLineNo">795</span>          final SyncMetrics syncMetrics = new SyncMetrics();<a name="line.795"></a>
-<span class="sourceLineNo">796</span>          syncMetrics.timestamp = currentTs;<a name="line.796"></a>
-<span class="sourceLineNo">797</span>          syncMetrics.syncWaitMs = syncWaitMs;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>          syncMetrics.syncedEntries = slotIndex;<a name="line.798"></a>
-<span class="sourceLineNo">799</span>          syncMetrics.totalSyncedBytes = totalSyncedToStore;<a name="line.799"></a>
-<span class="sourceLineNo">800</span>          syncMetrics.syncedPerSec = syncedPerSec;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>          syncMetricsQueue.add(syncMetrics);<a name="line.801"></a>
-<span class="sourceLineNo">802</span><a name="line.802"></a>
-<span class="sourceLineNo">803</span>          // sync<a name="line.803"></a>
-<span class="sourceLineNo">804</span>          inSync.set(true);<a name="line.804"></a>
-<span class="sourceLineNo">805</span>          long slotSize = syncSlots();<a name="line.805"></a>
-<span class="sourceLineNo">806</span>          logs.getLast().addToSize(slotSize);<a name="line.806"></a>
-<span class="sourceLineNo">807</span>          totalSyncedToStore = totalSynced.addAndGet(slotSize);<a name="line.807"></a>
-<span class="sourceLineNo">808</span>          slotIndex = 0;<a name="line.808"></a>
-<span class="sourceLineNo">809</span>          inSync.set(false);<a name="line.809"></a>
-<span class="sourceLineNo">810</span>          syncId.incrementAndGet();<a name="line.810"></a>
-<span class="sourceLineNo">811</span>        } catch (InterruptedException e) {<a name="line.811"></a>
-<span class="sourceLineNo">812</span>          Thread.currentThread().interrupt();<a name="line.812"></a>
-<span class="sourceLineNo">813</span>          syncException.compareAndSet(null, e);<a name="line.813"></a>
-<span class="sourceLineNo">814</span>          sendAbortProcessSignal();<a name="line.814"></a>
-<span class="sourceLineNo">815</span>          throw e;<a name="line.815"></a>
-<span class="sourceLineNo">816</span>        } catch (Throwable t) {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>          syncException.compareAndSet(null, t);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>          sendAbortProcessSignal();<a name="line.818"></a>
-<span class="sourceLineNo">819</span>          throw t;<a name="line.819"></a>
-<span class="sourceLineNo">820</span>        } finally {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>          syncCond.signalAll();<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        }<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      }<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    } finally {<a name="line.824"></a>
-<span class="sourceLineNo">825</span>      lock.unlock();<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>  }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
-<span class="sourceLineNo">829</span>  public ArrayList&lt;SyncMetrics&gt; getSyncMetrics() {<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    lock.lock();<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    try {<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      return new ArrayList&lt;&gt;(syncMetricsQueue);<a name="line.832"></a>
-<span class="sourceLineNo">833</span>    } finally {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>      lock.unlock();<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    }<a name="line.835"></a>
-<span class="sourceLineNo">836</span>  }<a name="line.836"></a>
-<span class="sourceLineNo">837</span><a name="line.837"></a>
-<span class="sourceLineNo">838</span>  private long syncSlots() throws Throwable {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    int retry = 0;<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    int logRolled = 0;<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    long totalSynced = 0;<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    do {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      try {<a name="line.843"></a>
-<span class="sourceLineNo">844</span>        totalSynced = syncSlots(stream, slots, 0, slotIndex);<a name="line.844"></a>
-<span class="sourceLineNo">845</span>        break;<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      } catch (Throwable e) {<a name="line.846"></a>
-<span class="sourceLineNo">847</span>        LOG.warn("unable to sync slots, retry=" + retry);<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        if (++retry &gt;= maxRetriesBeforeRoll) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>          if (logRolled &gt;= maxSyncFailureRoll &amp;&amp; isRunning()) {<a name="line.849"></a>
-<span class="sourceLineNo">850</span>            LOG.error("Sync slots after log roll failed, abort.", e);<a name="line.850"></a>
-<span class="sourceLineNo">851</span>            throw e;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>          }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>          if (!rollWriterWithRetries()) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>            throw e;<a name="line.855"></a>
-<span class="sourceLineNo">856</span>          }<a name="line.856"></a>
-<span class="sourceLineNo">857</span><a name="line.857"></a>
-<span class="sourceLineNo">858</span>          logRolled++;<a name="line.858"></a>
-<span class="sourceLineNo">859</span>          retry = 0;<a name="line.859"></a>
-<span class="sourceLineNo">860</span>        }<a name="line.860"></a>
-<span class="sourceLineNo">861</span>      }<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    } while (isRunning());<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    return totalSynced;<a name="line.863"></a>
-<span class="sourceLineNo">864</span>  }<a name="line.864"></a>
-<span class="sourceLineNo">865</span><a name="line.865"></a>
-<span class="sourceLineNo">866</span>  protected long syncSlots(final FSDataOutputStream stream, final ByteSlot[] slots,<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      final int offset, final int count) throws IOException {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    long totalSynced = 0;<a name="line.868"></a>
-<span class="sourceLineNo">869</span>    for (int i = 0; i &lt; count; ++i) {<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      final ByteSlot data = slots[offset + i];<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      data.writeTo(stream);<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      totalSynced += data.size();<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    }<a name="line.873"></a>
-<span class="sourceLineNo">874</span><a name="line.874"></a>
-<span class="sourceLineNo">875</span>    syncStream(stream);<a name="line.875"></a>
-<span class="sourceLineNo">876</span>    sendPostSyncSignal();<a name="line.876"></a>
-<span class="sourceLineNo">877</span><a name="line.877"></a>
-<span class="sourceLineNo">878</span>    if (LOG.isTraceEnabled()) {<a name="line.878"></a>
-<span class="sourceLineNo">879</span>      LOG.trace("Sync slots=" + count + '/' + syncMaxSlot +<a name="line.879"></a>
-<span class="sourceLineNo">880</span>                ", flushed=" + StringUtils.humanSize(totalSynced));<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    }<a name="line.881"></a>
-<span class="sourceLineNo">882</span>    return totalSynced;<a name="line.882"></a>
-<span class="sourceLineNo">883</span>  }<a name="line.883"></a>
-<span class="sourceLineNo">884</span><a name="line.884"></a>
-<span class="sourceLineNo">885</span>  protected void syncStream(final FSDataOutputStream stream) throws IOException {<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    if (useHsync) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      stream.hsync();<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    } else {<a name="line.888"></a>
-<span class="sourceLineNo">889</span>      stream.hflush();<a name="line.889"></a>
-<span class="sourceLineNo">890</span>    }<a name="line.890"></a>
-<span class="sourceLineNo">891</span>  }<a name="line.891"></a>
-<span class="sourceLineNo">892</span><a name="line.892"></a>
-<span class="sourceLineNo">893</span>  private boolean rollWriterWithRetries() {<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    for (int i = 0; i &lt; rollRetries &amp;&amp; isRunning(); ++i) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>      if (i &gt; 0) Threads.sleepWithoutInterrupt(waitBeforeRoll * i);<a name="line.895"></a>
-<span class="sourceLineNo">896</span><a name="line.896"></a>
-<span class="sourceLineNo">897</span>      try {<a name="line.897"></a>
-<span class="sourceLineNo">898</span>        if (rollWriter()) {<a name="line.898"></a>
-<span class="sourceLineNo">899</span>          return true;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>        }<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      } catch (IOException e) {<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        LOG.warn("Unable to roll the log, attempt=" + (i + 1), e);<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      }<a name="line.903"></a>
-<span class="sourceLineNo">904</span>    }<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    LOG.error(HBaseMarkers.FATAL, "Unable to roll the log");<a name="line.905"></a>
-<span class="sourceLineNo">906</span>    return false;<a name="line.906"></a>
-<span class="sourceLineNo">907</span>  }<a name="line.907"></a>
-<span class="sourceLineNo">908</span><a name="line.908"></a>
-<span class="sourceLineNo">909</span>  private boolean tryRollWriter() {<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    try {<a name="line.910"></a>
-<span class="sourceLineNo">911</span>      return rollWriter();<a name="line.911"></a>
-<span class="sourceLineNo">912</span>    } catch (IOException e) {<a name="line.912"></a>
-<span class="sourceLineNo">913</span>      LOG.warn("Unable to roll the log", e);<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      return false;<a name="line.914"></a>
-<span class="sourceLineNo">915</span>    }<a name="line.915"></a>
-<span class="sourceLineNo">916</span>  }<a name="line.916"></a>
-<span class="sourceLineNo">917</span><a name="line.917"></a>
-<span class="sourceLineNo">918</span>  public long getMillisToNextPeriodicRoll() {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    if (lastRollTs.get() &gt; 0 &amp;&amp; periodicRollMsec &gt; 0) {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      return periodicRollMsec - getMillisFromLastRoll();<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    }<a name="line.921"></a>
-<span class="sourceLineNo">922</span>    return Long.MAX_VALUE;<a name="line.922"></a>
-<span class="sourceLineNo">923</span>  }<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span>  public long getMillisFromLastRoll() {<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    return (System.currentTimeMillis() - lastRollTs.get());<a name="line.926"></a>
-<span class="sourceLineNo">927</span>  }<a name="line.927"></a>
-<span class="sourceLineNo">928</span><a name="line.928"></a>
-<span class="sourceLineNo">929</span>  @VisibleForTesting<a name="line.929"></a>
-<span class="sourceLineNo">930</span>  protected void periodicRollForTesting() throws IOException {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    lock.lock();<a name="line.931"></a>
-<span class="sourceLineNo">932</span>    try {<a name="line.932"></a>
-<span class="sourceLineNo">933</span>      periodicRoll();<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    } finally {<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      lock.unlock();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    }<a name="line.936"></a>
-<span class="sourceLineNo">937</span>  }<a name="line.937"></a>
-<span class="sourceLineNo">938</span><a name="line.938"></a>
-<span class="sourceLineNo">939</span>  @VisibleForTesting<a name="line.939"></a>
-<span class="sourceLineNo">940</span>  protected boolean rollWriterForTesting() throws IOException {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    lock.lock();<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    try {<a name="line.942"></a>
-<span class="sourceLineNo">943</span>      return rollWriter();<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    } finally {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>      lock.unlock();<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    }<a name="line.946"></a>
-<span class="sourceLineNo">947</span>  }<a name="line.947"></a>
-<span class="sourceLineNo">948</span><a name="line.948"></a>
-<span class="sourceLineNo">949</span>  @VisibleForTesting<a name="line.949"></a>
-<span class="sourceLineNo">950</span>  protected void removeInactiveLogsForTesting() throws Exception {<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    lock.lock();<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    try {<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      removeInactiveLogs();<a name="line.953"></a>
-<span class="sourceLineNo">954</span>    } finally  {<a name="line.954"></a>
-<span class="sourceLineNo">955</span>      lock.unlock();<a name="line.955"></a>
-<span class="sourceLineNo">956</span>    }<a name="line.956"></a>
-<span class="sourceLineNo">957</span>  }<a name="line.957"></a>
-<span class="sourceLineNo">958</span><a name="line.958"></a>
-<span class="sourceLineNo">959</span>  private void periodicRoll() throws IOException {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    if (storeTracker.isEmpty()) {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      if (LOG.isTraceEnabled()) {<a name="line.961"></a>
-<span class="sourceLineNo">962</span>        LOG.trace("no active procedures");<a name="line.962"></a>
-<span class="sourceLineNo">963</span>      }<a name="line.963"></a>
-<span class="sourceLineNo">964</span>      tryRollWriter();<a name="line.964"></a>
-<span class="sourceLineNo">965</span>      removeAllLogs(flushLogId - 1);<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    } else {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>      if (storeTracker.isUpdated()) {<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        if (LOG.isTraceEnabled()) {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          LOG.trace("all the active procedures are in the latest log");<a name="line.969"></a>
-<span class="sourceLineNo">970</span>        }<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        removeAllLogs(flushLogId - 1);<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      }<a name="line.972"></a>
-<span class="sourceLineNo">973</span><a name="line.973"></a>
-<span class="sourceLineNo">974</span>      // if the log size has exceeded the roll threshold<a name="line.974"></a>
-<span class="sourceLineNo">975</span>      // or the periodic roll timeout is expired, try to roll the wal.<a name="line.975"></a>
-<span class="sourceLineNo">976</span>      if (totalSynced.get() &gt; rollThreshold || getMillisToNextPeriodicRoll() &lt;= 0) {<a name="line.976"></a>
-<span class="sourceLineNo">977</span>        tryRollWriter();<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      }<a name="line.978"></a>
-<span class="sourceLineNo">979</span><a name="line.979"></a>
-<span class="sourceLineNo">980</span>      removeInactiveLogs();<a name="line.980"></a>
-<span class="sourceLineNo">981</span>    }<a name="line.981"></a>
-<span class="sourceLineNo">982</span>  }<a name="line.982"></a>
-<span class="sourceLineNo">983</span><a name="line.983"></a>
-<span class="sourceLineNo">984</span>  private boolean rollWriter() throws IOException {<a name="line.984"></a>
-<span class="sourceLineNo">985</span>    if (!isRunning()) return false;<a name="line.985"></a>
-<span class="sourceLineNo">986</span><a name="line.986"></a>
-<span class="sourceLineNo">987</span>    // Create new state-log<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    if (!rollWriter(flushLogId + 1)) {<a name="line.988"></a>
-<span class="sourceLineNo">989</span>      LOG.warn("someone else has already created log " + flushLogId);<a name="line.989"></a>
-<span class="sourceLineNo">990</span>      return false;<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    }<a name="line.991"></a>
-<span class="sourceLineNo">992</span><a name="line.992"></a>
-<span class="sourceLineNo">993</span>    // We have the lease on the log,<a name="line.993"></a>
-<span class="sourceLineNo">994</span>    // but we should check if someone else has created new files<a name="line.994"></a>
-<span class="sourceLineNo">995</span>    if (getMaxLogId(getLogFiles()) &gt; flushLogId) {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>      LOG.warn("Someone else created new logs. Expected maxLogId &lt; " + flushLogId);<a name="line.996"></a>
-<span class="sourceLineNo">997</span>      logs.getLast().removeFile(this.walArchiveDir);<a name="line.997"></a>
-<span class="sourceLineNo">998</span>      return false;<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    }<a name="line.999"></a>
-<span class="sourceLineNo">1000</span><a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    // We have the lease on the log<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>    return true;<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>  }<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span><a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>  private boolean rollWriter(final long logId) throws IOException {<a name="line.1005"></a>
+<span class="sourceLineNo">369</span>          continue;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>        // Create new state-log<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>          // someone else has already created this log<a name="line.374"></a>
+<span class="sourceLineNo">375</span>          LOG.debug("Someone else has already created log {}. Retrying.", flushLogId);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>          continue;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>        // We have the lease on the log<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        oldLogs = getLogFiles();<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          if (LOG.isDebugEnabled()) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            LOG.debug("Someone else created new logs. Expected maxLogId &lt; " + flushLogId);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          continue;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span>        LOG.trace("Lease acquired for flushLogId={}", flushLogId);<a name="line.389"></a>
+<span class="sourceLineNo">390</span>        break;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      }<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    } finally {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      lock.unlock();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  public void load(final ProcedureLoader loader) throws IOException {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    lock.lock();<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      if (logs.isEmpty()) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>      // Nothing to do, If we have only the current log.<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (logs.size() == 1) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        LOG.trace("No state logs to replay.");<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        loader.setMaxProcId(0);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        return;<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      }<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span>      // Load the old logs<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      final Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      it.next(); // Skip the current log<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        @Override<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        public void setMaxProcId(long maxProcId) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          loader.setMaxProcId(maxProcId);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>        @Override<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>          loader.load(procIter);<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        }<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span>        @Override<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          loader.handleCorrupted(procIter);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        }<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>        @Override<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          if (corruptedLogs == null) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          }<a name="line.436"></a>
+<span class="sourceLineNo">437</span>          corruptedLogs.add(log);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>          // TODO: sideline corrupted log<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        }<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      });<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    } finally {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      try {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        // try to cleanup inactive wals and complete the operation<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        buildHoldingCleanupTracker();<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        tryCleanupLogsOnLoad();<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        loading.set(false);<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      } finally {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        lock.unlock();<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><a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private void tryCleanupLogsOnLoad() {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    // nothing to cleanup.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    if (logs.size() &lt;= 1) return;<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span>    // the config says to not cleanup wals on load.<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      return;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
+<span class="sourceLineNo">463</span><a name="line.463"></a>
+<span class="sourceLineNo">464</span>    try {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      periodicRoll();<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    } catch (IOException e) {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    }<a name="line.468"></a>
+<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
+<span class="sourceLineNo">470</span><a name="line.470"></a>
+<span class="sourceLineNo">471</span>  @Override<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  public void insert(final Procedure proc, final Procedure[] subprocs) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    if (LOG.isTraceEnabled()) {<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
+<span class="sourceLineNo">476</span><a name="line.476"></a>
+<span class="sourceLineNo">477</span>    ByteSlot slot = acquireSlot();<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    try {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>      // Serialize the insert<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      long[] subProcIds = null;<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      if (subprocs != null) {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        subProcIds = new long[subprocs.length];<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        }<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      } else {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        assert !proc.hasParent();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      }<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>      // Push the transaction data and wait until it is persisted<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    } catch (IOException e) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      // We are not able to serialize the procedure.<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      // this is a code error, and we are not able to go on.<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.497"></a>
+<span class="sourceLineNo">498</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      throw new RuntimeException(e);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>    } finally {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      releaseSlot(slot);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
+<span class="sourceLineNo">503</span>  }<a name="line.503"></a>
+<span class="sourceLineNo">504</span><a name="line.504"></a>
+<span class="sourceLineNo">505</span>  @Override<a name="line.505"></a>
+<span class="sourceLineNo">506</span>  public void insert(final Procedure[] procs) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    if (LOG.isTraceEnabled()) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      LOG.trace("Insert " + Arrays.toString(procs));<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
+<span class="sourceLineNo">510</span><a name="line.510"></a>
+<span class="sourceLineNo">511</span>    ByteSlot slot = acquireSlot();<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    try {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      // Serialize the insert<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      long[] procIds = new long[procs.length];<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        assert !procs[i].hasParent();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        procIds[i] = procs[i].getProcId();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      }<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>      // Push the transaction data and wait until it is persisted<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    } catch (IOException e) {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      // We are not able to serialize the procedure.<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      // this is a code error, and we are not able to go on.<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.526"></a>
+<span class="sourceLineNo">527</span>          Arrays.toString(procs), e);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      throw new RuntimeException(e);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    } finally {<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      releaseSlot(slot);<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span>  }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>  @Override<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  public void update(final Procedure proc) {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    if (LOG.isTraceEnabled()) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      LOG.trace("Update " + proc);<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    }<a name="line.538"></a>
+<span class="sourceLineNo">539</span><a name="line.539"></a>
+<span class="sourceLineNo">540</span>    ByteSlot slot = acquireSlot();<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    try {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      // Serialize the update<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.543"></a>
+<span class="sourceLineNo">544</span><a name="line.544"></a>
+<span class="sourceLineNo">545</span>      // Push the transaction data and wait until it is persisted<a name="line.545"></a>
+<span class="sourceLineNo">546</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    } catch (IOException e) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      // We are not able to serialize the procedure.<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      // this is a code error, and we are not able to go on.<a name="line.549"></a>
+<span class="sourceLineNo">550</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      throw new RuntimeException(e);<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    } finally {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      releaseSlot(slot);<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span>  @Override<a name="line.557"></a>
+<span class="sourceLineNo">558</span>  public void delete(final long procId) {<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    if (LOG.isTraceEnabled()) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      LOG.trace("Delete " + procId);<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    ByteSlot slot = acquireSlot();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      // Serialize the delete<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.566"></a>
+<span class="sourceLineNo">567</span><a name="line.567"></a>
+<span class="sourceLineNo">568</span>      // Push the transaction data and wait until it is persisted<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    } catch (IOException e) {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      // We are not able to serialize the procedure.<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      // this is a code error, and we are not able to go on.<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.573"></a>
+<span class="sourceLineNo">574</span>      throw new RuntimeException(e);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    } finally {<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      releaseSlot(slot);<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
+<span class="sourceLineNo">579</span><a name="line.579"></a>
+<span class="sourceLineNo">580</span>  @Override<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  public void delete(final Procedure proc, final long[] subProcIds) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    assert proc != null : "expected a non-null procedure";<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    if (LOG.isTraceEnabled()) {<a name="line.584"></a>
+<span class="sourceLineNo">585</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    }<a name="line.586"></a>
+<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">588</span>    ByteSlot slot = acquireSlot();<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    try {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>      // Serialize the delete<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>      // Push the transaction data and wait until it is persisted<a name="line.593"></a>
+<span class="sourceLineNo">594</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>    } catch (IOException e) {<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      // We are not able to serialize the procedure.<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      // this is a code error, and we are not able to go on.<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      throw new RuntimeException(e);<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    } finally {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      releaseSlot(slot);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    }<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  }<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span>  @Override<a name="line.605"></a>
+<span class="sourceLineNo">606</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    if (count == 0) return;<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      delete(procIds);<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    } else if (count == 1) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      delete(procIds[offset]);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    } else {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
+<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>  private void delete(final long[] procIds) {<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    if (LOG.isTraceEnabled()) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    }<a name="line.620"></a>
+<span class="sourceLineNo">621</span><a name="line.621"></a>
+<span class="sourceLineNo">622</span>    final ByteSlot slot = acquireSlot();<a name="line.622"></a>
+<span class="sourceLineNo">623</span>    try {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>      // Serialize the delete<a name="line.624"></a>
+<span class="sourceLineNo">625</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      }<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span>      // Push the transaction data and wait until it is persisted<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    } catch (IOException e) {<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      // We are not able to serialize the procedure.<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      // this is a code error, and we are not able to go on.<a name="line.633"></a>
+<span class="sourceLineNo">634</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      throw new RuntimeException(e);<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    } finally {<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      releaseSlot(slot);<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    }<a name="line.638"></a>
+<span class="sourceLineNo">639</span>  }<a name="line.639"></a>
+<span class="sourceLineNo">640</span><a name="line.640"></a>
+<span class="sourceLineNo">641</span>  private ByteSlot acquireSlot() {<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    ByteSlot slot = slotsCache.poll();<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    return slot != null ? slot : new ByteSlot();<a name="line.643"></a>
+<span class="sourceLineNo">644</span>  }<a name="line.644"></a>
+<span class="sourceLineNo">645</span><a name="line.645"></a>
+<span class="sourceLineNo">646</span>  private void releaseSlot(final ByteSlot slot) {<a name="line.646"></a>
+<span class="sourceLineNo">647</span>    slot.reset();<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    slotsCache.offer(slot);<a name="line.648"></a>
+<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.651"></a>
+<span class="sourceLineNo">652</span><a name="line.652"></a>
+<span class="sourceLineNo">653</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      final long procId, final long[] subProcIds) {<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    if (!isRunning()) {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.656"></a>
+<span class="sourceLineNo">657</span>    }<a name="line.657"></a>
+<span class="sourceLineNo">658</span>    if (logs.isEmpty()) {<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.659"></a>
+<span class="sourceLineNo">660</span>    }<a name="line.660"></a>
+<span class="sourceLineNo">661</span><a name="line.661"></a>
+<span class="sourceLineNo">662</span>    long logId = -1;<a name="line.662"></a>
+<span class="sourceLineNo">663</span>    lock.lock();<a name="line.663"></a>
+<span class="sourceLineNo">664</span>    try {<a name="line.664"></a>
+<span class="sourceLineNo">665</span>      // Wait for the sync to be completed<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      while (true) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>        if (!isRunning()) {<a name="line.667"></a>
+<span class="sourceLineNo">668</span>          throw new RuntimeException("store no longer running");<a name="line.668"></a>
+<span class="sourceLineNo">669</span>        } else if (isSyncAborted()) {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.670"></a>
+<span class="sourceLineNo">671</span>        } else if (inSync.get()) {<a name="line.671"></a>
+<span class="sourceLineNo">672</span>          syncCond.await();<a name="line.672"></a>
+<span class="sourceLineNo">673</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>          slotCond.signal();<a name="line.674"></a>
+<span class="sourceLineNo">675</span>          syncCond.await();<a name="line.675"></a>
+<span class="sourceLineNo">676</span>        } else {<a name="line.676"></a>
+<span class="sourceLineNo">677</span>          break;<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        }<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      }<a name="line.679"></a>
+<span class="sourceLineNo">680</span><a name="line.680"></a>
+<span class="sourceLineNo">681</span>      final long pushSyncId = syncId.get();<a name="line.681"></a>
+<span class="sourceLineNo">682</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      slots[slotIndex++] = slot;<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      logId = flushLogId;<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>      // Notify that there is new data<a name="line.686"

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/apidocs/org/apache/hadoop/hbase/client/AsyncAdmin.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/AsyncAdmin.html b/apidocs/org/apache/hadoop/hbase/client/AsyncAdmin.html
index 2d899da..275a600 100644
--- a/apidocs/org/apache/hadoop/hbase/client/AsyncAdmin.html
+++ b/apidocs/org/apache/hadoop/hbase/client/AsyncAdmin.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":6,"i1":6,"i2":18,"i3":6,"i4":6,"i5":6,"i6":18,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":18,"i16":18,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6,"i23":6,"i24":6,"i25":6,"i26":6,"i27":6,"i28":6,"i29":6,"i30":6,"i31":6,"i32":6,"i33":6,"i34":6,"i35":6,"i36":6,"i37":6,"i38":6,"i39":6,"i40":6,"i41":6,"i42":6,"i43":6,"i44":6,"i45":6,"i46":6,"i47":6,"i48":18,"i49":6,"i50":6,"i51":18,"i52":6,"i53":6,"i54":6,"i55":6,"i56":6,"i57":6,"i58":18,"i59":18,"i60":18,"i61":6,"i62":6,"i63":6,"i64":6,"i65":6,"i66":6,"i67":6,"i68":18,"i69":6,"i70":6,"i71":6,"i72":6,"i73":6,"i74":6,"i75":6,"i76":6,"i77":6,"i78":6,"i79":6,"i80":6,"i81":6,"i82":6,"i83":6,"i84":18,"i85":6,"i86":6,"i87":6,"i88":6,"i89":6,"i90":6,"i91":6,"i92":18,"i93":6,"i94":6,"i95":6,"i96":18,"i97":6,"i98":6,"i99":6,"i100":6,"i101":6,"i102":18,"i103":18,"i104":6,"i105":6,"i106":6,"i107":6,"i108":6,"i109":6,"i110":6,"i111":6,"i112":6,"i113":6,"i114":6,"i115":6,"i116":6,"i117":6,"i118":6,"i119"
 :6,"i120":6,"i121":6,"i122":6,"i123":6,"i124":6,"i125":6,"i126":6,"i127":6,"i128":6,"i129":6,"i130":18,"i131":18,"i132":6,"i133":6,"i134":6,"i135":6,"i136":6,"i137":6,"i138":6,"i139":6,"i140":6,"i141":6,"i142":6,"i143":6,"i144":6};
+var methods = {"i0":6,"i1":6,"i2":18,"i3":6,"i4":6,"i5":6,"i6":18,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":18,"i17":18,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6,"i23":6,"i24":6,"i25":6,"i26":6,"i27":6,"i28":6,"i29":6,"i30":6,"i31":6,"i32":6,"i33":6,"i34":6,"i35":6,"i36":6,"i37":6,"i38":6,"i39":6,"i40":6,"i41":6,"i42":6,"i43":6,"i44":6,"i45":6,"i46":6,"i47":6,"i48":6,"i49":18,"i50":6,"i51":6,"i52":18,"i53":6,"i54":6,"i55":6,"i56":6,"i57":6,"i58":6,"i59":18,"i60":18,"i61":18,"i62":6,"i63":6,"i64":6,"i65":6,"i66":6,"i67":6,"i68":6,"i69":18,"i70":6,"i71":6,"i72":6,"i73":6,"i74":6,"i75":6,"i76":6,"i77":6,"i78":6,"i79":6,"i80":6,"i81":6,"i82":6,"i83":6,"i84":6,"i85":18,"i86":6,"i87":6,"i88":6,"i89":6,"i90":6,"i91":6,"i92":6,"i93":18,"i94":6,"i95":6,"i96":6,"i97":18,"i98":6,"i99":6,"i100":6,"i101":6,"i102":6,"i103":18,"i104":18,"i105":6,"i106":6,"i107":6,"i108":6,"i109":6,"i110":6,"i111":6,"i112":6,"i113":6,"i114":6,"i115":6,"i116":6,"i117":6,"i118":6,"i119"
 :6,"i120":6,"i121":6,"i122":6,"i123":6,"i124":6,"i125":6,"i126":6,"i127":6,"i128":6,"i129":6,"i130":6,"i131":18,"i132":18,"i133":6,"i134":6,"i135":6,"i136":6,"i137":6,"i138":6,"i139":6,"i140":6,"i141":6,"i142":6,"i143":6,"i144":6,"i145":6};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -223,19 +223,27 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 </td>
 </tr>
 <tr id="i15" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;newTableName,
+                boolean&nbsp;preserveSplits)</code>
+<div class="block">Create a new table by cloning the existent table schema.</div>
+</td>
+</tr>
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compact-org.apache.hadoop.hbase.TableName-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily)</code>
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily,
@@ -243,40 +251,40 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <div class="block">Compact a column family within a table.</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/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compact-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compactRegion-byte:A-">compactRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Compact an individual region.</div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compactRegion-byte:A-byte:A-">compactRegion</a></span>(byte[]&nbsp;regionName,
              byte[]&nbsp;columnFamily)</code>
 <div class="block">Compact a column family within a region.</div>
 </td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compactRegionServer-org.apache.hadoop.hbase.ServerName-">compactRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Compact all regions on the region server.</div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>&lt;S,R&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;R&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#coprocessorService-java.util.function.Function-org.apache.hadoop.hbase.client.ServiceCaller-">coprocessorService</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java.util.function">Function</a>&lt;com.google.protobuf.RpcChannel,S&gt;&nbsp;stubMaker,
                   <a href="../../../../../org/apache/hadoop/hbase/client/ServiceCaller.html" title="interface in org.apache.hadoop.hbase.client">ServiceCaller</a>&lt;S,R&gt;&nbsp;callable)</code>
 <div class="block">Execute the given coprocessor call on the master.</div>
 </td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>&lt;S,R&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;R&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#coprocessorService-java.util.function.Function-org.apache.hadoop.hbase.client.ServiceCaller-org.apache.hadoop.hbase.ServerName-">coprocessorService</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java.util.function">Function</a>&lt;com.google.protobuf.RpcChannel,S&gt;&nbsp;stubMaker,
                   <a href="../../../../../org/apache/hadoop/hbase/client/ServiceCaller.html" title="interface in org.apache.hadoop.hbase.client">ServiceCaller</a>&lt;S,R&gt;&nbsp;callable,
@@ -284,26 +292,26 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <div class="block">Execute the given coprocessor call on the given region server.</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#createNamespace-org.apache.hadoop.hbase.NamespaceDescriptor-">createNamespace</a></span>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;descriptor)</code>
 <div class="block">Create a new namespace.</div>
 </td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</code>
 <div class="block">Creates a new table.</div>
 </td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-byte:A:A-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
            byte[][]&nbsp;splitKeys)</code>
 <div class="block">Creates a new table with an initial set of empty regions defined by the specified split keys.</div>
 </td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-byte:A-byte:A-int-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
            byte[]&nbsp;startKey,
@@ -312,7 +320,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <div class="block">Creates a new table with the specified number of regions.</div>
 </td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#decommissionRegionServers-java.util.List-boolean-">decommissionRegionServers</a></span>(<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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers,
                          boolean&nbsp;offload)</code>
@@ -320,50 +328,50 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
  assigned to them.</div>
 </td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteColumnFamily-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumnFamily</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   byte[]&nbsp;columnFamily)</code>
 <div class="block">Delete a column family from a table.</div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteNamespace-java.lang.String-">deleteNamespace</a></span>(<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;name)</code>
 <div class="block">Delete an existing namespace.</div>
 </td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteSnapshot-java.lang.String-">deleteSnapshot</a></span>(<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;snapshotName)</code>
 <div class="block">Delete an existing snapshot.</div>
 </td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteSnapshots--">deleteSnapshots</a></span>()</code>
 <div class="block">Delete all existing snapshots.</div>
 </td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteSnapshots-java.util.regex.Pattern-">deleteSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">Delete existing snapshots whose names match the pattern passed.</div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteTable-org.apache.hadoop.hbase.TableName-">deleteTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Deletes a table.</div>
 </td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteTableSnapshots-java.util.regex.Pattern-">deleteTableSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern)</code>
 <div class="block">Delete all existing snapshots matching the given table name pattern.</div>
 </td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteTableSnapshots-java.util.regex.Pattern-java.util.regex.Pattern-">deleteTableSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;snapshotNamePattern)</code>
@@ -371,43 +379,43 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
  name regular expression.</div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#disableReplicationPeer-java.lang.String-">disableReplicationPeer</a></span>(<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;peerId)</code>
 <div class="block">Stop the replication stream to the specified peer</div>
 </td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#disableTable-org.apache.hadoop.hbase.TableName-">disableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable a table.</div>
 </td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#disableTableReplication-org.apache.hadoop.hbase.TableName-">disableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable a table's replication switch.</div>
 </td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#enableReplicationPeer-java.lang.String-">enableReplicationPeer</a></span>(<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;peerId)</code>
 <div class="block">Restart the replication stream to the specified peer</div>
 </td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#enableTable-org.apache.hadoop.hbase.TableName-">enableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table.</div>
 </td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#enableTableReplication-org.apache.hadoop.hbase.TableName-">enableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table's replication switch.</div>
 </td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#execProcedure-java.lang.String-java.lang.String-java.util.Map-">execProcedure</a></span>(<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;signature,
              <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;instance,
@@ -415,7 +423,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <div class="block">Execute a distributed procedure on a cluster.</div>
 </td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;byte[]&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#execProcedureWithReturn-java.lang.String-java.lang.String-java.util.Map-">execProcedureWithReturn</a></span>(<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;signature,
                        <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;instance,
@@ -423,187 +431,187 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <div class="block">Execute a distributed procedure on a cluster.</div>
 </td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#flush-org.apache.hadoop.hbase.TableName-">flush</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Flush a table.</div>
 </td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#flushRegion-byte:A-">flushRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Flush an individual region.</div>
 </td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#flushRegionServer-org.apache.hadoop.hbase.ServerName-">flushRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Flush all region on the region server.</div>
 </td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getBackupMasters--">getBackupMasters</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getClusterMetrics--">getClusterMetrics</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getClusterMetrics-java.util.EnumSet-">getClusterMetrics</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;org.apache.hadoop.hbase.ClusterMetrics.Option&gt;&nbsp;options)</code>&nbsp;</td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getCompactionState-org.apache.hadoop.hbase.TableName-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getCompactionState-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getCompactionStateForRegion-byte:A-">getCompactionStateForRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Get the current compaction state of region.</div>
 </td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getDescriptor-org.apache.hadoop.hbase.TableName-">getDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Method for getting the tableDescriptor</div>
 </td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getLastMajorCompactionTimestamp-org.apache.hadoop.hbase.TableName-">getLastMajorCompactionTimestamp</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the timestamp of the last major compaction for the passed table.</div>
 </td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getLastMajorCompactionTimestampForRegion-byte:A-">getLastMajorCompactionTimestampForRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Get the timestamp of the last major compaction for the passed region.</div>
 </td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getLocks--">getLocks</a></span>()</code>
 <div class="block">List locks.</div>
 </td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getMaster--">getMaster</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getMasterCoprocessorNames--">getMasterCoprocessorNames</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i61" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getMasterInfoPort--">getMasterInfoPort</a></span>()</code>
 <div class="block">Get the info port of the current master if one is available.</div>
 </td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i62" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getNamespaceDescriptor-java.lang.String-">getNamespaceDescriptor</a></span>(<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;name)</code>
 <div class="block">Get a namespace descriptor by name</div>
 </td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getProcedures--">getProcedures</a></span>()</code>
 <div class="block">List procedures</div>
 </td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/quotas/QuotaSettings.html" title="class in org.apache.hadoop.hbase.quotas">QuotaSettings</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getQuota-org.apache.hadoop.hbase.quotas.QuotaFilter-">getQuota</a></span>(<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaFilter.html" title="class in org.apache.hadoop.hbase.quotas">QuotaFilter</a>&nbsp;filter)</code>
 <div class="block">List the quotas based on the filter.</div>
 </td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getRegionMetrics-org.apache.hadoop.hbase.ServerName-">getRegionMetrics</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Get a list of <a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase"><code>RegionMetrics</code></a> of all regions hosted on a region seerver.</div>
 </td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getRegionMetrics-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.TableName-">getRegionMetrics</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                 <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get a list of <a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase"><code>RegionMetrics</code></a> of all regions hosted on a region seerver for a table.</div>
 </td>
 </tr>
-<tr id="i66" class="altColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getRegions-org.apache.hadoop.hbase.ServerName-">getRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Get all the online regions on a region server.</div>
 </td>
 </tr>
-<tr id="i67" class="rowColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getRegions-org.apache.hadoop.hbase.TableName-">getRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the regions of a given table.</div>
 </td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getRegionServers--">getRegionServers</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i69" class="rowColor">
+<tr id="i70" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getReplicationPeerConfig-java.lang.String-">getReplicationPeerConfig</a></span>(<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;peerId)</code>
 <div class="block">Returns the configured ReplicationPeerConfig for the specified peer</div>
 </td>
 </tr>
-<tr id="i70" class="altColor">
+<tr id="i71" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/security/SecurityCapability.html" title="enum in org.apache.hadoop.hbase.client.security">SecurityCapability</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getSecurityCapabilities--">getSecurityCapabilities</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i72" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isBalancerEnabled--">isBalancerEnabled</a></span>()</code>
 <div class="block">Query the current state of the balancer.</div>
 </td>
 </tr>
-<tr id="i72" class="altColor">
+<tr id="i73" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isCatalogJanitorEnabled--">isCatalogJanitorEnabled</a></span>()</code>
 <div class="block">Query on the catalog janitor state.</div>
 </td>
 </tr>
-<tr id="i73" class="rowColor">
+<tr id="i74" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isCleanerChoreEnabled--">isCleanerChoreEnabled</a></span>()</code>
 <div class="block">Query the current state of the cleaner chore.</div>
 </td>
 </tr>
-<tr id="i74" class="altColor">
+<tr id="i75" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isMasterInMaintenanceMode--">isMasterInMaintenanceMode</a></span>()</code>
 <div class="block">Check whether master is in maintenance mode</div>
 </td>
 </tr>
-<tr id="i75" class="rowColor">
+<tr id="i76" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isMergeEnabled--">isMergeEnabled</a></span>()</code>
 <div class="block">Query the current state of the Merge switch.</div>
 </td>
 </tr>
-<tr id="i76" class="altColor">
+<tr id="i77" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isNormalizerEnabled--">isNormalizerEnabled</a></span>()</code>
 <div class="block">Query the current state of the region normalizer</div>
 </td>
 </tr>
-<tr id="i77" class="rowColor">
+<tr id="i78" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isProcedureFinished-java.lang.String-java.lang.String-java.util.Map-">isProcedureFinished</a></span>(<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;signature,
                    <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;instance,
@@ -611,23 +619,23 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <div class="block">Check the current state of the specified procedure.</div>
 </td>
 </tr>
-<tr id="i78" class="altColor">
+<tr id="i79" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isSnapshotFinished-org.apache.hadoop.hbase.client.SnapshotDescription-">isSnapshotFinished</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&nbsp;snapshot)</code>
 <div class="block">Check the current state of the passed snapshot.</div>
 </td>
 </tr>
-<tr id="i79" class="rowColor">
+<tr id="i80" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isSplitEnabled--">isSplitEnabled</a></span>()</code>
 <div class="block">Query the current state of the Split switch.</div>
 </td>
 </tr>
-<tr id="i80" class="altColor">
+<tr id="i81" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isTableAvailable-org.apache.hadoop.hbase.TableName-">isTableAvailable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i81" class="rowColor">
+<tr id="i82" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isTableAvailable-org.apache.hadoop.hbase.TableName-byte:A:A-">isTableAvailable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 byte[][]&nbsp;splitKeys)</code>
@@ -635,119 +643,119 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
  which was used while creating the given table.</div>
 </td>
 </tr>
-<tr id="i82" class="altColor">
+<tr id="i83" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isTableDisabled-org.apache.hadoop.hbase.TableName-">isTableDisabled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i83" class="rowColor">
+<tr id="i84" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isTableEnabled-org.apache.hadoop.hbase.TableName-">isTableEnabled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i84" class="altColor">
+<tr id="i85" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listDeadServers--">listDeadServers</a></span>()</code>
 <div class="block">List all the dead region servers.</div>
 </td>
 </tr>
-<tr id="i85" class="rowColor">
+<tr id="i86" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listDecommissionedRegionServers--">listDecommissionedRegionServers</a></span>()</code>
 <div class="block">List region servers marked as decommissioned, which can not be assigned regions.</div>
 </td>
 </tr>
-<tr id="i86" class="altColor">
+<tr id="i87" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listNamespaceDescriptors--">listNamespaceDescriptors</a></span>()</code>
 <div class="block">List available namespace descriptors</div>
 </td>
 </tr>
-<tr id="i87" class="rowColor">
+<tr id="i88" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/replication/TableCFs.html" title="class in org.apache.hadoop.hbase.client.replication">TableCFs</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listReplicatedTableCFs--">listReplicatedTableCFs</a></span>()</code>
 <div class="block">Find all table and column families that are replicated from this cluster</div>
 </td>
 </tr>
-<tr id="i88" class="altColor">
+<tr id="i89" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listReplicationPeers--">listReplicationPeers</a></span>()</code>
 <div class="block">Return a list of replication peers.</div>
 </td>
 </tr>
-<tr id="i89" class="rowColor">
+<tr id="i90" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listReplicationPeers-java.util.regex.Pattern-">listReplicationPeers</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">Return a list of replication peers.</div>
 </td>
 </tr>
-<tr id="i90" class="altColor">
+<tr id="i91" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listSnapshots--">listSnapshots</a></span>()</code>
 <div class="block">List completed snapshots.</div>
 </td>
 </tr>
-<tr id="i91" class="rowColor">
+<tr id="i92" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listSnapshots-java.util.regex.Pattern-">listSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">List all the completed snapshots matching the given pattern.</div>
 </td>
 </tr>
-<tr id="i92" class="altColor">
+<tr id="i93" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableDescriptors--">listTableDescriptors</a></span>()</code>
 <div class="block">List all the userspace tables.</div>
 </td>
 </tr>
-<tr id="i93" class="rowColor">
+<tr id="i94" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableDescriptors-boolean-">listTableDescriptors</a></span>(boolean&nbsp;includeSysTables)</code>
 <div class="block">List all the tables.</div>
 </td>
 </tr>
-<tr id="i94" class="altColor">
+<tr id="i95" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableDescriptors-java.util.regex.Pattern-boolean-">listTableDescriptors</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern,
                     boolean&nbsp;includeSysTables)</code>
 <div class="block">List all the tables matching the given pattern.</div>
 </td>
 </tr>
-<tr id="i95" class="rowColor">
+<tr id="i96" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableDescriptorsByNamespace-java.lang.String-">listTableDescriptorsByNamespace</a></span>(<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;name)</code>
 <div class="block">Get list of table descriptors by namespace.</div>
 </td>
 </tr>
-<tr id="i96" class="altColor">
+<tr id="i97" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableNames--">listTableNames</a></span>()</code>
 <div class="block">List all of the names of userspace tables.</div>
 </td>
 </tr>
-<tr id="i97" class="rowColor">
+<tr id="i98" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableNames-boolean-">listTableNames</a></span>(boolean&nbsp;includeSysTables)</code>
 <div class="block">List all of the names of tables.</div>
 </td>
 </tr>
-<tr id="i98" class="altColor">
+<tr id="i99" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableNames-java.util.regex.Pattern-boolean-">listTableNames</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern,
               boolean&nbsp;includeSysTables)</code>
 <div class="block">List all of the names of userspace tables.</div>
 </td>
 </tr>
-<tr id="i99" class="rowColor">
+<tr id="i100" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableNamesByNamespace-java.lang.String-">listTableNamesByNamespace</a></span>(<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;name)</code>
 <div class="block">Get list of table names by namespace.</div>
 </td>
 </tr>
-<tr id="i100" class="altColor">
+<tr id="i101" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableSnapshots-java.util.regex.Pattern-">listTableSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern)</code>
 <div class="block">List all the completed snapshots matching the given table name pattern.</div>
 </td>
 </tr>
-<tr id="i101" class="rowColor">
+<tr id="i102" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableSnapshots-java.util.regex.Pattern-java.util.regex.Pattern-">listTableSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;snapshotNamePattern)</code>
@@ -755,20 +763,20 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
  name regular expression.</div>
 </td>
 </tr>
-<tr id="i102" class="altColor">
+<tr id="i103" class="rowColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompact-org.apache.hadoop.hbase.TableName-">majorCompact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Major compact a table.</div>
 </td>
 </tr>
-<tr id="i103" class="rowColor">
+<tr id="i104" class="altColor">
 <td class="colFirst"><code>default <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompact-org.apache.hadoop.hbase.TableName-byte:A-">majorCompact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
             byte[]&nbsp;columnFamily)</code>
 <div class="block">Major compact a column family within a table.</div>
 </td>
 </tr>
-<tr id="i104" class="altColor">
+<tr id="i105" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompact-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.CompactType-">majorCompact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
             byte[]&nbsp;columnFamily,
@@ -776,33 +784,33 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <div class="block">Major compact a column family within a table.</div>
 </td>
 </tr>
-<tr id="i105" class="rowColor">
+<tr id="i106" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompact-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">majorCompact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
             <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Major compact a table.</div>
 </td>
 </tr>
-<tr id="i106" class="altColor">
+<tr id="i107" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompactRegion-byte:A-">majorCompactRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Major compact a region.</div>
 </td>
 </tr>
-<tr id="i107" class="rowColor">
+<tr id="i108" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompactRegion-byte:A-byte:A-">majorCompactRegion</a></span>(byte[]&nbsp;regionName,
                   byte[]&nbsp;columnFamily)</code>
 <div class="block">Major compact a column family within region.</div>
 </td>
 </tr>
-<tr id="i108" class="altColor">
+<tr id="i109" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompactRegionServer-org.apache.hadoop.hbase.ServerName-">majorCompactRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Compact all regions on the region server.</div>
 </td>
 </tr>
-<tr id="i109"

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
index b274a3c..60a8d07 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2777">HBaseFsck.TableInfo</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2779">HBaseFsck.TableInfo</a>
 extends <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></pre>
 <div class="block">Maintain information about a particular table.</div>
 </li>
@@ -293,7 +293,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tableName</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2778">tableName</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2780">tableName</a></pre>
 </li>
 </ul>
 <a name="deployedOn">
@@ -302,7 +302,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>deployedOn</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util">TreeSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2779">deployedOn</a></pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util">TreeSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2781">deployedOn</a></pre>
 </li>
 </ul>
 <a name="backwards">
@@ -311,7 +311,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>backwards</h4>
-<pre>final&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/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2782">backwards</a></pre>
+<pre>final&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/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2784">backwards</a></pre>
 </li>
 </ul>
 <a name="sidelinedRegions">
@@ -320,7 +320,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>sidelinedRegions</h4>
-<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;org.apache.hadoop.fs.Path,<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2785">sidelinedRegions</a></pre>
+<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;org.apache.hadoop.fs.Path,<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2787">sidelinedRegions</a></pre>
 </li>
 </ul>
 <a name="sc">
@@ -329,7 +329,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>sc</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitCalculator.html" title="class in org.apache.hadoop.hbase.util">RegionSplitCalculator</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2788">sc</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitCalculator.html" title="class in org.apache.hadoop.hbase.util">RegionSplitCalculator</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2790">sc</a></pre>
 </li>
 </ul>
 <a name="htds">
@@ -338,7 +338,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>htds</h4>
-<pre>final&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;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2791">htds</a></pre>
+<pre>final&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;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2793">htds</a></pre>
 </li>
 </ul>
 <a name="overlapGroups">
@@ -347,7 +347,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>overlapGroups</h4>
-<pre>final&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.Multimap&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2794">overlapGroups</a></pre>
+<pre>final&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.Multimap&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2796">overlapGroups</a></pre>
 </li>
 </ul>
 <a name="regionsFromMeta">
@@ -356,7 +356,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>regionsFromMeta</h4>
-<pre>private&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2798">regionsFromMeta</a></pre>
+<pre>private&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2800">regionsFromMeta</a></pre>
 </li>
 </ul>
 </li>
@@ -373,7 +373,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TableInfo</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2800">TableInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2802">TableInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name)</pre>
 </li>
 </ul>
 </li>
@@ -390,7 +390,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getHTD</h4>
-<pre>private&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/util/HBaseFsck.TableInfo.html#line.2808">getHTD</a>()</pre>
+<pre>private&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/util/HBaseFsck.TableInfo.html#line.2810">getHTD</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>descriptor common to all regions.  null if are none or multiple!</dd>
@@ -403,7 +403,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegionInfo</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2818">addRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hir)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2820">addRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hir)</pre>
 </li>
 </ul>
 <a name="addServer-org.apache.hadoop.hbase.ServerName-">
@@ -412,7 +412,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addServer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2843">addServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2845">addServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server)</pre>
 </li>
 </ul>
 <a name="getName--">
@@ -421,7 +421,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2847">getName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2849">getName</a>()</pre>
 </li>
 </ul>
 <a name="getNumRegions--">
@@ -430,7 +430,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumRegions</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2851">getNumRegions</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2853">getNumRegions</a>()</pre>
 </li>
 </ul>
 <a name="getRegionsFromMeta--">
@@ -439,7 +439,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionsFromMeta</h4>
-<pre>public&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2855">getRegionsFromMeta</a>()</pre>
+<pre>public&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2857">getRegionsFromMeta</a>()</pre>
 </li>
 </ul>
 <a name="checkRegionChain-org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler-">
@@ -448,7 +448,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkRegionChain</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.3310">checkRegionChain</a>(<a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandler.html" title="interface in org.apache.hadoop.hbase.util.hbck">TableIntegrityErrorHandler</a>&nbsp;handler)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.3312">checkRegionChain</a>(<a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandler.html" title="interface in org.apache.hadoop.hbase.util.hbck">TableIntegrityErrorHandler</a>&nbsp;handler)
                          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">Check the region chain (from META) of this table.  We are looking for
  holes, overlaps, and cycles.</div>
@@ -466,7 +466,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>handleOverlapsParallel</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.3440">handleOverlapsParallel</a>(<a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandler.html" title="interface in org.apache.hadoop.hbase.util.hbck">TableIntegrityErrorHandler</a>&nbsp;handler,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.3442">handleOverlapsParallel</a>(<a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandler.html" title="interface in org.apache.hadoop.hbase.util.hbck">TableIntegrityErrorHandler</a>&nbsp;handler,
                                        byte[]&nbsp;prevKey)
                                 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>
@@ -481,7 +481,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>dump</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.3477">dump</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a>&lt;byte[]&gt;&nbsp;splits,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.3479">dump</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a>&lt;byte[]&gt;&nbsp;splits,
           org.apache.hbase.thirdparty.com.google.common.collect.Multimap&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;regions)</pre>
 <div class="block">This dumps data in a visually reasonable way for visual debugging</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
index 7a981d8..b55c738 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4338">HBaseFsck.WorkItemHdfsDir</a>
+<pre>class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4340">HBaseFsck.WorkItemHdfsDir</a>
 extends <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>
 implements <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;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</pre>
 <div class="block">Contact hdfs and get all information about specified table directory into
@@ -218,7 +218,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockList">
 <li class="blockList">
 <h4>tableDir</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.FileStatus <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4339">tableDir</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.FileStatus <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4341">tableDir</a></pre>
 </li>
 </ul>
 <a name="errors">
@@ -227,7 +227,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockList">
 <li class="blockList">
 <h4>errors</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4340">errors</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4342">errors</a></pre>
 </li>
 </ul>
 <a name="fs">
@@ -236,7 +236,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>fs</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4341">fs</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4343">fs</a></pre>
 </li>
 </ul>
 </li>
@@ -253,7 +253,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WorkItemHdfsDir</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4343">WorkItemHdfsDir</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4345">WorkItemHdfsDir</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                 <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a>&nbsp;errors,
                 org.apache.hadoop.fs.FileStatus&nbsp;status)</pre>
 </li>
@@ -272,7 +272,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4351">call</a>()
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4353">call</a>()
           throws <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>,
                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
index 3752739..94d4062 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4458">HBaseFsck.WorkItemHdfsRegionInfo</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4460">HBaseFsck.WorkItemHdfsRegionInfo</a>
 extends <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>
 implements <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;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</pre>
 <div class="block">Contact hdfs and get all information about specified table directory into
@@ -218,7 +218,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockList">
 <li class="blockList">
 <h4>hbi</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4459">hbi</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4461">hbi</a></pre>
 </li>
 </ul>
 <a name="hbck">
@@ -227,7 +227,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockList">
 <li class="blockList">
 <h4>hbck</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4460">hbck</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4462">hbck</a></pre>
 </li>
 </ul>
 <a name="errors">
@@ -236,7 +236,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>errors</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4461">errors</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4463">errors</a></pre>
 </li>
 </ul>
 </li>
@@ -253,7 +253,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WorkItemHdfsRegionInfo</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4463">WorkItemHdfsRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hbi,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4465">WorkItemHdfsRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;hbi,
                        <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a>&nbsp;hbck,
                        <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a>&nbsp;errors)</pre>
 </li>
@@ -272,7 +272,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4470">call</a>()
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4472">call</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="overrideSpecifyLabel">Specified by:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
index c7345f7..50bd593 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2758">HBaseFsck.WorkItemOverlapMerge</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2760">HBaseFsck.WorkItemOverlapMerge</a>
 extends <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>
 implements <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;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</pre>
 </li>
@@ -211,7 +211,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockList">
 <li class="blockList">
 <h4>handler</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandler.html" title="interface in org.apache.hadoop.hbase.util.hbck">TableIntegrityErrorHandler</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html#line.2759">handler</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandler.html" title="interface in org.apache.hadoop.hbase.util.hbck">TableIntegrityErrorHandler</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html#line.2761">handler</a></pre>
 </li>
 </ul>
 <a name="overlapgroup">
@@ -220,7 +220,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>overlapgroup</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html#line.2760">overlapgroup</a></pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html#line.2762">overlapgroup</a></pre>
 </li>
 </ul>
 </li>
@@ -237,7 +237,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WorkItemOverlapMerge</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html#line.2762">WorkItemOverlapMerge</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;overlapgroup,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html#line.2764">WorkItemOverlapMerge</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;overlapgroup,
                      <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandler.html" title="interface in org.apache.hadoop.hbase.util.hbck">TableIntegrityErrorHandler</a>&nbsp;handler)</pre>
 </li>
 </ul>
@@ -255,7 +255,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html#line.2768">call</a>()
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html#line.2770">call</a>()
           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
index ad7df74..851a768 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4273">HBaseFsck.WorkItemRegion</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4275">HBaseFsck.WorkItemRegion</a>
 extends <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>
 implements <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;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</pre>
 <div class="block">Contact a region server and get all information from it</div>
@@ -226,7 +226,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockList">
 <li class="blockList">
 <h4>hbck</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4274">hbck</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4276">hbck</a></pre>
 </li>
 </ul>
 <a name="rsinfo">
@@ -235,7 +235,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockList">
 <li class="blockList">
 <h4>rsinfo</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4275">rsinfo</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4277">rsinfo</a></pre>
 </li>
 </ul>
 <a name="errors">
@@ -244,7 +244,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockList">
 <li class="blockList">
 <h4>errors</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4276">errors</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4278">errors</a></pre>
 </li>
 </ul>
 <a name="connection">
@@ -253,7 +253,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>connection</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4277">connection</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4279">connection</a></pre>
 </li>
 </ul>
 </li>
@@ -270,7 +270,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WorkItemRegion</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4279">WorkItemRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a>&nbsp;hbck,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4281">WorkItemRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a>&nbsp;hbck,
                <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;info,
                <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a>&nbsp;errors,
                <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;connection)</pre>
@@ -290,7 +290,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockList">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4288">call</a>()
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4290">call</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="overrideSpecifyLabel">Specified by:</span></dt>
@@ -306,7 +306,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>filterRegions</h4>
-<pre>private&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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4322">filterRegions</a>(<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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions)</pre>
+<pre>private&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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4324">filterRegions</a>(<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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions)</pre>
 </li>
 </ul>
 </li>


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>
+<span class="

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateNamespaceProcedureBiConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateNamespaceProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateNamespaceProcedureBiConsumer.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateNamespaceProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateNamespaceProcedureBiConsumer.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateTableProcedureBiConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateTableProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateTableProcedureBiConsumer.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateTableProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateTableProcedureBiConsumer.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteColumnFamilyProcedureBiConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteColumnFamilyProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteColumnFamilyProcedureBiConsumer.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteColumnFamilyProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteColumnFamilyProcedureBiConsumer.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteNamespaceProcedureBiConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteNamespaceProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteNamespaceProcedureBiConsumer.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteNamespaceProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteNamespaceProcedureBiConsumer.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteTableProcedureBiConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteTableProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteTableProcedureBiConsumer.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteTableProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteTableProcedureBiConsumer.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DisableTableProcedureBiConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DisableTableProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DisableTableProcedureBiConsumer.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DisableTableProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DisableTableProcedureBiConsumer.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.EnableTableProcedureBiConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.EnableTableProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.EnableTableProcedureBiConsumer.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.EnableTableProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.EnableTableProcedureBiConsumer.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.MasterRpcCall.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.MasterRpcCall.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.MasterRpcCall.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.MasterRpcCall.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.MasterRpcCall.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 


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

Posted by gi...@apache.org.
Published site at 2912c953551bedbfbf30c32c156ed7bb187d54c3.


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

Branch: refs/heads/asf-site
Commit: d220bc5e774bf03a5f59b9efba2c1f73a53753f7
Parents: f50447c
Author: jenkins <bu...@apache.org>
Authored: Thu Apr 12 14:48:53 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Thu Apr 12 14:48:53 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |     4 +-
 apache_hbase_reference_guide.pdf                | 37773 +++++++++--------
 apidocs/index-all.html                          |     8 +
 .../hadoop/hbase/class-use/TableName.html       |    16 +
 .../org/apache/hadoop/hbase/client/Admin.html   |   437 +-
 .../apache/hadoop/hbase/client/AsyncAdmin.html  |   288 +-
 .../hadoop/hbase/mapreduce/CellCounter.html     |     2 +-
 .../hadoop/hbase/mapreduce/WALPlayer.html       |     4 +-
 .../org/apache/hadoop/hbase/client/Admin.html   |    13 +-
 .../apache/hadoop/hbase/client/AsyncAdmin.html  |    12 +-
 .../hadoop/hbase/mapreduce/CellCounter.html     |    81 +-
 .../hadoop/hbase/mapreduce/RowCounter.html      |     6 +-
 .../hadoop/hbase/mapreduce/WALPlayer.html       |    73 +-
 book.html                                       |   165 +-
 bulk-loads.html                                 |     4 +-
 checkstyle-aggregate.html                       | 31892 +++++++-------
 checkstyle.rss                                  |    16 +-
 coc.html                                        |     4 +-
 dependencies.html                               |     4 +-
 dependency-convergence.html                     |     4 +-
 dependency-info.html                            |     4 +-
 dependency-management.html                      |     4 +-
 devapidocs/constant-values.html                 |     6 +-
 devapidocs/index-all.html                       |    22 +-
 .../hadoop/hbase/RSGroupTableAccessor.html      |    28 +-
 .../hadoop/hbase/backup/package-tree.html       |     2 +-
 .../hadoop/hbase/class-use/TableName.html       |   600 +-
 .../org/apache/hadoop/hbase/client/Admin.html   |   437 +-
 .../apache/hadoop/hbase/client/AsyncAdmin.html  |   288 +-
 .../hadoop/hbase/client/AsyncHBaseAdmin.html    |   265 +-
 .../apache/hadoop/hbase/client/HBaseAdmin.html  |   448 +-
 .../hadoop/hbase/client/RawAsyncHBaseAdmin.html |   347 +-
 .../hbase/client/class-use/Connection.html      |    42 +-
 .../hbase/client/class-use/TableDescriptor.html |     2 +-
 .../hadoop/hbase/client/package-tree.html       |    20 +-
 .../hadoop/hbase/executor/package-tree.html     |     2 +-
 .../hadoop/hbase/filter/package-tree.html       |     8 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     8 +-
 .../hadoop/hbase/mapreduce/CellCounter.html     |    17 +-
 .../hadoop/hbase/mapreduce/WALPlayer.html       |     4 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |     4 +-
 .../master/assignment/RegionStateStore.html     |    34 +-
 .../hadoop/hbase/master/package-tree.html       |     4 +-
 .../hbase/master/procedure/package-tree.html    |     4 +-
 .../hadoop/hbase/monitoring/package-tree.html   |     2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    16 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     4 +-
 .../store/wal/WALProcedureStore.PushType.html   |     8 +-
 .../procedure2/store/wal/WALProcedureStore.html |    92 +-
 .../hadoop/hbase/quotas/package-tree.html       |     6 +-
 .../regionserver/ReversedRegionScannerImpl.html |     4 +-
 .../hadoop/hbase/regionserver/package-tree.html |    20 +-
 .../regionserver/querymatcher/package-tree.html |     4 +-
 .../hbase/regionserver/wal/package-tree.html    |     2 +-
 .../replication/regionserver/package-tree.html  |     2 +-
 .../hadoop/hbase/rest/model/package-tree.html   |     2 +-
 .../hbase/security/access/package-tree.html     |     2 +-
 .../hadoop/hbase/security/package-tree.html     |     4 +-
 .../hadoop/hbase/thrift/ThriftServer.html       |    46 +-
 .../hadoop/hbase/thrift2/ThriftServer.html      |    83 +-
 .../HBaseFsck.ErrorReporter.ERROR_CODE.html     |    76 +-
 .../hbase/util/HBaseFsck.ErrorReporter.html     |    30 +-
 .../hbase/util/HBaseFsck.HBaseFsckTool.html     |     6 +-
 .../hadoop/hbase/util/HBaseFsck.HbckInfo.html   |    56 +-
 .../hadoop/hbase/util/HBaseFsck.HdfsEntry.html  |    14 +-
 .../hadoop/hbase/util/HBaseFsck.MetaEntry.html  |    18 +-
 .../hbase/util/HBaseFsck.OnlineEntry.html       |    10 +-
 .../util/HBaseFsck.PrintingErrorReporter.html   |    42 +-
 .../HBaseFsck.TableInfo.HDFSIntegrityFixer.html |    22 +-
 ...aseFsck.TableInfo.IntegrityFixSuggester.html |    20 +-
 .../hadoop/hbase/util/HBaseFsck.TableInfo.html  |    38 +-
 .../hbase/util/HBaseFsck.WorkItemHdfsDir.html   |    12 +-
 .../util/HBaseFsck.WorkItemHdfsRegionInfo.html  |    12 +-
 .../util/HBaseFsck.WorkItemOverlapMerge.html    |    10 +-
 .../hbase/util/HBaseFsck.WorkItemRegion.html    |    16 +-
 .../org/apache/hadoop/hbase/util/HBaseFsck.html |   172 +-
 .../apache/hadoop/hbase/util/package-tree.html  |     8 +-
 .../hadoop/hbase/RSGroupTableAccessor.html      |    72 +-
 .../org/apache/hadoop/hbase/Version.html        |     6 +-
 .../org/apache/hadoop/hbase/client/Admin.html   |    13 +-
 .../apache/hadoop/hbase/client/AsyncAdmin.html  |    12 +-
 .../hadoop/hbase/client/AsyncHBaseAdmin.html    |     8 +-
 .../client/HBaseAdmin.AbortProcedureFuture.html |    17 +-
 .../HBaseAdmin.AddColumnFamilyFuture.html       |    17 +-
 .../client/HBaseAdmin.CreateTableFuture.html    |    17 +-
 .../HBaseAdmin.DeleteColumnFamilyFuture.html    |    17 +-
 .../client/HBaseAdmin.DeleteTableFuture.html    |    17 +-
 .../client/HBaseAdmin.DisableTableFuture.html   |    17 +-
 .../client/HBaseAdmin.EnableTableFuture.html    |    17 +-
 .../HBaseAdmin.MergeTableRegionsFuture.html     |    17 +-
 .../HBaseAdmin.ModifyColumnFamilyFuture.html    |    17 +-
 .../client/HBaseAdmin.ModifyTableFuture.html    |    17 +-
 .../client/HBaseAdmin.NamespaceFuture.html      |    17 +-
 ...in.ProcedureFuture.WaitForStateCallable.html |    17 +-
 .../client/HBaseAdmin.ProcedureFuture.html      |    17 +-
 .../client/HBaseAdmin.ReplicationFuture.html    |    17 +-
 .../HBaseAdmin.RestoreSnapshotFuture.html       |    17 +-
 .../HBaseAdmin.SplitTableRegionFuture.html      |    17 +-
 ...n.TableFuture.TableWaitForStateCallable.html |    17 +-
 .../hbase/client/HBaseAdmin.TableFuture.html    |    17 +-
 .../client/HBaseAdmin.ThrowableAbortable.html   |    17 +-
 .../client/HBaseAdmin.TruncateTableFuture.html  |    17 +-
 .../apache/hadoop/hbase/client/HBaseAdmin.html  |    17 +-
 ...dmin.AddColumnFamilyProcedureBiConsumer.html |    85 +-
 .../client/RawAsyncHBaseAdmin.AdminRpcCall.html |    85 +-
 .../client/RawAsyncHBaseAdmin.Converter.html    |    85 +-
 ...dmin.CreateNamespaceProcedureBiConsumer.html |    85 +-
 ...aseAdmin.CreateTableProcedureBiConsumer.html |    85 +-
 ...n.DeleteColumnFamilyProcedureBiConsumer.html |    85 +-
 ...dmin.DeleteNamespaceProcedureBiConsumer.html |    85 +-
 ...aseAdmin.DeleteTableProcedureBiConsumer.html |    85 +-
 ...seAdmin.DisableTableProcedureBiConsumer.html |    85 +-
 ...aseAdmin.EnableTableProcedureBiConsumer.html |    85 +-
 .../RawAsyncHBaseAdmin.MasterRpcCall.html       |    85 +-
 ...min.MergeTableRegionProcedureBiConsumer.html |    85 +-
 ...n.ModifyColumnFamilyProcedureBiConsumer.html |    85 +-
 ...dmin.ModifyNamespaceProcedureBiConsumer.html |    85 +-
 ...aseAdmin.ModifyTableProcedureBiConsumer.html |    85 +-
 ...HBaseAdmin.NamespaceProcedureBiConsumer.html |    85 +-
 .../RawAsyncHBaseAdmin.ProcedureBiConsumer.html |    85 +-
 ...aseAdmin.ReplicationProcedureBiConsumer.html |    85 +-
 ...min.SplitTableRegionProcedureBiConsumer.html |    85 +-
 .../RawAsyncHBaseAdmin.TableOperator.html       |    85 +-
 ...syncHBaseAdmin.TableProcedureBiConsumer.html |    85 +-
 ...eAdmin.TruncateTableProcedureBiConsumer.html |    85 +-
 .../hadoop/hbase/client/RawAsyncHBaseAdmin.html |    85 +-
 .../CellCounter.CellCounterMapper.Counters.html |    81 +-
 .../CellCounter.CellCounterMapper.html          |    81 +-
 .../mapreduce/CellCounter.IntSumReducer.html    |    81 +-
 .../hadoop/hbase/mapreduce/CellCounter.html     |    81 +-
 .../RowCounter.RowCounterMapper.Counters.html   |     6 +-
 .../mapreduce/RowCounter.RowCounterMapper.html  |     6 +-
 .../hadoop/hbase/mapreduce/RowCounter.html      |     6 +-
 .../mapreduce/WALPlayer.WALKeyValueMapper.html  |    73 +-
 .../hbase/mapreduce/WALPlayer.WALMapper.html    |    73 +-
 .../hadoop/hbase/mapreduce/WALPlayer.html       |    73 +-
 .../master/RegionPlan.RegionPlanComparator.html |     2 +-
 .../apache/hadoop/hbase/master/RegionPlan.html  |     2 +-
 ...signmentManager.RegionInTransitionChore.html |     2 +-
 ...ssignmentManager.RegionInTransitionStat.html |     2 +-
 .../master/assignment/AssignmentManager.html    |     2 +-
 .../RegionStateStore.RegionStateVisitor.html    |   441 +-
 .../master/assignment/RegionStateStore.html     |   441 +-
 .../wal/WALProcedureStore.LeaseRecovery.html    |  1749 +-
 .../store/wal/WALProcedureStore.PushType.html   |  1749 +-
 .../wal/WALProcedureStore.SyncMetrics.html      |  1749 +-
 .../procedure2/store/wal/WALProcedureStore.html |  1749 +-
 .../KeyValueHeap.KVScannerComparator.html       |     4 +-
 .../hadoop/hbase/regionserver/KeyValueHeap.html |     4 +-
 .../regionserver/ReversedRegionScannerImpl.html |    71 +-
 .../hadoop/hbase/thrift/ThriftServer.html       |   418 +-
 .../hadoop/hbase/thrift2/ThriftServer.html      |   684 +-
 ...BaseFsck.CheckRegionConsistencyWorkItem.html |  6036 +--
 .../HBaseFsck.ErrorReporter.ERROR_CODE.html     |  6036 +--
 .../hbase/util/HBaseFsck.ErrorReporter.html     |  6036 +--
 .../hbase/util/HBaseFsck.FileLockCallable.html  |  6036 +--
 .../hbase/util/HBaseFsck.HBaseFsckTool.html     |  6036 +--
 .../hadoop/hbase/util/HBaseFsck.HbckInfo.html   |  6036 +--
 .../hadoop/hbase/util/HBaseFsck.HdfsEntry.html  |  6036 +--
 .../hadoop/hbase/util/HBaseFsck.MetaEntry.html  |  6036 +--
 .../hbase/util/HBaseFsck.OnlineEntry.html       |  6036 +--
 .../util/HBaseFsck.PrintingErrorReporter.html   |  6036 +--
 .../HBaseFsck.RegionBoundariesInformation.html  |  6036 +--
 .../util/HBaseFsck.RegionRepairException.html   |  6036 +--
 .../HBaseFsck.TableInfo.HDFSIntegrityFixer.html |  6036 +--
 ...aseFsck.TableInfo.IntegrityFixSuggester.html |  6036 +--
 .../hadoop/hbase/util/HBaseFsck.TableInfo.html  |  6036 +--
 .../hbase/util/HBaseFsck.WorkItemHdfsDir.html   |  6036 +--
 .../util/HBaseFsck.WorkItemHdfsRegionInfo.html  |  6036 +--
 .../util/HBaseFsck.WorkItemOverlapMerge.html    |  6036 +--
 .../hbase/util/HBaseFsck.WorkItemRegion.html    |  6036 +--
 .../org/apache/hadoop/hbase/util/HBaseFsck.html |  6036 +--
 export_control.html                             |     4 +-
 index.html                                      |     4 +-
 integration.html                                |     4 +-
 issue-tracking.html                             |     4 +-
 license.html                                    |     4 +-
 mail-lists.html                                 |     4 +-
 metrics.html                                    |     4 +-
 old_news.html                                   |     4 +-
 plugin-management.html                          |     4 +-
 plugins.html                                    |     4 +-
 poweredbyhbase.html                             |     4 +-
 project-info.html                               |     4 +-
 project-reports.html                            |     4 +-
 project-summary.html                            |     4 +-
 pseudo-distributed.html                         |     4 +-
 replication.html                                |     4 +-
 resources.html                                  |     4 +-
 source-repository.html                          |     4 +-
 sponsors.html                                   |     4 +-
 supportingprojects.html                         |     4 +-
 team-list.html                                  |     4 +-
 testapidocs/index-all.html                      |     2 +
 .../hadoop/hbase/HBaseTestingUtility.html       |   503 +-
 .../hadoop/hbase/HBaseTestingUtility.html       |  8193 ++--
 testdevapidocs/index-all.html                   |    34 +-
 ...lity.PortAllocator.AvailablePortChecker.html |     4 +-
 .../HBaseTestingUtility.PortAllocator.html      |    20 +-
 .../HBaseTestingUtility.SeenRowTracker.html     |    20 +-
 .../hadoop/hbase/HBaseTestingUtility.html       |   561 +-
 .../hadoop/hbase/IntegrationTestingUtility.html |     2 +-
 .../hadoop/hbase/backup/package-tree.html       |     2 +-
 .../apache/hadoop/hbase/client/TestAdmin1.html  |   238 +-
 .../hbase/client/TestAsyncTableAdminApi.html    |   144 +-
 .../hadoop/hbase/mapreduce/TestRowCounter.html  |    49 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    10 +-
 .../hadoop/hbase/procedure/package-tree.html    |     8 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     2 +-
 ...manceEvaluation.NoSyncWalProcedureStore.html |     2 +-
 ...LProcedureStore.TestSequentialProcedure.html |    16 +-
 .../store/wal/TestWALProcedureStore.html        |   132 +-
 .../hbase/regionserver/TestJoinedScanners.html  |   121 +-
 .../hadoop/hbase/regionserver/package-tree.html |     4 +-
 .../apache/hadoop/hbase/test/package-tree.html  |     4 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     4 +-
 ...lity.PortAllocator.AvailablePortChecker.html |  8193 ++--
 .../HBaseTestingUtility.PortAllocator.html      |  8193 ++--
 .../HBaseTestingUtility.SeenRowTracker.html     |  8193 ++--
 .../hadoop/hbase/HBaseTestingUtility.html       |  8193 ++--
 .../hadoop/hbase/IntegrationTestBase.html       |     2 +-
 .../apache/hadoop/hbase/client/TestAdmin1.html  |  2845 +-
 .../hbase/client/TestAsyncTableAdminApi.html    |   747 +-
 .../hadoop/hbase/mapreduce/TestRowCounter.html  |    66 +-
 ...LProcedureStore.TestSequentialProcedure.html |  1757 +-
 .../store/wal/TestWALProcedureStore.html        |  1757 +-
 .../hbase/regionserver/TestJoinedScanners.html  |   431 +-
 227 files changed, 130851 insertions(+), 126723 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 104afdb..f5efc4e 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180411" />
+    <meta name="Date-Revision-yyyymmdd" content="20180412" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -601,7 +601,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-12</li>
             </p>
                 </div>
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    } else

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    } else if (recentlyModified) {<a name="line.2391"></a>
+<span clas

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.html
index 56ec3ac..8f4cacb 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.html
@@ -229,9 +229,9 @@
 <span class="sourceLineNo">221</span>   * Note that we don't document --expected-count, because it's intended for test.<a name="line.221"></a>
 <span class="sourceLineNo">222</span>   */<a name="line.222"></a>
 <span class="sourceLineNo">223</span>  private static void printUsage() {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    System.err.println("Usage: RowCounter [options] &lt;tablename&gt; " +<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        "[--starttime=[start] --endtime=[end] " +<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        "[--range=[startKey],[endKey][;[startKey],[endKey]...]] [&lt;column1&gt; &lt;column2&gt;...]");<a name="line.226"></a>
+<span class="sourceLineNo">224</span>    System.err.println("Usage: hbase rowcounter [options] &lt;tablename&gt; "<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        + "[--starttime=&lt;start&gt; --endtime=&lt;end&gt;] "<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        + "[--range=[startKey],[endKey][;[startKey],[endKey]...]] [&lt;column1&gt; &lt;column2&gt;...]");<a name="line.226"></a>
 <span class="sourceLineNo">227</span>    System.err.println("For performance consider the following options:\n"<a name="line.227"></a>
 <span class="sourceLineNo">228</span>        + "-Dhbase.client.scanner.caching=100\n"<a name="line.228"></a>
 <span class="sourceLineNo">229</span>        + "-Dmapreduce.map.speculative=false");<a name="line.229"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALKeyValueMapper.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALKeyValueMapper.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALKeyValueMapper.html
index a5477ac..9501e97 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALKeyValueMapper.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALKeyValueMapper.html
@@ -357,46 +357,51 @@
 <span class="sourceLineNo">349</span>      System.err.println("ERROR: " + errorMsg);<a name="line.349"></a>
 <span class="sourceLineNo">350</span>    }<a name="line.350"></a>
 <span class="sourceLineNo">351</span>    System.err.println("Usage: " + NAME + " [options] &lt;wal inputdir&gt; &lt;tables&gt; [&lt;tableMappings&gt;]");<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    System.err.println("Read all WAL entries for &lt;tables&gt;.");<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    System.err.println("If no tables (\"\") are specific, all tables are imported.");<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    System.err.println("(Careful, even hbase:meta entries will be imported" + " in that case.)");<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    System.err.println("Otherwise &lt;tables&gt; is a comma separated list of tables.\n");<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    System.err.println("The WAL entries can be mapped to new set of tables via &lt;tableMapping&gt;.");<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    System.err.println("&lt;tableMapping&gt; is a command separated list of targettables.");<a name="line.357"></a>
+<span class="sourceLineNo">352</span>    System.err.println("Replay all WAL files into HBase.");<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    System.err.println("&lt;tables&gt; is a comma separated list of tables.");<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    System.err.println("If no tables (\"\") are specified, all tables are imported.");<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    System.err.println("(Be careful, hbase:meta entries will be imported in this case.)\n");<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    System.err.println("WAL entries can be mapped to new set of tables via &lt;tableMappings&gt;.");<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    System.err.println("&lt;tableMappings&gt; is a comma separated list of target tables.");<a name="line.357"></a>
 <span class="sourceLineNo">358</span>    System.err.println("If specified, each table in &lt;tables&gt; must have a mapping.\n");<a name="line.358"></a>
 <span class="sourceLineNo">359</span>    System.err.println("By default " + NAME + " will load data directly into HBase.");<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    System.err.println("To generate HFiles for a bulk data load instead, pass the option:");<a name="line.360"></a>
+<span class="sourceLineNo">360</span>    System.err.println("To generate HFiles for a bulk data load instead, pass the following option:");<a name="line.360"></a>
 <span class="sourceLineNo">361</span>    System.err.println("  -D" + BULK_OUTPUT_CONF_KEY + "=/path/for/output");<a name="line.361"></a>
 <span class="sourceLineNo">362</span>    System.err.println("  (Only one table can be specified, and no mapping is allowed!)");<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    System.err.println("Other options: (specify time range to WAL edit to consider)");<a name="line.363"></a>
+<span class="sourceLineNo">363</span>    System.err.println("Time range options:");<a name="line.363"></a>
 <span class="sourceLineNo">364</span>    System.err.println("  -D" + WALInputFormat.START_TIME_KEY + "=[date|ms]");<a name="line.364"></a>
 <span class="sourceLineNo">365</span>    System.err.println("  -D" + WALInputFormat.END_TIME_KEY + "=[date|ms]");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    System.err.println("   -D " + JOB_NAME_CONF_KEY<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        + "=jobName - use the specified mapreduce job name for the wal player");<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    System.err.println("For performance also consider the following options:\n"<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        + "  -Dmapreduce.map.speculative=false\n" + "  -Dmapreduce.reduce.speculative=false");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  /**<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Main entry point.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * @param args The command line parameters.<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * @throws Exception When running the job fails.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  public static void main(String[] args) throws Exception {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    int ret = ToolRunner.run(new WALPlayer(HBaseConfiguration.create()), args);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    System.exit(ret);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>  @Override<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  public int run(String[] args) throws Exception {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    if (args.length &lt; 2) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      usage("Wrong number of arguments: " + args.length);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      System.exit(-1);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    Job job = createSubmittableJob(args);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return job.waitForCompletion(true) ? 0 : 1;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>}<a name="line.391"></a>
+<span class="sourceLineNo">366</span>    System.err.println("  (The start and the end date of timerange. The dates can be expressed");<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    System.err.println("  in milliseconds since epoch or in yyyy-MM-dd'T'HH:mm:ss.SS format.");<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    System.err.println("  E.g. 1234567890120 or 2009-02-13T23:32:30.12)");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    System.err.println("Other options:");<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    System.err.println("  -D" + JOB_NAME_CONF_KEY + "=jobName");<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    System.err.println("  Use the specified mapreduce job name for the wal player");<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    System.err.println("For performance also consider the following options:\n"<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        + "  -Dmapreduce.map.speculative=false\n"<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        + "  -Dmapreduce.reduce.speculative=false");<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>  /**<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * Main entry point.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   * @param args The command line parameters.<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   * @throws Exception When running the job fails.<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   */<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  public static void main(String[] args) throws Exception {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    int ret = ToolRunner.run(new WALPlayer(HBaseConfiguration.create()), args);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    System.exit(ret);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  }<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span>  @Override<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  public int run(String[] args) throws Exception {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    if (args.length &lt; 2) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      usage("Wrong number of arguments: " + args.length);<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      System.exit(-1);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    Job job = createSubmittableJob(args);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    return job.waitForCompletion(true) ? 0 : 1;<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALMapper.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALMapper.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALMapper.html
index a5477ac..9501e97 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALMapper.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALMapper.html
@@ -357,46 +357,51 @@
 <span class="sourceLineNo">349</span>      System.err.println("ERROR: " + errorMsg);<a name="line.349"></a>
 <span class="sourceLineNo">350</span>    }<a name="line.350"></a>
 <span class="sourceLineNo">351</span>    System.err.println("Usage: " + NAME + " [options] &lt;wal inputdir&gt; &lt;tables&gt; [&lt;tableMappings&gt;]");<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    System.err.println("Read all WAL entries for &lt;tables&gt;.");<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    System.err.println("If no tables (\"\") are specific, all tables are imported.");<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    System.err.println("(Careful, even hbase:meta entries will be imported" + " in that case.)");<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    System.err.println("Otherwise &lt;tables&gt; is a comma separated list of tables.\n");<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    System.err.println("The WAL entries can be mapped to new set of tables via &lt;tableMapping&gt;.");<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    System.err.println("&lt;tableMapping&gt; is a command separated list of targettables.");<a name="line.357"></a>
+<span class="sourceLineNo">352</span>    System.err.println("Replay all WAL files into HBase.");<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    System.err.println("&lt;tables&gt; is a comma separated list of tables.");<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    System.err.println("If no tables (\"\") are specified, all tables are imported.");<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    System.err.println("(Be careful, hbase:meta entries will be imported in this case.)\n");<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    System.err.println("WAL entries can be mapped to new set of tables via &lt;tableMappings&gt;.");<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    System.err.println("&lt;tableMappings&gt; is a comma separated list of target tables.");<a name="line.357"></a>
 <span class="sourceLineNo">358</span>    System.err.println("If specified, each table in &lt;tables&gt; must have a mapping.\n");<a name="line.358"></a>
 <span class="sourceLineNo">359</span>    System.err.println("By default " + NAME + " will load data directly into HBase.");<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    System.err.println("To generate HFiles for a bulk data load instead, pass the option:");<a name="line.360"></a>
+<span class="sourceLineNo">360</span>    System.err.println("To generate HFiles for a bulk data load instead, pass the following option:");<a name="line.360"></a>
 <span class="sourceLineNo">361</span>    System.err.println("  -D" + BULK_OUTPUT_CONF_KEY + "=/path/for/output");<a name="line.361"></a>
 <span class="sourceLineNo">362</span>    System.err.println("  (Only one table can be specified, and no mapping is allowed!)");<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    System.err.println("Other options: (specify time range to WAL edit to consider)");<a name="line.363"></a>
+<span class="sourceLineNo">363</span>    System.err.println("Time range options:");<a name="line.363"></a>
 <span class="sourceLineNo">364</span>    System.err.println("  -D" + WALInputFormat.START_TIME_KEY + "=[date|ms]");<a name="line.364"></a>
 <span class="sourceLineNo">365</span>    System.err.println("  -D" + WALInputFormat.END_TIME_KEY + "=[date|ms]");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    System.err.println("   -D " + JOB_NAME_CONF_KEY<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        + "=jobName - use the specified mapreduce job name for the wal player");<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    System.err.println("For performance also consider the following options:\n"<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        + "  -Dmapreduce.map.speculative=false\n" + "  -Dmapreduce.reduce.speculative=false");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  /**<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Main entry point.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * @param args The command line parameters.<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * @throws Exception When running the job fails.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  public static void main(String[] args) throws Exception {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    int ret = ToolRunner.run(new WALPlayer(HBaseConfiguration.create()), args);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    System.exit(ret);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>  @Override<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  public int run(String[] args) throws Exception {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    if (args.length &lt; 2) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      usage("Wrong number of arguments: " + args.length);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      System.exit(-1);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    Job job = createSubmittableJob(args);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return job.waitForCompletion(true) ? 0 : 1;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>}<a name="line.391"></a>
+<span class="sourceLineNo">366</span>    System.err.println("  (The start and the end date of timerange. The dates can be expressed");<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    System.err.println("  in milliseconds since epoch or in yyyy-MM-dd'T'HH:mm:ss.SS format.");<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    System.err.println("  E.g. 1234567890120 or 2009-02-13T23:32:30.12)");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    System.err.println("Other options:");<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    System.err.println("  -D" + JOB_NAME_CONF_KEY + "=jobName");<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    System.err.println("  Use the specified mapreduce job name for the wal player");<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    System.err.println("For performance also consider the following options:\n"<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        + "  -Dmapreduce.map.speculative=false\n"<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        + "  -Dmapreduce.reduce.speculative=false");<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>  /**<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * Main entry point.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   * @param args The command line parameters.<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   * @throws Exception When running the job fails.<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   */<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  public static void main(String[] args) throws Exception {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    int ret = ToolRunner.run(new WALPlayer(HBaseConfiguration.create()), args);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    System.exit(ret);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  }<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span>  @Override<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  public int run(String[] args) throws Exception {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    if (args.length &lt; 2) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      usage("Wrong number of arguments: " + args.length);<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      System.exit(-1);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    Job job = createSubmittableJob(args);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    return job.waitForCompletion(true) ? 0 : 1;<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
index a5477ac..9501e97 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
@@ -357,46 +357,51 @@
 <span class="sourceLineNo">349</span>      System.err.println("ERROR: " + errorMsg);<a name="line.349"></a>
 <span class="sourceLineNo">350</span>    }<a name="line.350"></a>
 <span class="sourceLineNo">351</span>    System.err.println("Usage: " + NAME + " [options] &lt;wal inputdir&gt; &lt;tables&gt; [&lt;tableMappings&gt;]");<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    System.err.println("Read all WAL entries for &lt;tables&gt;.");<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    System.err.println("If no tables (\"\") are specific, all tables are imported.");<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    System.err.println("(Careful, even hbase:meta entries will be imported" + " in that case.)");<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    System.err.println("Otherwise &lt;tables&gt; is a comma separated list of tables.\n");<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    System.err.println("The WAL entries can be mapped to new set of tables via &lt;tableMapping&gt;.");<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    System.err.println("&lt;tableMapping&gt; is a command separated list of targettables.");<a name="line.357"></a>
+<span class="sourceLineNo">352</span>    System.err.println("Replay all WAL files into HBase.");<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    System.err.println("&lt;tables&gt; is a comma separated list of tables.");<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    System.err.println("If no tables (\"\") are specified, all tables are imported.");<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    System.err.println("(Be careful, hbase:meta entries will be imported in this case.)\n");<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    System.err.println("WAL entries can be mapped to new set of tables via &lt;tableMappings&gt;.");<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    System.err.println("&lt;tableMappings&gt; is a comma separated list of target tables.");<a name="line.357"></a>
 <span class="sourceLineNo">358</span>    System.err.println("If specified, each table in &lt;tables&gt; must have a mapping.\n");<a name="line.358"></a>
 <span class="sourceLineNo">359</span>    System.err.println("By default " + NAME + " will load data directly into HBase.");<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    System.err.println("To generate HFiles for a bulk data load instead, pass the option:");<a name="line.360"></a>
+<span class="sourceLineNo">360</span>    System.err.println("To generate HFiles for a bulk data load instead, pass the following option:");<a name="line.360"></a>
 <span class="sourceLineNo">361</span>    System.err.println("  -D" + BULK_OUTPUT_CONF_KEY + "=/path/for/output");<a name="line.361"></a>
 <span class="sourceLineNo">362</span>    System.err.println("  (Only one table can be specified, and no mapping is allowed!)");<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    System.err.println("Other options: (specify time range to WAL edit to consider)");<a name="line.363"></a>
+<span class="sourceLineNo">363</span>    System.err.println("Time range options:");<a name="line.363"></a>
 <span class="sourceLineNo">364</span>    System.err.println("  -D" + WALInputFormat.START_TIME_KEY + "=[date|ms]");<a name="line.364"></a>
 <span class="sourceLineNo">365</span>    System.err.println("  -D" + WALInputFormat.END_TIME_KEY + "=[date|ms]");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    System.err.println("   -D " + JOB_NAME_CONF_KEY<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        + "=jobName - use the specified mapreduce job name for the wal player");<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    System.err.println("For performance also consider the following options:\n"<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        + "  -Dmapreduce.map.speculative=false\n" + "  -Dmapreduce.reduce.speculative=false");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  /**<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Main entry point.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * @param args The command line parameters.<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * @throws Exception When running the job fails.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  public static void main(String[] args) throws Exception {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    int ret = ToolRunner.run(new WALPlayer(HBaseConfiguration.create()), args);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    System.exit(ret);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>  @Override<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  public int run(String[] args) throws Exception {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    if (args.length &lt; 2) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      usage("Wrong number of arguments: " + args.length);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      System.exit(-1);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    Job job = createSubmittableJob(args);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return job.waitForCompletion(true) ? 0 : 1;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>}<a name="line.391"></a>
+<span class="sourceLineNo">366</span>    System.err.println("  (The start and the end date of timerange. The dates can be expressed");<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    System.err.println("  in milliseconds since epoch or in yyyy-MM-dd'T'HH:mm:ss.SS format.");<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    System.err.println("  E.g. 1234567890120 or 2009-02-13T23:32:30.12)");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    System.err.println("Other options:");<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    System.err.println("  -D" + JOB_NAME_CONF_KEY + "=jobName");<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    System.err.println("  Use the specified mapreduce job name for the wal player");<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    System.err.println("For performance also consider the following options:\n"<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        + "  -Dmapreduce.map.speculative=false\n"<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        + "  -Dmapreduce.reduce.speculative=false");<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>  /**<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * Main entry point.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   * @param args The command line parameters.<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   * @throws Exception When running the job fails.<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   */<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  public static void main(String[] args) throws Exception {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    int ret = ToolRunner.run(new WALPlayer(HBaseConfiguration.create()), args);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    System.exit(ret);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  }<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span>  @Override<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  public int run(String[] args) throws Exception {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    if (args.length &lt; 2) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      usage("Wrong number of arguments: " + args.length);<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      System.exit(-1);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    Job job = createSubmittableJob(args);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    return job.waitForCompletion(true) ? 0 : 1;<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionPlan.RegionPlanComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionPlan.RegionPlanComparator.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionPlan.RegionPlanComparator.html
index ffeb691..98de5e7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionPlan.RegionPlanComparator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionPlan.RegionPlanComparator.html
@@ -197,7 +197,7 @@
 <span class="sourceLineNo">189</span><a name="line.189"></a>
 <span class="sourceLineNo">190</span>  @Override<a name="line.190"></a>
 <span class="sourceLineNo">191</span>  public String toString() {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    return "hri=" + this.hri.getRegionNameAsString() + ", source=" +<a name="line.192"></a>
+<span class="sourceLineNo">192</span>    return "hri=" + this.hri.getEncodedName() + ", source=" +<a name="line.192"></a>
 <span class="sourceLineNo">193</span>      (this.source == null? "": this.source.toString()) +<a name="line.193"></a>
 <span class="sourceLineNo">194</span>      ", destination=" + (this.dest == null? "": this.dest.toString());<a name="line.194"></a>
 <span class="sourceLineNo">195</span>  }<a name="line.195"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionPlan.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionPlan.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionPlan.html
index ffeb691..98de5e7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionPlan.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionPlan.html
@@ -197,7 +197,7 @@
 <span class="sourceLineNo">189</span><a name="line.189"></a>
 <span class="sourceLineNo">190</span>  @Override<a name="line.190"></a>
 <span class="sourceLineNo">191</span>  public String toString() {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    return "hri=" + this.hri.getRegionNameAsString() + ", source=" +<a name="line.192"></a>
+<span class="sourceLineNo">192</span>    return "hri=" + this.hri.getEncodedName() + ", source=" +<a name="line.192"></a>
 <span class="sourceLineNo">193</span>      (this.source == null? "": this.source.toString()) +<a name="line.193"></a>
 <span class="sourceLineNo">194</span>      ", destination=" + (this.dest == null? "": this.dest.toString());<a name="line.194"></a>
 <span class="sourceLineNo">195</span>  }<a name="line.195"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
index 1ca82d8..078e4b1 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
@@ -872,7 +872,7 @@
 <span class="sourceLineNo">864</span>    final ServerStateNode serverNode = regionStates.getOrCreateServer(serverName);<a name="line.864"></a>
 <span class="sourceLineNo">865</span>    if (!reportTransition(regionNode, serverNode, state, seqId)) {<a name="line.865"></a>
 <span class="sourceLineNo">866</span>      // Don't log if shutting down cluster; during shutdown.<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      LOG.warn("No matchin procedure found for {} to transition to {}", regionNode, state);<a name="line.867"></a>
+<span class="sourceLineNo">867</span>      LOG.warn("No matching procedure found for {} transition to {}", regionNode, state);<a name="line.867"></a>
 <span class="sourceLineNo">868</span>    }<a name="line.868"></a>
 <span class="sourceLineNo">869</span>  }<a name="line.869"></a>
 <span class="sourceLineNo">870</span><a name="line.870"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
index 1ca82d8..078e4b1 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
@@ -872,7 +872,7 @@
 <span class="sourceLineNo">864</span>    final ServerStateNode serverNode = regionStates.getOrCreateServer(serverName);<a name="line.864"></a>
 <span class="sourceLineNo">865</span>    if (!reportTransition(regionNode, serverNode, state, seqId)) {<a name="line.865"></a>
 <span class="sourceLineNo">866</span>      // Don't log if shutting down cluster; during shutdown.<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      LOG.warn("No matchin procedure found for {} to transition to {}", regionNode, state);<a name="line.867"></a>
+<span class="sourceLineNo">867</span>      LOG.warn("No matching procedure found for {} transition to {}", regionNode, state);<a name="line.867"></a>
 <span class="sourceLineNo">868</span>    }<a name="line.868"></a>
 <span class="sourceLineNo">869</span>  }<a name="line.869"></a>
 <span class="sourceLineNo">870</span><a name="line.870"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
index 1ca82d8..078e4b1 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
@@ -872,7 +872,7 @@
 <span class="sourceLineNo">864</span>    final ServerStateNode serverNode = regionStates.getOrCreateServer(serverName);<a name="line.864"></a>
 <span class="sourceLineNo">865</span>    if (!reportTransition(regionNode, serverNode, state, seqId)) {<a name="line.865"></a>
 <span class="sourceLineNo">866</span>      // Don't log if shutting down cluster; during shutdown.<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      LOG.warn("No matchin procedure found for {} to transition to {}", regionNode, state);<a name="line.867"></a>
+<span class="sourceLineNo">867</span>      LOG.warn("No matching procedure found for {} transition to {}", regionNode, state);<a name="line.867"></a>
 <span class="sourceLineNo">868</span>    }<a name="line.868"></a>
 <span class="sourceLineNo">869</span>  }<a name="line.869"></a>
 <span class="sourceLineNo">870</span><a name="line.870"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.RegionStateVisitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.RegionStateVisitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.RegionStateVisitor.html
index cdb80a0..b442170 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.RegionStateVisitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.RegionStateVisitor.html
@@ -126,227 +126,226 @@
 <span class="sourceLineNo">118</span>      final long openSeqNum = -1;<a name="line.118"></a>
 <span class="sourceLineNo">119</span><a name="line.119"></a>
 <span class="sourceLineNo">120</span>      // TODO: move under trace, now is visible for debugging<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      LOG.info(String.format("Load hbase:meta entry region=%s regionState=%s lastHost=%s regionLocation=%s",<a name="line.121"></a>
-<span class="sourceLineNo">122</span>        regionInfo, state, lastHost, regionLocation));<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>      visitor.visitRegionState(regionInfo, state, regionLocation, lastHost, openSeqNum);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public void updateRegionLocation(RegionStates.RegionStateNode regionStateNode)<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      throws IOException {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    if (regionStateNode.getRegionInfo().isMetaRegion()) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      updateMetaLocation(regionStateNode.getRegionInfo(), regionStateNode.getRegionLocation());<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    } else {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      long openSeqNum = regionStateNode.getState() == State.OPEN ?<a name="line.133"></a>
-<span class="sourceLineNo">134</span>          regionStateNode.getOpenSeqNum() : HConstants.NO_SEQNUM;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      updateUserRegionLocation(regionStateNode.getRegionInfo(), regionStateNode.getState(),<a name="line.135"></a>
-<span class="sourceLineNo">136</span>          regionStateNode.getRegionLocation(), regionStateNode.getLastHost(), openSeqNum,<a name="line.136"></a>
-<span class="sourceLineNo">137</span>          regionStateNode.getProcedure().getProcId());<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  private void updateMetaLocation(final RegionInfo regionInfo, final ServerName serverName)<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      throws IOException {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    try {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      MetaTableLocator.setMetaLocation(master.getZooKeeper(), serverName,<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        regionInfo.getReplicaId(), State.OPEN);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    } catch (KeeperException e) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      throw new IOException(e);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private void updateUserRegionLocation(final RegionInfo regionInfo, final State state,<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      final ServerName regionLocation, final ServerName lastHost, final long openSeqNum,<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      final long pid)<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      throws IOException {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    long time = EnvironmentEdgeManager.currentTime();<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    final int replicaId = regionInfo.getReplicaId();<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    final Put put = new Put(MetaTableAccessor.getMetaKeyForRegion(regionInfo), time);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    MetaTableAccessor.addRegionInfo(put, regionInfo);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    final StringBuilder info =<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      new StringBuilder("pid=").append(pid).append(" updating hbase:meta row=")<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        .append(regionInfo.getRegionNameAsString()).append(", regionState=").append(state);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    if (openSeqNum &gt;= 0) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      Preconditions.checkArgument(state == State.OPEN &amp;&amp; regionLocation != null,<a name="line.163"></a>
-<span class="sourceLineNo">164</span>          "Open region should be on a server");<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      MetaTableAccessor.addLocation(put, regionLocation, openSeqNum, replicaId);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      // only update replication barrier for default replica<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      if (regionInfo.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID &amp;&amp;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        hasGlobalReplicationScope(regionInfo.getTable())) {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        MetaTableAccessor.addReplicationBarrier(put, openSeqNum);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      info.append(", openSeqNum=").append(openSeqNum);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      info.append(", regionLocation=").append(regionLocation);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    } else if (regionLocation != null &amp;&amp; !regionLocation.equals(lastHost)) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      // Ideally, if no regionLocation, write null to the hbase:meta but this will confuse clients<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      // currently; they want a server to hit. TODO: Make clients wait if no location.<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      put.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.176"></a>
-<span class="sourceLineNo">177</span>          .setRow(put.getRow())<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          .setFamily(HConstants.CATALOG_FAMILY)<a name="line.178"></a>
-<span class="sourceLineNo">179</span>          .setQualifier(getServerNameColumn(replicaId))<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          .setTimestamp(put.getTimestamp())<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          .setType(Cell.Type.Put)<a name="line.181"></a>
-<span class="sourceLineNo">182</span>          .setValue(Bytes.toBytes(regionLocation.getServerName()))<a name="line.182"></a>
-<span class="sourceLineNo">183</span>          .build());<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      info.append(", regionLocation=").append(regionLocation);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    put.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        .setRow(put.getRow())<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        .setFamily(HConstants.CATALOG_FAMILY)<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        .setQualifier(getStateColumn(replicaId))<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        .setTimestamp(put.getTimestamp())<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        .setType(Cell.Type.Put)<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        .setValue(Bytes.toBytes(state.name()))<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        .build());<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    LOG.info(info.toString());<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    updateRegionLocation(regionInfo, state, put);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  }<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>  private void updateRegionLocation(RegionInfo regionInfo, State state, Put put)<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      throws IOException {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    try (Table table = master.getConnection().getTable(TableName.META_TABLE_NAME)) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      table.put(put);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    } catch (IOException e) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      // TODO: Revist!!!! Means that if a server is loaded, then we will abort our host!<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      // In tests we abort the Master!<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      String msg = String.format("FAILED persisting region=%s state=%s",<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        regionInfo.getShortNameToLog(), state);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      LOG.error(msg, e);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      master.abort(msg, e);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      throw e;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>  private long getOpenSeqNumForParentRegion(RegionInfo region) throws IOException {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    MasterFileSystem mfs = master.getMasterFileSystem();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    long maxSeqId =<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        WALSplitter.getMaxRegionSequenceId(mfs.getFileSystem(), mfs.getRegionDir(region));<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    return maxSeqId &gt; 0 ? maxSeqId + 1 : HConstants.NO_SEQNUM;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  }<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>  // ============================================================================================<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  //  Update Region Splitting State helpers<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  // ============================================================================================<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  public void splitRegion(RegionInfo parent, RegionInfo hriA, RegionInfo hriB,<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      ServerName serverName) throws IOException {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    TableDescriptor htd = getTableDescriptor(parent.getTable());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    long parentOpenSeqNum = HConstants.NO_SEQNUM;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    if (htd.hasGlobalReplicationScope()) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      parentOpenSeqNum = getOpenSeqNumForParentRegion(parent);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    MetaTableAccessor.splitRegion(master.getConnection(), parent, parentOpenSeqNum, hriA, hriB,<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      serverName, getRegionReplication(htd));<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>  // ============================================================================================<a name="line.234"></a>
-<span class="sourceLineNo">235</span>  //  Update Region Merging State helpers<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  // ============================================================================================<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  public void mergeRegions(RegionInfo child, RegionInfo hriA, RegionInfo hriB,<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      ServerName serverName) throws IOException {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    TableDescriptor htd = getTableDescriptor(child.getTable());<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    long regionAOpenSeqNum = -1L;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    long regionBOpenSeqNum = -1L;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    if (htd.hasGlobalReplicationScope()) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      regionAOpenSeqNum = getOpenSeqNumForParentRegion(hriA);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      regionBOpenSeqNum = getOpenSeqNumForParentRegion(hriB);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    MetaTableAccessor.mergeRegions(master.getConnection(), child, hriA, regionAOpenSeqNum, hriB,<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      regionBOpenSeqNum, serverName, getRegionReplication(htd));<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  // ============================================================================================<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  //  Delete Region State helpers<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  // ============================================================================================<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public void deleteRegion(final RegionInfo regionInfo) throws IOException {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    deleteRegions(Collections.singletonList(regionInfo));<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>  public void deleteRegions(final List&lt;RegionInfo&gt; regions) throws IOException {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    MetaTableAccessor.deleteRegions(master.getConnection(), regions);<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>  //  Table Descriptors helpers<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  // ==========================================================================<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  private boolean hasGlobalReplicationScope(TableName tableName) throws IOException {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    return hasGlobalReplicationScope(getTableDescriptor(tableName));<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>  private boolean hasGlobalReplicationScope(TableDescriptor htd) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    return htd != null ? htd.hasGlobalReplicationScope() : false;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private int getRegionReplication(TableDescriptor htd) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    return htd != null ? htd.getRegionReplication() : 1;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  private TableDescriptor getTableDescriptor(TableName tableName) throws IOException {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    return master.getTableDescriptors().get(tableName);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  // ==========================================================================<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  //  Server Name<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  // ==========================================================================<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  /**<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * Returns the {@link ServerName} from catalog table {@link Result}<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * where the region is transitioning. It should be the same as<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * {@link MetaTableAccessor#getServerName(Result,int)} if the server is at OPEN state.<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * @param r Result to pull the transitioning server name from<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * @return A ServerName instance or {@link MetaTableAccessor#getServerName(Result,int)}<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * if necessary fields not found or empty.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   */<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  static ServerName getRegionServer(final Result r, int replicaId) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    final Cell cell = r.getColumnLatestCell(HConstants.CATALOG_FAMILY,<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        getServerNameColumn(replicaId));<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    if (cell == null || cell.getValueLength() == 0) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      RegionLocations locations = MetaTableAccessor.getRegionLocations(r);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      if (locations != null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        HRegionLocation location = locations.getRegionLocation(replicaId);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        if (location != null) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>          return location.getServerName();<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>      return null;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    return ServerName.parseServerName(Bytes.toString(cell.getValueArray(),<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      cell.getValueOffset(), cell.getValueLength()));<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>  private static byte[] getServerNameColumn(int replicaId) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    return replicaId == 0<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        ? HConstants.SERVERNAME_QUALIFIER<a name="line.311"></a>
-<span class="sourceLineNo">312</span>        : Bytes.toBytes(HConstants.SERVERNAME_QUALIFIER_STR + META_REPLICA_ID_DELIMITER<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          + String.format(RegionInfo.REPLICA_ID_FORMAT, replicaId));<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>  // ==========================================================================<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  //  Region State<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  // ==========================================================================<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * Pull the region state from a catalog table {@link Result}.<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * @param r Result to pull the region state from<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * @return the region state, or null if unknown.<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   */<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  @VisibleForTesting<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  public static State getRegionState(final Result r, int replicaId) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    Cell cell = r.getColumnLatestCell(HConstants.CATALOG_FAMILY, getStateColumn(replicaId));<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    if (cell == null || cell.getValueLength() == 0) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      return null;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    return State.valueOf(Bytes.toString(cell.getValueArray(), cell.getValueOffset(),<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        cell.getValueLength()));<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  private static byte[] getStateColumn(int replicaId) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    return replicaId == 0<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        ? HConstants.STATE_QUALIFIER<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        : Bytes.toBytes(HConstants.STATE_QUALIFIER_STR + META_REPLICA_ID_DELIMITER<a name="line.338"></a>
-<span class="sourceLineNo">339</span>          + String.format(RegionInfo.REPLICA_ID_FORMAT, replicaId));<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  }<a name="line.340"></a>
-<span class="sourceLineNo">341</span>}<a name="line.341"></a>
+<span class="sourceLineNo">121</span>      LOG.info("Load hbase:meta entry region={}, regionState={}, lastHost={}, " +<a name="line.121"></a>
+<span class="sourceLineNo">122</span>          "regionLocation={}", regionInfo.getEncodedName(), state, lastHost, regionLocation);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      visitor.visitRegionState(regionInfo, state, regionLocation, lastHost, openSeqNum);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    }<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>  public void updateRegionLocation(RegionStates.RegionStateNode regionStateNode)<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      throws IOException {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    if (regionStateNode.getRegionInfo().isMetaRegion()) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      updateMetaLocation(regionStateNode.getRegionInfo(), regionStateNode.getRegionLocation());<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    } else {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      long openSeqNum = regionStateNode.getState() == State.OPEN ?<a name="line.132"></a>
+<span class="sourceLineNo">133</span>          regionStateNode.getOpenSeqNum() : HConstants.NO_SEQNUM;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      updateUserRegionLocation(regionStateNode.getRegionInfo(), regionStateNode.getState(),<a name="line.134"></a>
+<span class="sourceLineNo">135</span>          regionStateNode.getRegionLocation(), regionStateNode.getLastHost(), openSeqNum,<a name="line.135"></a>
+<span class="sourceLineNo">136</span>          regionStateNode.getProcedure().getProcId());<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private void updateMetaLocation(final RegionInfo regionInfo, final ServerName serverName)<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      throws IOException {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    try {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      MetaTableLocator.setMetaLocation(master.getZooKeeper(), serverName,<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        regionInfo.getReplicaId(), State.OPEN);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    } catch (KeeperException e) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      throw new IOException(e);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  private void updateUserRegionLocation(final RegionInfo regionInfo, final State state,<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      final ServerName regionLocation, final ServerName lastHost, final long openSeqNum,<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      final long pid)<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      throws IOException {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    long time = EnvironmentEdgeManager.currentTime();<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    final int replicaId = regionInfo.getReplicaId();<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    final Put put = new Put(MetaTableAccessor.getMetaKeyForRegion(regionInfo), time);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    MetaTableAccessor.addRegionInfo(put, regionInfo);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    final StringBuilder info =<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      new StringBuilder("pid=").append(pid).append(" updating hbase:meta row=")<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        .append(regionInfo.getEncodedName()).append(", regionState=").append(state);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    if (openSeqNum &gt;= 0) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      Preconditions.checkArgument(state == State.OPEN &amp;&amp; regionLocation != null,<a name="line.162"></a>
+<span class="sourceLineNo">163</span>          "Open region should be on a server");<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      MetaTableAccessor.addLocation(put, regionLocation, openSeqNum, replicaId);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      // only update replication barrier for default replica<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      if (regionInfo.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID &amp;&amp;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        hasGlobalReplicationScope(regionInfo.getTable())) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        MetaTableAccessor.addReplicationBarrier(put, openSeqNum);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      }<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      info.append(", openSeqNum=").append(openSeqNum);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      info.append(", regionLocation=").append(regionLocation);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    } else if (regionLocation != null &amp;&amp; !regionLocation.equals(lastHost)) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      // Ideally, if no regionLocation, write null to the hbase:meta but this will confuse clients<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      // currently; they want a server to hit. TODO: Make clients wait if no location.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      put.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.175"></a>
+<span class="sourceLineNo">176</span>          .setRow(put.getRow())<a name="line.176"></a>
+<span class="sourceLineNo">177</span>          .setFamily(HConstants.CATALOG_FAMILY)<a name="line.177"></a>
+<span class="sourceLineNo">178</span>          .setQualifier(getServerNameColumn(replicaId))<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          .setTimestamp(put.getTimestamp())<a name="line.179"></a>
+<span class="sourceLineNo">180</span>          .setType(Cell.Type.Put)<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          .setValue(Bytes.toBytes(regionLocation.getServerName()))<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          .build());<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      info.append(", regionLocation=").append(regionLocation);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    put.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        .setRow(put.getRow())<a name="line.186"></a>
+<span class="sourceLineNo">187</span>        .setFamily(HConstants.CATALOG_FAMILY)<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .setQualifier(getStateColumn(replicaId))<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        .setTimestamp(put.getTimestamp())<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        .setType(Cell.Type.Put)<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        .setValue(Bytes.toBytes(state.name()))<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        .build());<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    LOG.info(info.toString());<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    updateRegionLocation(regionInfo, state, put);<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>  private void updateRegionLocation(RegionInfo regionInfo, State state, Put put)<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      throws IOException {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    try (Table table = master.getConnection().getTable(TableName.META_TABLE_NAME)) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      table.put(put);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    } catch (IOException e) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      // TODO: Revist!!!! Means that if a server is loaded, then we will abort our host!<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      // In tests we abort the Master!<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      String msg = String.format("FAILED persisting region=%s state=%s",<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        regionInfo.getShortNameToLog(), state);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      LOG.error(msg, e);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      master.abort(msg, e);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      throw e;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>  private long getOpenSeqNumForParentRegion(RegionInfo region) throws IOException {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    MasterFileSystem mfs = master.getMasterFileSystem();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    long maxSeqId =<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        WALSplitter.getMaxRegionSequenceId(mfs.getFileSystem(), mfs.getRegionDir(region));<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    return maxSeqId &gt; 0 ? maxSeqId + 1 : HConstants.NO_SEQNUM;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>  // ============================================================================================<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  //  Update Region Splitting State helpers<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  // ============================================================================================<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  public void splitRegion(RegionInfo parent, RegionInfo hriA, RegionInfo hriB,<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      ServerName serverName) throws IOException {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    TableDescriptor htd = getTableDescriptor(parent.getTable());<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    long parentOpenSeqNum = HConstants.NO_SEQNUM;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    if (htd.hasGlobalReplicationScope()) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      parentOpenSeqNum = getOpenSeqNumForParentRegion(parent);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    MetaTableAccessor.splitRegion(master.getConnection(), parent, parentOpenSeqNum, hriA, hriB,<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      serverName, getRegionReplication(htd));<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  // ============================================================================================<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  //  Update Region Merging State helpers<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  // ============================================================================================<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  public void mergeRegions(RegionInfo child, RegionInfo hriA, RegionInfo hriB,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      ServerName serverName) throws IOException {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    TableDescriptor htd = getTableDescriptor(child.getTable());<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    long regionAOpenSeqNum = -1L;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    long regionBOpenSeqNum = -1L;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    if (htd.hasGlobalReplicationScope()) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      regionAOpenSeqNum = getOpenSeqNumForParentRegion(hriA);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      regionBOpenSeqNum = getOpenSeqNumForParentRegion(hriB);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    MetaTableAccessor.mergeRegions(master.getConnection(), child, hriA, regionAOpenSeqNum, hriB,<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      regionBOpenSeqNum, serverName, getRegionReplication(htd));<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  }<a name="line.247"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span>  // ============================================================================================<a name="line.249"></a>
+<span class="sourceLineNo">250</span>  //  Delete Region State helpers<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  // ============================================================================================<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  public void deleteRegion(final RegionInfo regionInfo) throws IOException {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    deleteRegions(Collections.singletonList(regionInfo));<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>  public void deleteRegions(final List&lt;RegionInfo&gt; regions) throws IOException {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    MetaTableAccessor.deleteRegions(master.getConnection(), regions);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  }<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>  // ==========================================================================<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  //  Table Descriptors helpers<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  // ==========================================================================<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  private boolean hasGlobalReplicationScope(TableName tableName) throws IOException {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    return hasGlobalReplicationScope(getTableDescriptor(tableName));<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  }<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>  private boolean hasGlobalReplicationScope(TableDescriptor htd) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    return htd != null ? htd.hasGlobalReplicationScope() : false;<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>  private int getRegionReplication(TableDescriptor htd) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    return htd != null ? htd.getRegionReplication() : 1;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>  private TableDescriptor getTableDescriptor(TableName tableName) throws IOException {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    return master.getTableDescriptors().get(tableName);<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>  // ==========================================================================<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  //  Server Name<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  // ==========================================================================<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>  /**<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   * Returns the {@link ServerName} from catalog table {@link Result}<a name="line.284"></a>
+<span class="sourceLineNo">285</span>   * where the region is transitioning. It should be the same as<a name="line.285"></a>
+<span class="sourceLineNo">286</span>   * {@link MetaTableAccessor#getServerName(Result,int)} if the server is at OPEN state.<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * @param r Result to pull the transitioning server name from<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * @return A ServerName instance or {@link MetaTableAccessor#getServerName(Result,int)}<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   * if necessary fields not found or empty.<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   */<a name="line.290"></a>
+<span class="sourceLineNo">291</span>  static ServerName getRegionServer(final Result r, int replicaId) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    final Cell cell = r.getColumnLatestCell(HConstants.CATALOG_FAMILY,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        getServerNameColumn(replicaId));<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    if (cell == null || cell.getValueLength() == 0) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      RegionLocations locations = MetaTableAccessor.getRegionLocations(r);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      if (locations != null) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>        HRegionLocation location = locations.getRegionLocation(replicaId);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        if (location != null) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>          return location.getServerName();<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>      return null;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    return ServerName.parseServerName(Bytes.toString(cell.getValueArray(),<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      cell.getValueOffset(), cell.getValueLength()));<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  private static byte[] getServerNameColumn(int replicaId) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    return replicaId == 0<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        ? HConstants.SERVERNAME_QUALIFIER<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        : Bytes.toBytes(HConstants.SERVERNAME_QUALIFIER_STR + META_REPLICA_ID_DELIMITER<a name="line.311"></a>
+<span class="sourceLineNo">312</span>          + String.format(RegionInfo.REPLICA_ID_FORMAT, replicaId));<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>  //  Region State<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>   * Pull the region state from a catalog table {@link Result}.<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * @param r Result to pull the region state from<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * @return the region state, or null if unknown.<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  @VisibleForTesting<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public static State getRegionState(final Result r, int replicaId) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    Cell cell = r.getColumnLatestCell(HConstants.CATALOG_FAMILY, getStateColumn(replicaId));<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    if (cell == null || cell.getValueLength() == 0) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      return null;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    return State.valueOf(Bytes.toString(cell.getValueArray(), cell.getValueOffset(),<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        cell.getValueLength()));<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  }<a name="line.332"></a>
+<span class="sourceLineNo">333</span><a name="line.333"></a>
+<span class="sourceLineNo">334</span>  private static byte[] getStateColumn(int replicaId) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    return replicaId == 0<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        ? HConstants.STATE_QUALIFIER<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        : Bytes.toBytes(HConstants.STATE_QUALIFIER_STR + META_REPLICA_ID_DELIMITER<a name="line.337"></a>
+<span class="sourceLineNo">338</span>          + String.format(RegionInfo.REPLICA_ID_FORMAT, replicaId));<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
+<span class="sourceLineNo">340</span>}<a name="line.340"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>
+<span class="sourc

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    } else if (recentlyModified) {<a name="line.23

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/apidocs/org/apache/hadoop/hbase/mapreduce/CellCounter.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/mapreduce/CellCounter.html b/apidocs/org/apache/hadoop/hbase/mapreduce/CellCounter.html
index 2fd2324..354e2d3 100644
--- a/apidocs/org/apache/hadoop/hbase/mapreduce/CellCounter.html
+++ b/apidocs/org/apache/hadoop/hbase/mapreduce/CellCounter.html
@@ -286,7 +286,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.html#line.327">main</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;args)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.html#line.332">main</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;args)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Main entry point.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/apidocs/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/mapreduce/WALPlayer.html b/apidocs/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
index 9a603e5..0b077d2 100644
--- a/apidocs/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
+++ b/apidocs/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
@@ -416,7 +416,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html#line.377">main</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;args)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html#line.382">main</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;args)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Main entry point.</div>
 <dl>
@@ -433,7 +433,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html#line.383">run</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;args)
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html#line.388">run</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;args)
         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/apidocs/src-html/org/apache/hadoop/hbase/client/Admin.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/Admin.html b/apidocs/src-html/org/apache/hadoop/hbase/client/Admin.html
index 4bdaf23..863532f 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/Admin.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/Admin.html
@@ -2735,7 +2735,18 @@
 <span class="sourceLineNo">2727</span>   * @return List of servers that are not cleared<a name="line.2727"></a>
 <span class="sourceLineNo">2728</span>   */<a name="line.2728"></a>
 <span class="sourceLineNo">2729</span>  List&lt;ServerName&gt; clearDeadServers(final List&lt;ServerName&gt; servers) throws IOException;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>}<a name="line.2730"></a>
+<span class="sourceLineNo">2730</span><a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>  /**<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>   * Create a new table by cloning the existent table schema.<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>   *<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>   * @param tableName name of the table to be cloned<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>   * @param newTableName name of the new table where the table will be created<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>   * @param preserveSplits True if the splits should be preserved<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>   * @throws IOException if a remote or network exception occurs<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>   */<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>  void cloneTableSchema(final TableName tableName, final TableName newTableName,<a name="line.2739"></a>
+<span class="sourceLineNo">2740</span>      final boolean preserveSplits) throws IOException;<a name="line.2740"></a>
+<span class="sourceLineNo">2741</span>}<a name="line.2741"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdmin.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdmin.html b/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdmin.html
index 5c18b82..27eb0b0 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdmin.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdmin.html
@@ -1238,7 +1238,17 @@
 <span class="sourceLineNo">1230</span>   * @return CacheEvictionStats related to the eviction wrapped by a {@link CompletableFuture}.<a name="line.1230"></a>
 <span class="sourceLineNo">1231</span>   */<a name="line.1231"></a>
 <span class="sourceLineNo">1232</span>  CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(final TableName tableName);<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>}<a name="line.1233"></a>
+<span class="sourceLineNo">1233</span><a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>  /**<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>   * Create a new table by cloning the existent table schema.<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>   *<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>   * @param tableName name of the table to be cloned<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>   * @param newTableName name of the new table where the table will be created<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>   * @param preserveSplits True if the splits should be preserved<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>   */<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>  CompletableFuture&lt;Void&gt;  cloneTableSchema(final TableName tableName,<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      final TableName newTableName, final boolean preserveSplits);<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>}<a name="line.1243"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.html b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.html
index 67249a1..6f1fc1b 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.html
@@ -300,44 +300,49 @@
 <span class="sourceLineNo">292</span>  @Override<a name="line.292"></a>
 <span class="sourceLineNo">293</span>  public int run(String[] args) throws Exception {<a name="line.293"></a>
 <span class="sourceLineNo">294</span>    if (args.length &lt; 2) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      System.err.println("ERROR: Wrong number of parameters: " + args.length);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      System.err.println("Usage: CellCounter ");<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      System.err.println("       &lt;tablename&gt; &lt;outputDir&gt; &lt;reportSeparator&gt; [^[regex pattern] or " +<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        "[Prefix] for row filter]] --starttime=[starttime] --endtime=[endtime]");<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      System.err.println("  Note: -D properties will be applied to the conf used. ");<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      System.err.println("  Additionally, all of the SCAN properties from TableInputFormat");<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      System.err.println("  can be specified to get fine grained control on what is counted..");<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      System.err.println("   -D " + TableInputFormat.SCAN_ROW_START + "=&lt;rowkey&gt;");<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      System.err.println("   -D " + TableInputFormat.SCAN_ROW_STOP + "=&lt;rowkey&gt;");<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      System.err.println("   -D " + TableInputFormat.SCAN_COLUMNS + "=\"&lt;col1&gt; &lt;col2&gt;...\"");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      System.err.println("   -D " + TableInputFormat.SCAN_COLUMN_FAMILY + "=&lt;family1&gt;,&lt;family2&gt;, ...");<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      System.err.println("   -D " + TableInputFormat.SCAN_TIMESTAMP + "=&lt;timestamp&gt;");<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      System.err.println("   -D " + TableInputFormat.SCAN_TIMERANGE_START + "=&lt;timestamp&gt;");<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      System.err.println("   -D " + TableInputFormat.SCAN_TIMERANGE_END + "=&lt;timestamp&gt;");<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      System.err.println("   -D " + TableInputFormat.SCAN_MAXVERSIONS + "=&lt;count&gt;");<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      System.err.println("   -D " + TableInputFormat.SCAN_CACHEDROWS + "=&lt;count&gt;");<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      System.err.println("   -D " + TableInputFormat.SCAN_BATCHSIZE + "=&lt;count&gt;");<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      System.err.println(" &lt;reportSeparator&gt; parameter can be used to override the default report separator " +<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          "string : used to separate the rowId/column family name and qualifier name.");<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      System.err.println(" [^[regex pattern] or [Prefix] parameter can be used to limit the cell counter count " +<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          "operation to a limited subset of rows from the table based on regex or prefix pattern.");<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      return -1;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    Job job = createSubmittableJob(getConf(), args);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return (job.waitForCompletion(true) ? 0 : 1);<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>   * Main entry point.<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * @param args The command line parameters.<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * @throws Exception When running the job fails.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   */<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public static void main(String[] args) throws Exception {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    int errCode = ToolRunner.run(HBaseConfiguration.create(), new CellCounter(), args);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    System.exit(errCode);<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>}<a name="line.332"></a>
+<span class="sourceLineNo">295</span>      printUsage(args.length);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      return -1;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    Job job = createSubmittableJob(getConf(), args);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    return (job.waitForCompletion(true) ? 0 : 1);<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>  private void printUsage(int parameterCount) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    System.err.println("ERROR: Wrong number of parameters: " + parameterCount);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    System.err.println("Usage: hbase cellcounter &lt;tablename&gt; &lt;outputDir&gt; [reportSeparator] "<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        + "[^[regex pattern] or [Prefix]] [--starttime=&lt;starttime&gt; --endtime=&lt;endtime&gt;]");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    System.err.println("  Note: -D properties will be applied to the conf used.");<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    System.err.println("  Additionally, all of the SCAN properties from TableInputFormat can be "<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        + "specified to get fine grained control on what is counted.");<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    System.err.println("   -D" + TableInputFormat.SCAN_ROW_START + "=&lt;rowkey&gt;");<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    System.err.println("   -D" + TableInputFormat.SCAN_ROW_STOP + "=&lt;rowkey&gt;");<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    System.err.println("   -D" + TableInputFormat.SCAN_COLUMNS + "=\"&lt;col1&gt; &lt;col2&gt;...\"");<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    System.err.println("   -D" + TableInputFormat.SCAN_COLUMN_FAMILY<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        + "=&lt;family1&gt;,&lt;family2&gt;, ...");<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    System.err.println("   -D" + TableInputFormat.SCAN_TIMESTAMP + "=&lt;timestamp&gt;");<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    System.err.println("   -D" + TableInputFormat.SCAN_TIMERANGE_START + "=&lt;timestamp&gt;");<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    System.err.println("   -D" + TableInputFormat.SCAN_TIMERANGE_END + "=&lt;timestamp&gt;");<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    System.err.println("   -D" + TableInputFormat.SCAN_MAXVERSIONS + "=&lt;count&gt;");<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    System.err.println("   -D" + TableInputFormat.SCAN_CACHEDROWS + "=&lt;count&gt;");<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    System.err.println("   -D" + TableInputFormat.SCAN_BATCHSIZE + "=&lt;count&gt;");<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    System.err.println(" &lt;reportSeparator&gt; parameter can be used to override the default report "<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        + "separator string : used to separate the rowId/column family name and qualifier name.");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    System.err.println(" [^[regex pattern] or [Prefix] parameter can be used to limit the cell "<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        + "counter count operation to a limited subset of rows from the table based on regex or "<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        + "prefix pattern.");<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>  /**<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   * Main entry point.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * @param args The command line parameters.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * @throws Exception When running the job fails.<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public static void main(String[] args) throws Exception {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    int errCode = ToolRunner.run(HBaseConfiguration.create(), new CellCounter(), args);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    System.exit(errCode);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>}<a name="line.337"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.html b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.html
index 56ec3ac..8f4cacb 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.html
@@ -229,9 +229,9 @@
 <span class="sourceLineNo">221</span>   * Note that we don't document --expected-count, because it's intended for test.<a name="line.221"></a>
 <span class="sourceLineNo">222</span>   */<a name="line.222"></a>
 <span class="sourceLineNo">223</span>  private static void printUsage() {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    System.err.println("Usage: RowCounter [options] &lt;tablename&gt; " +<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        "[--starttime=[start] --endtime=[end] " +<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        "[--range=[startKey],[endKey][;[startKey],[endKey]...]] [&lt;column1&gt; &lt;column2&gt;...]");<a name="line.226"></a>
+<span class="sourceLineNo">224</span>    System.err.println("Usage: hbase rowcounter [options] &lt;tablename&gt; "<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        + "[--starttime=&lt;start&gt; --endtime=&lt;end&gt;] "<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        + "[--range=[startKey],[endKey][;[startKey],[endKey]...]] [&lt;column1&gt; &lt;column2&gt;...]");<a name="line.226"></a>
 <span class="sourceLineNo">227</span>    System.err.println("For performance consider the following options:\n"<a name="line.227"></a>
 <span class="sourceLineNo">228</span>        + "-Dhbase.client.scanner.caching=100\n"<a name="line.228"></a>
 <span class="sourceLineNo">229</span>        + "-Dmapreduce.map.speculative=false");<a name="line.229"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
index a5477ac..9501e97 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
@@ -357,46 +357,51 @@
 <span class="sourceLineNo">349</span>      System.err.println("ERROR: " + errorMsg);<a name="line.349"></a>
 <span class="sourceLineNo">350</span>    }<a name="line.350"></a>
 <span class="sourceLineNo">351</span>    System.err.println("Usage: " + NAME + " [options] &lt;wal inputdir&gt; &lt;tables&gt; [&lt;tableMappings&gt;]");<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    System.err.println("Read all WAL entries for &lt;tables&gt;.");<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    System.err.println("If no tables (\"\") are specific, all tables are imported.");<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    System.err.println("(Careful, even hbase:meta entries will be imported" + " in that case.)");<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    System.err.println("Otherwise &lt;tables&gt; is a comma separated list of tables.\n");<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    System.err.println("The WAL entries can be mapped to new set of tables via &lt;tableMapping&gt;.");<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    System.err.println("&lt;tableMapping&gt; is a command separated list of targettables.");<a name="line.357"></a>
+<span class="sourceLineNo">352</span>    System.err.println("Replay all WAL files into HBase.");<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    System.err.println("&lt;tables&gt; is a comma separated list of tables.");<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    System.err.println("If no tables (\"\") are specified, all tables are imported.");<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    System.err.println("(Be careful, hbase:meta entries will be imported in this case.)\n");<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    System.err.println("WAL entries can be mapped to new set of tables via &lt;tableMappings&gt;.");<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    System.err.println("&lt;tableMappings&gt; is a comma separated list of target tables.");<a name="line.357"></a>
 <span class="sourceLineNo">358</span>    System.err.println("If specified, each table in &lt;tables&gt; must have a mapping.\n");<a name="line.358"></a>
 <span class="sourceLineNo">359</span>    System.err.println("By default " + NAME + " will load data directly into HBase.");<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    System.err.println("To generate HFiles for a bulk data load instead, pass the option:");<a name="line.360"></a>
+<span class="sourceLineNo">360</span>    System.err.println("To generate HFiles for a bulk data load instead, pass the following option:");<a name="line.360"></a>
 <span class="sourceLineNo">361</span>    System.err.println("  -D" + BULK_OUTPUT_CONF_KEY + "=/path/for/output");<a name="line.361"></a>
 <span class="sourceLineNo">362</span>    System.err.println("  (Only one table can be specified, and no mapping is allowed!)");<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    System.err.println("Other options: (specify time range to WAL edit to consider)");<a name="line.363"></a>
+<span class="sourceLineNo">363</span>    System.err.println("Time range options:");<a name="line.363"></a>
 <span class="sourceLineNo">364</span>    System.err.println("  -D" + WALInputFormat.START_TIME_KEY + "=[date|ms]");<a name="line.364"></a>
 <span class="sourceLineNo">365</span>    System.err.println("  -D" + WALInputFormat.END_TIME_KEY + "=[date|ms]");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    System.err.println("   -D " + JOB_NAME_CONF_KEY<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        + "=jobName - use the specified mapreduce job name for the wal player");<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    System.err.println("For performance also consider the following options:\n"<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        + "  -Dmapreduce.map.speculative=false\n" + "  -Dmapreduce.reduce.speculative=false");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  /**<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Main entry point.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * @param args The command line parameters.<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * @throws Exception When running the job fails.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  public static void main(String[] args) throws Exception {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    int ret = ToolRunner.run(new WALPlayer(HBaseConfiguration.create()), args);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    System.exit(ret);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>  @Override<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  public int run(String[] args) throws Exception {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    if (args.length &lt; 2) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      usage("Wrong number of arguments: " + args.length);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      System.exit(-1);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    Job job = createSubmittableJob(args);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return job.waitForCompletion(true) ? 0 : 1;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>}<a name="line.391"></a>
+<span class="sourceLineNo">366</span>    System.err.println("  (The start and the end date of timerange. The dates can be expressed");<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    System.err.println("  in milliseconds since epoch or in yyyy-MM-dd'T'HH:mm:ss.SS format.");<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    System.err.println("  E.g. 1234567890120 or 2009-02-13T23:32:30.12)");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    System.err.println("Other options:");<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    System.err.println("  -D" + JOB_NAME_CONF_KEY + "=jobName");<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    System.err.println("  Use the specified mapreduce job name for the wal player");<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    System.err.println("For performance also consider the following options:\n"<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        + "  -Dmapreduce.map.speculative=false\n"<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        + "  -Dmapreduce.reduce.speculative=false");<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>  /**<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * Main entry point.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   * @param args The command line parameters.<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   * @throws Exception When running the job fails.<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   */<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  public static void main(String[] args) throws Exception {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    int ret = ToolRunner.run(new WALPlayer(HBaseConfiguration.create()), args);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    System.exit(ret);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  }<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span>  @Override<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  public int run(String[] args) throws Exception {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    if (args.length &lt; 2) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      usage("Wrong number of arguments: " + args.length);<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      System.exit(-1);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    Job job = createSubmittableJob(args);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    return job.waitForCompletion(true) ? 0 : 1;<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 8269c24..f963820 100644
--- a/book.html
+++ b/book.html
@@ -1340,7 +1340,7 @@ You can still test the behavior of the primary Master or a RegionServer by killi
 <div class="content">
 This chapter expands upon the <a href="#getting_started">Getting Started</a> chapter to further explain configuration of Apache HBase.
 Please read this chapter carefully, especially the <a href="#basic.prerequisites">Basic Prerequisites</a>
-to ensure that your HBase testing and deployment goes smoothly, and prevent data loss.
+to ensure that your HBase testing and deployment goes smoothly.
 Familiarize yourself with <a href="#hbase_supported_tested_definitions">Support and Testing Expectations</a> as well.
 </div>
 </div>
@@ -1564,10 +1564,10 @@ You must set <code>JAVA_HOME</code> on each node of your cluster. <em>hbase-env.
 <p>For example, assuming that a schema had 3 ColumnFamilies per region with an average of 3 StoreFiles per ColumnFamily, and there are 100 regions per RegionServer, the JVM will open <code>3 * 3 * 100 = 900</code> file descriptors, not counting open JAR files, configuration files, and others. Opening a file does not take many resources, and the risk of allowing a user to open too many files is minimal.</p>
 </div>
 <div class="paragraph">
-<p>Another related setting is the number of processes a user is allowed to run at once. In Linux and Unix, the number of processes is set using the <code>ulimit -u</code> command. This should not be confused with the <code>nproc</code> command, which controls the number of CPUs available to a given user. Under load, a <code>ulimit -u</code> that is too low can cause OutOfMemoryError exceptions. See Jack Levin&#8217;s major HDFS issues thread on the hbase-users mailing list, from 2011.</p>
+<p>Another related setting is the number of processes a user is allowed to run at once. In Linux and Unix, the number of processes is set using the <code>ulimit -u</code> command. This should not be confused with the <code>nproc</code> command, which controls the number of CPUs available to a given user. Under load, a <code>ulimit -u</code> that is too low can cause OutOfMemoryError exceptions.</p>
 </div>
 <div class="paragraph">
-<p>Configuring the maximum number of file descriptors and processes for the user who is running the HBase process is an operating system configuration, rather than an HBase configuration. It is also important to be sure that the settings are changed for the user that actually runs HBase. To see which user started HBase, and that user&#8217;s ulimit configuration, look at the first line of the HBase log for that instance. A useful read setting config on your hadoop cluster is Aaron Kimball&#8217;s Configuration Parameters: What can you just ignore?</p>
+<p>Configuring the maximum number of file descriptors and processes for the user who is running the HBase process is an operating system configuration, rather than an HBase configuration. It is also important to be sure that the settings are changed for the user that actually runs HBase. To see which user started HBase, and that user&#8217;s ulimit configuration, look at the first line of the HBase log for that instance.</p>
 </div>
 <div class="exampleblock">
 <div class="title">Example 5. <code>ulimit</code> Settings on Ubuntu</div>
@@ -1622,7 +1622,8 @@ See <a href="https://wiki.apache.org/hadoop/Distributions%20and%20Commercial%20S
 <td class="content">
 <div class="title">Hadoop 2.x is recommended.</div>
 <div class="paragraph">
-<p>Hadoop 2.x is faster and includes features, such as short-circuit reads, which will help improve your HBase random read profile.
+<p>Hadoop 2.x is faster and includes features, such as short-circuit reads (see <a href="#perf.hdfs.configs.localread">Leveraging local data</a>),
+which will help improve your HBase random read profile.
 Hadoop 2.x also includes important bug fixes that will improve your overall HBase experience. HBase does not support running with
 earlier versions of Hadoop. See the table below for requirements specific to different HBase versions.</p>
 </div>
@@ -1709,12 +1710,18 @@ earlier versions of Hadoop. See the table below for requirements specific to dif
 <td class="tableblock halign-left valign-top"><p class="tableblock">X</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Hadoop-2.8.2+</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Hadoop-2.8.2</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">NT</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">NT</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">NT</p></td>
 </tr>
 <tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Hadoop-2.8.3+</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">NT</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">NT</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">S</p></td>
+</tr>
+<tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Hadoop-2.9.0</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">X</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">X</p></td>
@@ -1773,7 +1780,7 @@ data loss. This patch is present in Apache Hadoop releases 2.6.1+.</p>
 <td class="content">
 <div class="title">Hadoop 2.y.0 Releases</div>
 <div class="paragraph">
-<p>Starting around the time of Hadoop version 2.7.0, the Hadoop PMC got into the habit of calling out new minor releases on their major version 2 release line as not stable / production ready. As such, HBase expressly advises downstream users to avoid running on top of these releases. Note that additionally the 2.8.1 was release was given the same caveat by the Hadoop PMC. For reference, see the release announcements for <a href="https://s.apache.org/hadoop-2.7.0-announcement">Apache Hadoop 2.7.0</a>, <a href="https://s.apache.org/hadoop-2.8.0-announcement">Apache Hadoop 2.8.0</a>, <a href="https://s.apache.org/hadoop-2.8.1-announcement">Apache Hadoop 2.8.1</a>, and <a href="https://s.apache.org/hadoop-2.9.0-announcement">Apache Hadoop 2.9.0</a>.</p>
+<p>Starting around the time of Hadoop version 2.7.0, the Hadoop PMC got into the habit of calling out new minor releases on their major version 2 release line as not stable / production ready. As such, HBase expressly advises downstream users to avoid running on top of these releases. Note that additionally the 2.8.1 release was given the same caveat by the Hadoop PMC. For reference, see the release announcements for <a href="https://s.apache.org/hadoop-2.7.0-announcement">Apache Hadoop 2.7.0</a>, <a href="https://s.apache.org/hadoop-2.8.0-announcement">Apache Hadoop 2.8.0</a>, <a href="https://s.apache.org/hadoop-2.8.1-announcement">Apache Hadoop 2.8.1</a>, and <a href="https://s.apache.org/hadoop-2.9.0-announcement">Apache Hadoop 2.9.0</a>.</p>
 </div>
 </td>
 </tr>
@@ -1788,12 +1795,14 @@ data loss. This patch is present in Apache Hadoop releases 2.6.1+.</p>
 <td class="content">
 <div class="title">Replace the Hadoop Bundled With HBase!</div>
 <div class="paragraph">
-<p>Because HBase depends on Hadoop, it bundles an instance of the Hadoop jar under its <em>lib</em> directory.
-The bundled jar is ONLY for use in standalone mode.
+<p>Because HBase depends on Hadoop, it bundles Hadoop jars under its <em>lib</em> directory.
+The bundled jars are ONLY for use in standalone mode.
 In distributed mode, it is <em>critical</em> that the version of Hadoop that is out on your cluster match what is under HBase.
-Replace the hadoop jar found in the HBase lib directory with the hadoop jar you are running on your cluster to avoid version mismatch issues.
-Make sure you replace the jar in HBase across your whole cluster.
-Hadoop version mismatch issues have various manifestations but often all look like its hung.</p>
+Replace the hadoop jars found in the HBase lib directory with the equivalent hadoop jars from the version you are running
+on your cluster to avoid version mismatch issues.
+Make sure you replace the jars under HBase across your whole cluster.
+Hadoop version mismatch issues have various manifestations. Check for mismatch if
+HBase appears hung.</p>
 </div>
 </td>
 </tr>
@@ -6779,6 +6788,16 @@ Quitting...</code></pre>
 <div class="title">"Distributed Log Replay" feature broken and removed</div>
 <p>The Distributed Log Replay feature was broken and has been removed from HBase 2.y+. As a consequence all related configs, metrics, RPC fields, and logging have also been removed. Note that this feature was found to be unreliable in the run up to HBase 1.0, defaulted to being unused, and was effectively removed in HBase 1.2.0 when we started ignoring the config that turns it on (<a href="https://issues.apache.org/jira/browse/HBASE-14465">HBASE-14465</a>). If you are currently using the feature, be sure to perform a clean shutdown, ensure all DLR work is complete, and disable the feature prior to upgrading.</p>
 </div>
+<div id="upgrade2.0.prefix-tree.removed" class="paragraph">
+<div class="title"><em>prefix-tree</em> encoding removed</div>
+<p>The prefix-tree encoding was removed from HBase 2.0.0 (<a href="https://issues.apache.org/jira/browse/HBASE-19179">HBASE-19179</a>).
+It was (late!) deprecated in hbase-1.2.7, hbase-1.4.0, and hbase-1.3.2.</p>
+</div>
+<div class="paragraph">
+<p>This feature was removed because it as not being actively maintained. If interested in reviving this
+sweet facility which improved random read latencies at the expensive of slowed writes,
+write the HBase developers list at <em>dev at hbase dot apache dot org</em>.</p>
+</div>
 <div id="upgrade2.0.metrics" class="paragraph">
 <div class="title">Changed metrics</div>
 <p>The following metrics have changed names:</p>
@@ -6826,6 +6845,19 @@ Quitting...</code></pre>
 </li>
 </ul>
 </div>
+<div id="upgrade2.0.logging" class="paragraph">
+<div class="title">Changed logging</div>
+<p>HBase-2.0.0 now uses <a href="https://www.slf4j.org/">slf4j</a> as its logging frontend.
+Prevously, we used <a href="http://logging.apache.org/log4j/1.2/">log4j (1.2)</a>.
+For most the transition should be seamless; slf4j does a good job interpreting
+<em>log4j.properties</em> logging configuration files such that you should not notice
+any difference in your log system emissions.</p>
+</div>
+<div class="paragraph">
+<p>That said, your <em>log4j.properties</em> may need freshening. See <a href="https://issues.apache.org/jira/browse/HBASE-20351">HBASE-20351</a>
+for example, where a stale log configuration file manifest as netty configuration
+being dumped at DEBUG level as preamble on every shell command invocation.</p>
+</div>
 <div id="upgrade2.0.zkconfig" class="paragraph">
 <div class="title">ZooKeeper configs no longer read from zoo.cfg</div>
 <p>HBase no longer optionally reads the 'zoo.cfg' file for ZooKeeper related configuration settings. If you previously relied on the 'hbase.config.read.zookeeper.config' config for this functionality, you should migrate any needed settings to the hbase-site.xml file while adding the prefix 'hbase.zookeeper.property.' to each property name.</p>
@@ -24259,10 +24291,19 @@ Analyze.</p>
 </div>
 <div class="sect2">
 <h3 id="trouble.log.gc"><a class="anchor" href="#trouble.log.gc"></a>125.3. JVM Garbage Collection Logs</h3>
-<div class="listingblock">
-<div class="content">
-<pre>All example Garbage Collection logs in this section are based on Java 8 output. The introduction of Unified Logging in Java 9 and newer will result in very different looking logs.</pre>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>All example Garbage Collection logs in this section are based on Java 8 output. The introduction of Unified Logging in Java 9 and newer will result in very different looking logs.</p>
 </div>
+</td>
+</tr>
+</table>
 </div>
 <div class="paragraph">
 <p>HBase is memory intensive, and using the default GC you can see long pauses in all threads including the <em>Juliet Pause</em> aka "GC of Death". To help debug this or confirm this is happening GC logging can be turned on in the Java virtual machine.</p>
@@ -26187,8 +26228,12 @@ Some commands take arguments. Pass no args or -h for usage.
   pe              Run PerformanceEvaluation
   ltt             Run LoadTestTool
   canary          Run the Canary tool
-  regionsplitter  Run the RegionSplitter tool
   version         Print the version
+  backup          Backup tables for recovery
+  restore         Restore tables from existing backup image
+  regionsplitter  Run RegionSplitter tool
+  rowcounter      Run RowCounter tool
+  cellcounter     Run CellCounter tool
   CLASSNAME       Run the class named CLASSNAME</pre>
 </div>
 </div>
@@ -27030,7 +27075,7 @@ Assuming you&#8217;re running HDFS with permissions enabled, those permissions w
 </div>
 </div>
 <div class="sect2">
-<h3 id="_walplayer"><a class="anchor" href="#_walplayer"></a>146.14. WALPlayer</h3>
+<h3 id="walplayer"><a class="anchor" href="#walplayer"></a>146.14. WALPlayer</h3>
 <div class="paragraph">
 <p>WALPlayer is a utility to replay WAL files into HBase.</p>
 </div>
@@ -27061,30 +27106,70 @@ The output can optionally be mapped to another set of tables.</p>
 <p>WALPlayer, by default, runs as a mapreduce job.
 To NOT run WALPlayer as a mapreduce job on your cluster, force it to run all in the local process by adding the flags <code>-Dmapreduce.jobtracker.address=local</code> on the command line.</p>
 </div>
+<div class="sect3">
+<h4 id="walplayer.options"><a class="anchor" href="#walplayer.options"></a>146.14.1. WALPlayer Options</h4>
+<div class="paragraph">
+<p>Running <code>WALPlayer</code> with no arguments prints brief usage information:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>Usage: WALPlayer [options] &lt;wal inputdir&gt; &lt;tables&gt; [&lt;tableMappings&gt;]
+Replay all WAL files into HBase.
+&lt;tables&gt; is a comma separated list of tables.
+If no tables ("") are specified, all tables are imported.
+(Be careful, hbase:meta entries will be imported in this case.)
+
+WAL entries can be mapped to new set of tables via &lt;tableMappings&gt;.
+&lt;tableMappings&gt; is a comma separated list of target tables.
+If specified, each table in &lt;tables&gt; must have a mapping.
+
+By default WALPlayer will load data directly into HBase.
+To generate HFiles for a bulk data load instead, pass the following option:
+  -Dwal.bulk.output=/path/for/output
+  (Only one table can be specified, and no mapping is allowed!)
+Time range options:
+  -Dwal.start.time=[date|ms]
+  -Dwal.end.time=[date|ms]
+  (The start and the end date of timerange. The dates can be expressed
+  in milliseconds since epoch or in yyyy-MM-dd'T'HH:mm:ss.SS format.
+  E.g. 1234567890120 or 2009-02-13T23:32:30.12)
+Other options:
+  -Dmapreduce.job.name=jobName
+  Use the specified mapreduce job name for the wal player
+For performance also consider the following options:
+  -Dmapreduce.map.speculative=false
+  -Dmapreduce.reduce.speculative=false</pre>
+</div>
+</div>
+</div>
 </div>
 <div class="sect2">
-<h3 id="rowcounter"><a class="anchor" href="#rowcounter"></a>146.15. RowCounter and CellCounter</h3>
+<h3 id="rowcounter"><a class="anchor" href="#rowcounter"></a>146.15. RowCounter</h3>
 <div class="paragraph">
-<p><a href="https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/RowCounter.html">RowCounter</a>        is a mapreduce job to count all the rows of a table.
+<p><a href="https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/RowCounter.html">RowCounter</a> is a mapreduce job to count all the rows of a table.
 This is a good utility to use as a sanity check to ensure that HBase can read all the blocks of a table if there are any concerns of metadata inconsistency.
-It will run the mapreduce all in a single process but it will run faster if you have a MapReduce cluster in place for it to exploit. It is also possible to limit
-the time range of data to be scanned by using the <code>--starttime=[starttime]</code> and <code>--endtime=[endtime]</code> flags.</p>
+It will run the mapreduce all in a single process but it will run faster if you have a MapReduce cluster in place for it to exploit.
+It is possible to limit the time range of data to be scanned by using the <code>--starttime=[starttime]</code> and <code>--endtime=[endtime]</code> flags.
+The scanned data can be limited based on keys using the <code>--range=[startKey],[endKey][;[startKey],[endKey]&#8230;&#8203;]</code> option.</p>
 </div>
 <div class="listingblock">
 <div class="content">
-<pre>$ bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter &lt;tablename&gt; [&lt;column1&gt; &lt;column2&gt;...]</pre>
+<pre>$ bin/hbase rowcounter [options] &lt;tablename&gt; [--starttime=&lt;start&gt; --endtime=&lt;end&gt;] [--range=[startKey],[endKey][;[startKey],[endKey]...]] [&lt;column1&gt; &lt;column2&gt;...]</pre>
 </div>
 </div>
 <div class="paragraph">
 <p>RowCounter only counts one version per cell.</p>
 </div>
 <div class="paragraph">
-<p>Note: caching for the input Scan is configured via <code>hbase.client.scanner.caching</code> in the job configuration.</p>
+<p>For performance consider to use <code>-Dhbase.client.scanner.caching=100</code> and <code>-Dmapreduce.map.speculative=false</code> options.</p>
+</div>
 </div>
+<div class="sect2">
+<h3 id="cellcounter"><a class="anchor" href="#cellcounter"></a>146.16. CellCounter</h3>
 <div class="paragraph">
 <p>HBase ships another diagnostic mapreduce job called <a href="https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/CellCounter.html">CellCounter</a>.
 Like RowCounter, it gathers more fine-grained statistics about your table.
-The statistics gathered by RowCounter are more fine-grained and include:</p>
+The statistics gathered by CellCounter are more fine-grained and include:</p>
 </div>
 <div class="ulist">
 <ul>
@@ -27111,14 +27196,14 @@ The statistics gathered by RowCounter are more fine-grained and include:</p>
 <div class="paragraph">
 <p>The program allows you to limit the scope of the run.
 Provide a row regex or prefix to limit the rows to analyze.
-Specify a time range to scan the table by using the <code>--starttime=[starttime]</code> and <code>--endtime=[endtime]</code> flags.</p>
+Specify a time range to scan the table by using the <code>--starttime=&lt;starttime&gt;</code> and <code>--endtime=&lt;endtime&gt;</code> flags.</p>
 </div>
 <div class="paragraph">
 <p>Use <code>hbase.mapreduce.scan.column.family</code> to specify scanning a single column family.</p>
 </div>
 <div class="listingblock">
 <div class="content">
-<pre>$ bin/hbase org.apache.hadoop.hbase.mapreduce.CellCounter &lt;tablename&gt; &lt;outputDir&gt; [regex or prefix]</pre>
+<pre>$ bin/hbase cellcounter &lt;tablename&gt; &lt;outputDir&gt; [reportSeparator] [regex or prefix] [--starttime=&lt;starttime&gt; --endtime=&lt;endtime&gt;]</pre>
 </div>
 </div>
 <div class="paragraph">
@@ -27126,15 +27211,14 @@ Specify a time range to scan the table by using the <code>--starttime=[starttime
 </div>
 </div>
 <div class="sect2">
-<h3 id="_mlockall"><a class="anchor" href="#_mlockall"></a>146.16. mlockall</h3>
+<h3 id="_mlockall"><a class="anchor" href="#_mlockall"></a>146.17. mlockall</h3>
 <div class="paragraph">
 <p>It is possible to optionally pin your servers in physical memory making them less likely to be swapped out in oversubscribed environments by having the servers call <a href="http://linux.die.net/man/2/mlockall">mlockall</a> on startup.
-See <a href="https://issues.apache.org/jira/browse/HBASE-4391">HBASE-4391 Add ability to
-          start RS as root and call mlockall</a> for how to build the optional library and have it run on startup.</p>
+See <a href="https://issues.apache.org/jira/browse/HBASE-4391">HBASE-4391 Add ability to start RS as root and call mlockall</a> for how to build the optional library and have it run on startup.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="compaction.tool"><a class="anchor" href="#compaction.tool"></a>146.17. Offline Compaction Tool</h3>
+<h3 id="compaction.tool"><a class="anchor" href="#compaction.tool"></a>146.18. Offline Compaction Tool</h3>
 <div class="paragraph">
 <p>See the usage for the
 <a href="https://hbase.apache.org/devapidocs/org/apache/hadoop/hbase/regionserver/CompactionTool.html">CompactionTool</a>.
@@ -27147,7 +27231,7 @@ Run it like:</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="__code_hbase_clean_code"><a class="anchor" href="#__code_hbase_clean_code"></a>146.18. <code>hbase clean</code></h3>
+<h3 id="__code_hbase_clean_code"><a class="anchor" href="#__code_hbase_clean_code"></a>146.19. <code>hbase clean</code></h3>
 <div class="paragraph">
 <p>The <code>hbase clean</code> command cleans HBase data from ZooKeeper, HDFS, or both.
 It is appropriate to use for testing.
@@ -27166,7 +27250,7 @@ Options:
 </div>
 </div>
 <div class="sect2">
-<h3 id="__code_hbase_pe_code"><a class="anchor" href="#__code_hbase_pe_code"></a>146.19. <code>hbase pe</code></h3>
+<h3 id="__code_hbase_pe_code"><a class="anchor" href="#__code_hbase_pe_code"></a>146.20. <code>hbase pe</code></h3>
 <div class="paragraph">
 <p>The <code>hbase pe</code> command runs the PerformanceEvaluation tool, which is used for testing.</p>
 </div>
@@ -27179,7 +27263,7 @@ For usage instructions, run the command with no options.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="__code_hbase_ltt_code"><a class="anchor" href="#__code_hbase_ltt_code"></a>146.20. <code>hbase ltt</code></h3>
+<h3 id="__code_hbase_ltt_code"><a class="anchor" href="#__code_hbase_ltt_code"></a>146.21. <code>hbase ltt</code></h3>
 <div class="paragraph">
 <p>The <code>hbase ltt</code> command runs the LoadTestTool utility, which is used for testing.</p>
 </div>
@@ -31958,9 +32042,8 @@ policy, which is configured with all the available actions. It chose to run <cod
 <div class="sect3">
 <h4 id="chaos.monkey.properties"><a class="anchor" href="#chaos.monkey.properties"></a>168.5.5. Configuring Individual ChaosMonkey Actions</h4>
 <div class="paragraph">
-<p>Since HBase version 1.0.0 (<a href="https://issues.apache.org/jira/browse/HBASE-11348">HBASE-11348</a>),
-ChaosMonkey integration tests can be configured per test run.
-Create a Java properties file in the HBase classpath and pass it to ChaosMonkey using
+<p>ChaosMonkey integration tests can be configured per test run.
+Create a Java properties file in the HBase CLASSPATH and pass it to ChaosMonkey using
 the <code>-monkeyProps</code> configuration flag. Configurable properties, along with their default
 values if applicable, are listed in the <code>org.apache.hadoop.hbase.chaos.factories.MonkeyConstants</code>
 class. For properties that have defaults, you can override them by including them
@@ -31975,8 +32058,11 @@ in your properties file.</p>
 </div>
 </div>
 <div class="paragraph">
-<p>The above command will start the integration tests and chaos monkey passing the properties file <em>monkey.properties</em>.
-Here is an example chaos monkey file:</p>
+<p>The above command will start the integration tests and chaos monkey. It will look for the
+properties file <em>monkey.properties</em> on the HBase CLASSPATH; e.g. inside the HBASE <em>conf</em> dir.</p>
+</div>
+<div class="paragraph">
+<p>Here is an example chaos monkey file:</p>
 </div>
 <div id="monkey.properties" class="listingblock">
 <div class="title">Example ChaosMonkey Properties File</div>
@@ -31990,6 +32076,9 @@ batch.restart.rs.ratio=<span class="float">0.4f</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
+<p>Periods/time are expressed in milliseconds.</p>
+</div>
+<div class="paragraph">
 <p>HBase 1.0.2 and newer adds the ability to restart HBase&#8217;s underlying ZooKeeper quorum or
 HDFS nodes. To use these actions, you need to configure some new properties, which
 have no reasonable defaults because they are deployment-specific, in your ChaosMonkey
@@ -37679,7 +37768,7 @@ The server will return cellblocks compressed using this same compressor as long
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2018-04-11 14:29:48 UTC
+Last updated 2018-04-12 14:30:08 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index 192ae3b..8aa75d4 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180411" />
+    <meta name="Date-Revision-yyyymmdd" content="20180412" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -306,7 +306,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-12</li>
             </p>
                 </div>
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableOperator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableOperator.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableOperator.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableOperator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableOperator.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TruncateTableProcedureBiConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TruncateTableProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TruncateTableProcedureBiConsumer.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TruncateTableProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TruncateTableProcedureBiConsumer.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html
index e63cd50..d8c0d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html
@@ -422,7 +422,7 @@
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * {@link #listTables(boolean)}<a name="line.417"></a>
+<span class="sourceLineNo">417</span>   * {@link #listTableDescriptors(boolean)}<a name="line.417"></a>
 <span class="sourceLineNo">418</span>   */<a name="line.418"></a>
 <span class="sourceLineNo">419</span>  @Override<a name="line.419"></a>
 <span class="sourceLineNo">420</span>  public CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,<a name="line.420"></a>
@@ -3476,16 +3476,79 @@
 <span class="sourceLineNo">3468</span>    return future;<a name="line.3468"></a>
 <span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
 <span class="sourceLineNo">3470</span><a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>      .serverName(serverName).call();<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>}<a name="line.3480"></a>
+<span class="sourceLineNo">3471</span>  @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>      boolean preserveSplits) {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    tableExists(tableName).whenComplete(<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>      (exist, err) -&gt; {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>        if (err != null) {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>          future.completeExceptionally(err);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          return;<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        }<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        if (!exist) {<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          return;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>        }<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        tableExists(newTableName).whenComplete(<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          (exist1, err1) -&gt; {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>            if (err1 != null) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              future.completeExceptionally(err1);<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>              return;<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>            }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            if (exist1) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>              future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>              return;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>            }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>            getDescriptor(tableName).whenComplete(<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>              (tableDesc, err2) -&gt; {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>                if (err2 != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>                  future.completeExceptionally(err2);<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>                  return;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>                }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>                TableDescriptor newTableDesc<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>                    = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>                if (preserveSplits) {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>                  getTableSplits(tableName).whenComplete((splits, err3) -&gt; {<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>                    if (err3 != null) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>                      future.completeExceptionally(err3);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>                    } else {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>                      createTable(newTableDesc, splits).whenComplete(<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>                        (result, err4) -&gt; {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>                          if (err4 != null) {<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>                            future.completeExceptionally(err4);<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>                          } else {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>                            future.complete(result);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>                          }<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>                        });<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>                    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>                  });<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>                } else {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>                  createTable(newTableDesc).whenComplete(<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                    (result, err5) -&gt; {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>                      if (err5 != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                        future.completeExceptionally(err5);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>                      } else {<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>                        future.complete(result);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>                      }<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>                    });<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>                }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>              });<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>          });<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      });<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>    return future;<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span><a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      .serverName(serverName).call();<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>}<a name="line.3543"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html
index 67249a1..6f1fc1b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html
@@ -300,44 +300,49 @@
 <span class="sourceLineNo">292</span>  @Override<a name="line.292"></a>
 <span class="sourceLineNo">293</span>  public int run(String[] args) throws Exception {<a name="line.293"></a>
 <span class="sourceLineNo">294</span>    if (args.length &lt; 2) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      System.err.println("ERROR: Wrong number of parameters: " + args.length);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      System.err.println("Usage: CellCounter ");<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      System.err.println("       &lt;tablename&gt; &lt;outputDir&gt; &lt;reportSeparator&gt; [^[regex pattern] or " +<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        "[Prefix] for row filter]] --starttime=[starttime] --endtime=[endtime]");<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      System.err.println("  Note: -D properties will be applied to the conf used. ");<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      System.err.println("  Additionally, all of the SCAN properties from TableInputFormat");<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      System.err.println("  can be specified to get fine grained control on what is counted..");<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      System.err.println("   -D " + TableInputFormat.SCAN_ROW_START + "=&lt;rowkey&gt;");<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      System.err.println("   -D " + TableInputFormat.SCAN_ROW_STOP + "=&lt;rowkey&gt;");<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      System.err.println("   -D " + TableInputFormat.SCAN_COLUMNS + "=\"&lt;col1&gt; &lt;col2&gt;...\"");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      System.err.println("   -D " + TableInputFormat.SCAN_COLUMN_FAMILY + "=&lt;family1&gt;,&lt;family2&gt;, ...");<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      System.err.println("   -D " + TableInputFormat.SCAN_TIMESTAMP + "=&lt;timestamp&gt;");<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      System.err.println("   -D " + TableInputFormat.SCAN_TIMERANGE_START + "=&lt;timestamp&gt;");<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      System.err.println("   -D " + TableInputFormat.SCAN_TIMERANGE_END + "=&lt;timestamp&gt;");<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      System.err.println("   -D " + TableInputFormat.SCAN_MAXVERSIONS + "=&lt;count&gt;");<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      System.err.println("   -D " + TableInputFormat.SCAN_CACHEDROWS + "=&lt;count&gt;");<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      System.err.println("   -D " + TableInputFormat.SCAN_BATCHSIZE + "=&lt;count&gt;");<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      System.err.println(" &lt;reportSeparator&gt; parameter can be used to override the default report separator " +<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          "string : used to separate the rowId/column family name and qualifier name.");<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      System.err.println(" [^[regex pattern] or [Prefix] parameter can be used to limit the cell counter count " +<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          "operation to a limited subset of rows from the table based on regex or prefix pattern.");<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      return -1;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    Job job = createSubmittableJob(getConf(), args);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return (job.waitForCompletion(true) ? 0 : 1);<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>   * Main entry point.<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * @param args The command line parameters.<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * @throws Exception When running the job fails.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   */<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public static void main(String[] args) throws Exception {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    int errCode = ToolRunner.run(HBaseConfiguration.create(), new CellCounter(), args);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    System.exit(errCode);<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>}<a name="line.332"></a>
+<span class="sourceLineNo">295</span>      printUsage(args.length);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      return -1;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    Job job = createSubmittableJob(getConf(), args);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    return (job.waitForCompletion(true) ? 0 : 1);<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>  private void printUsage(int parameterCount) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    System.err.println("ERROR: Wrong number of parameters: " + parameterCount);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    System.err.println("Usage: hbase cellcounter &lt;tablename&gt; &lt;outputDir&gt; [reportSeparator] "<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        + "[^[regex pattern] or [Prefix]] [--starttime=&lt;starttime&gt; --endtime=&lt;endtime&gt;]");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    System.err.println("  Note: -D properties will be applied to the conf used.");<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    System.err.println("  Additionally, all of the SCAN properties from TableInputFormat can be "<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        + "specified to get fine grained control on what is counted.");<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    System.err.println("   -D" + TableInputFormat.SCAN_ROW_START + "=&lt;rowkey&gt;");<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    System.err.println("   -D" + TableInputFormat.SCAN_ROW_STOP + "=&lt;rowkey&gt;");<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    System.err.println("   -D" + TableInputFormat.SCAN_COLUMNS + "=\"&lt;col1&gt; &lt;col2&gt;...\"");<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    System.err.println("   -D" + TableInputFormat.SCAN_COLUMN_FAMILY<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        + "=&lt;family1&gt;,&lt;family2&gt;, ...");<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    System.err.println("   -D" + TableInputFormat.SCAN_TIMESTAMP + "=&lt;timestamp&gt;");<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    System.err.println("   -D" + TableInputFormat.SCAN_TIMERANGE_START + "=&lt;timestamp&gt;");<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    System.err.println("   -D" + TableInputFormat.SCAN_TIMERANGE_END + "=&lt;timestamp&gt;");<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    System.err.println("   -D" + TableInputFormat.SCAN_MAXVERSIONS + "=&lt;count&gt;");<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    System.err.println("   -D" + TableInputFormat.SCAN_CACHEDROWS + "=&lt;count&gt;");<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    System.err.println("   -D" + TableInputFormat.SCAN_BATCHSIZE + "=&lt;count&gt;");<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    System.err.println(" &lt;reportSeparator&gt; parameter can be used to override the default report "<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        + "separator string : used to separate the rowId/column family name and qualifier name.");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    System.err.println(" [^[regex pattern] or [Prefix] parameter can be used to limit the cell "<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        + "counter count operation to a limited subset of rows from the table based on regex or "<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        + "prefix pattern.");<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>  /**<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   * Main entry point.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * @param args The command line parameters.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * @throws Exception When running the job fails.<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public static void main(String[] args) throws Exception {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    int errCode = ToolRunner.run(HBaseConfiguration.create(), new CellCounter(), args);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    System.exit(errCode);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>}<a name="line.337"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.html
index 67249a1..6f1fc1b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.html
@@ -300,44 +300,49 @@
 <span class="sourceLineNo">292</span>  @Override<a name="line.292"></a>
 <span class="sourceLineNo">293</span>  public int run(String[] args) throws Exception {<a name="line.293"></a>
 <span class="sourceLineNo">294</span>    if (args.length &lt; 2) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      System.err.println("ERROR: Wrong number of parameters: " + args.length);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      System.err.println("Usage: CellCounter ");<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      System.err.println("       &lt;tablename&gt; &lt;outputDir&gt; &lt;reportSeparator&gt; [^[regex pattern] or " +<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        "[Prefix] for row filter]] --starttime=[starttime] --endtime=[endtime]");<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      System.err.println("  Note: -D properties will be applied to the conf used. ");<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      System.err.println("  Additionally, all of the SCAN properties from TableInputFormat");<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      System.err.println("  can be specified to get fine grained control on what is counted..");<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      System.err.println("   -D " + TableInputFormat.SCAN_ROW_START + "=&lt;rowkey&gt;");<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      System.err.println("   -D " + TableInputFormat.SCAN_ROW_STOP + "=&lt;rowkey&gt;");<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      System.err.println("   -D " + TableInputFormat.SCAN_COLUMNS + "=\"&lt;col1&gt; &lt;col2&gt;...\"");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      System.err.println("   -D " + TableInputFormat.SCAN_COLUMN_FAMILY + "=&lt;family1&gt;,&lt;family2&gt;, ...");<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      System.err.println("   -D " + TableInputFormat.SCAN_TIMESTAMP + "=&lt;timestamp&gt;");<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      System.err.println("   -D " + TableInputFormat.SCAN_TIMERANGE_START + "=&lt;timestamp&gt;");<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      System.err.println("   -D " + TableInputFormat.SCAN_TIMERANGE_END + "=&lt;timestamp&gt;");<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      System.err.println("   -D " + TableInputFormat.SCAN_MAXVERSIONS + "=&lt;count&gt;");<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      System.err.println("   -D " + TableInputFormat.SCAN_CACHEDROWS + "=&lt;count&gt;");<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      System.err.println("   -D " + TableInputFormat.SCAN_BATCHSIZE + "=&lt;count&gt;");<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      System.err.println(" &lt;reportSeparator&gt; parameter can be used to override the default report separator " +<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          "string : used to separate the rowId/column family name and qualifier name.");<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      System.err.println(" [^[regex pattern] or [Prefix] parameter can be used to limit the cell counter count " +<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          "operation to a limited subset of rows from the table based on regex or prefix pattern.");<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      return -1;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    Job job = createSubmittableJob(getConf(), args);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return (job.waitForCompletion(true) ? 0 : 1);<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>   * Main entry point.<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * @param args The command line parameters.<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * @throws Exception When running the job fails.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   */<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public static void main(String[] args) throws Exception {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    int errCode = ToolRunner.run(HBaseConfiguration.create(), new CellCounter(), args);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    System.exit(errCode);<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>}<a name="line.332"></a>
+<span class="sourceLineNo">295</span>      printUsage(args.length);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      return -1;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    Job job = createSubmittableJob(getConf(), args);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    return (job.waitForCompletion(true) ? 0 : 1);<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>  private void printUsage(int parameterCount) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    System.err.println("ERROR: Wrong number of parameters: " + parameterCount);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    System.err.println("Usage: hbase cellcounter &lt;tablename&gt; &lt;outputDir&gt; [reportSeparator] "<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        + "[^[regex pattern] or [Prefix]] [--starttime=&lt;starttime&gt; --endtime=&lt;endtime&gt;]");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    System.err.println("  Note: -D properties will be applied to the conf used.");<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    System.err.println("  Additionally, all of the SCAN properties from TableInputFormat can be "<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        + "specified to get fine grained control on what is counted.");<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    System.err.println("   -D" + TableInputFormat.SCAN_ROW_START + "=&lt;rowkey&gt;");<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    System.err.println("   -D" + TableInputFormat.SCAN_ROW_STOP + "=&lt;rowkey&gt;");<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    System.err.println("   -D" + TableInputFormat.SCAN_COLUMNS + "=\"&lt;col1&gt; &lt;col2&gt;...\"");<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    System.err.println("   -D" + TableInputFormat.SCAN_COLUMN_FAMILY<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        + "=&lt;family1&gt;,&lt;family2&gt;, ...");<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    System.err.println("   -D" + TableInputFormat.SCAN_TIMESTAMP + "=&lt;timestamp&gt;");<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    System.err.println("   -D" + TableInputFormat.SCAN_TIMERANGE_START + "=&lt;timestamp&gt;");<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    System.err.println("   -D" + TableInputFormat.SCAN_TIMERANGE_END + "=&lt;timestamp&gt;");<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    System.err.println("   -D" + TableInputFormat.SCAN_MAXVERSIONS + "=&lt;count&gt;");<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    System.err.println("   -D" + TableInputFormat.SCAN_CACHEDROWS + "=&lt;count&gt;");<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    System.err.println("   -D" + TableInputFormat.SCAN_BATCHSIZE + "=&lt;count&gt;");<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    System.err.println(" &lt;reportSeparator&gt; parameter can be used to override the default report "<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        + "separator string : used to separate the rowId/column family name and qualifier name.");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    System.err.println(" [^[regex pattern] or [Prefix] parameter can be used to limit the cell "<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        + "counter count operation to a limited subset of rows from the table based on regex or "<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        + "prefix pattern.");<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>  /**<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   * Main entry point.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * @param args The command line parameters.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * @throws Exception When running the job fails.<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public static void main(String[] args) throws Exception {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    int errCode = ToolRunner.run(HBaseConfiguration.create(), new CellCounter(), args);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    System.exit(errCode);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>}<a name="line.337"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.IntSumReducer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.IntSumReducer.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.IntSumReducer.html
index 67249a1..6f1fc1b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.IntSumReducer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.IntSumReducer.html
@@ -300,44 +300,49 @@
 <span class="sourceLineNo">292</span>  @Override<a name="line.292"></a>
 <span class="sourceLineNo">293</span>  public int run(String[] args) throws Exception {<a name="line.293"></a>
 <span class="sourceLineNo">294</span>    if (args.length &lt; 2) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      System.err.println("ERROR: Wrong number of parameters: " + args.length);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      System.err.println("Usage: CellCounter ");<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      System.err.println("       &lt;tablename&gt; &lt;outputDir&gt; &lt;reportSeparator&gt; [^[regex pattern] or " +<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        "[Prefix] for row filter]] --starttime=[starttime] --endtime=[endtime]");<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      System.err.println("  Note: -D properties will be applied to the conf used. ");<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      System.err.println("  Additionally, all of the SCAN properties from TableInputFormat");<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      System.err.println("  can be specified to get fine grained control on what is counted..");<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      System.err.println("   -D " + TableInputFormat.SCAN_ROW_START + "=&lt;rowkey&gt;");<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      System.err.println("   -D " + TableInputFormat.SCAN_ROW_STOP + "=&lt;rowkey&gt;");<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      System.err.println("   -D " + TableInputFormat.SCAN_COLUMNS + "=\"&lt;col1&gt; &lt;col2&gt;...\"");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      System.err.println("   -D " + TableInputFormat.SCAN_COLUMN_FAMILY + "=&lt;family1&gt;,&lt;family2&gt;, ...");<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      System.err.println("   -D " + TableInputFormat.SCAN_TIMESTAMP + "=&lt;timestamp&gt;");<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      System.err.println("   -D " + TableInputFormat.SCAN_TIMERANGE_START + "=&lt;timestamp&gt;");<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      System.err.println("   -D " + TableInputFormat.SCAN_TIMERANGE_END + "=&lt;timestamp&gt;");<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      System.err.println("   -D " + TableInputFormat.SCAN_MAXVERSIONS + "=&lt;count&gt;");<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      System.err.println("   -D " + TableInputFormat.SCAN_CACHEDROWS + "=&lt;count&gt;");<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      System.err.println("   -D " + TableInputFormat.SCAN_BATCHSIZE + "=&lt;count&gt;");<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      System.err.println(" &lt;reportSeparator&gt; parameter can be used to override the default report separator " +<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          "string : used to separate the rowId/column family name and qualifier name.");<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      System.err.println(" [^[regex pattern] or [Prefix] parameter can be used to limit the cell counter count " +<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          "operation to a limited subset of rows from the table based on regex or prefix pattern.");<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      return -1;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    Job job = createSubmittableJob(getConf(), args);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return (job.waitForCompletion(true) ? 0 : 1);<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>   * Main entry point.<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * @param args The command line parameters.<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * @throws Exception When running the job fails.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   */<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public static void main(String[] args) throws Exception {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    int errCode = ToolRunner.run(HBaseConfiguration.create(), new CellCounter(), args);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    System.exit(errCode);<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>}<a name="line.332"></a>
+<span class="sourceLineNo">295</span>      printUsage(args.length);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      return -1;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    Job job = createSubmittableJob(getConf(), args);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    return (job.waitForCompletion(true) ? 0 : 1);<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>  private void printUsage(int parameterCount) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    System.err.println("ERROR: Wrong number of parameters: " + parameterCount);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    System.err.println("Usage: hbase cellcounter &lt;tablename&gt; &lt;outputDir&gt; [reportSeparator] "<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        + "[^[regex pattern] or [Prefix]] [--starttime=&lt;starttime&gt; --endtime=&lt;endtime&gt;]");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    System.err.println("  Note: -D properties will be applied to the conf used.");<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    System.err.println("  Additionally, all of the SCAN properties from TableInputFormat can be "<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        + "specified to get fine grained control on what is counted.");<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    System.err.println("   -D" + TableInputFormat.SCAN_ROW_START + "=&lt;rowkey&gt;");<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    System.err.println("   -D" + TableInputFormat.SCAN_ROW_STOP + "=&lt;rowkey&gt;");<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    System.err.println("   -D" + TableInputFormat.SCAN_COLUMNS + "=\"&lt;col1&gt; &lt;col2&gt;...\"");<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    System.err.println("   -D" + TableInputFormat.SCAN_COLUMN_FAMILY<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        + "=&lt;family1&gt;,&lt;family2&gt;, ...");<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    System.err.println("   -D" + TableInputFormat.SCAN_TIMESTAMP + "=&lt;timestamp&gt;");<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    System.err.println("   -D" + TableInputFormat.SCAN_TIMERANGE_START + "=&lt;timestamp&gt;");<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    System.err.println("   -D" + TableInputFormat.SCAN_TIMERANGE_END + "=&lt;timestamp&gt;");<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    System.err.println("   -D" + TableInputFormat.SCAN_MAXVERSIONS + "=&lt;count&gt;");<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    System.err.println("   -D" + TableInputFormat.SCAN_CACHEDROWS + "=&lt;count&gt;");<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    System.err.println("   -D" + TableInputFormat.SCAN_BATCHSIZE + "=&lt;count&gt;");<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    System.err.println(" &lt;reportSeparator&gt; parameter can be used to override the default report "<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        + "separator string : used to separate the rowId/column family name and qualifier name.");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    System.err.println(" [^[regex pattern] or [Prefix] parameter can be used to limit the cell "<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        + "counter count operation to a limited subset of rows from the table based on regex or "<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        + "prefix pattern.");<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>  /**<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   * Main entry point.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * @param args The command line parameters.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * @throws Exception When running the job fails.<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public static void main(String[] args) throws Exception {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    int errCode = ToolRunner.run(HBaseConfiguration.create(), new CellCounter(), args);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    System.exit(errCode);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>}<a name="line.337"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.html
index 67249a1..6f1fc1b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.html
@@ -300,44 +300,49 @@
 <span class="sourceLineNo">292</span>  @Override<a name="line.292"></a>
 <span class="sourceLineNo">293</span>  public int run(String[] args) throws Exception {<a name="line.293"></a>
 <span class="sourceLineNo">294</span>    if (args.length &lt; 2) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      System.err.println("ERROR: Wrong number of parameters: " + args.length);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      System.err.println("Usage: CellCounter ");<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      System.err.println("       &lt;tablename&gt; &lt;outputDir&gt; &lt;reportSeparator&gt; [^[regex pattern] or " +<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        "[Prefix] for row filter]] --starttime=[starttime] --endtime=[endtime]");<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      System.err.println("  Note: -D properties will be applied to the conf used. ");<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      System.err.println("  Additionally, all of the SCAN properties from TableInputFormat");<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      System.err.println("  can be specified to get fine grained control on what is counted..");<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      System.err.println("   -D " + TableInputFormat.SCAN_ROW_START + "=&lt;rowkey&gt;");<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      System.err.println("   -D " + TableInputFormat.SCAN_ROW_STOP + "=&lt;rowkey&gt;");<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      System.err.println("   -D " + TableInputFormat.SCAN_COLUMNS + "=\"&lt;col1&gt; &lt;col2&gt;...\"");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      System.err.println("   -D " + TableInputFormat.SCAN_COLUMN_FAMILY + "=&lt;family1&gt;,&lt;family2&gt;, ...");<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      System.err.println("   -D " + TableInputFormat.SCAN_TIMESTAMP + "=&lt;timestamp&gt;");<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      System.err.println("   -D " + TableInputFormat.SCAN_TIMERANGE_START + "=&lt;timestamp&gt;");<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      System.err.println("   -D " + TableInputFormat.SCAN_TIMERANGE_END + "=&lt;timestamp&gt;");<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      System.err.println("   -D " + TableInputFormat.SCAN_MAXVERSIONS + "=&lt;count&gt;");<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      System.err.println("   -D " + TableInputFormat.SCAN_CACHEDROWS + "=&lt;count&gt;");<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      System.err.println("   -D " + TableInputFormat.SCAN_BATCHSIZE + "=&lt;count&gt;");<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      System.err.println(" &lt;reportSeparator&gt; parameter can be used to override the default report separator " +<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          "string : used to separate the rowId/column family name and qualifier name.");<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      System.err.println(" [^[regex pattern] or [Prefix] parameter can be used to limit the cell counter count " +<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          "operation to a limited subset of rows from the table based on regex or prefix pattern.");<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      return -1;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    Job job = createSubmittableJob(getConf(), args);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return (job.waitForCompletion(true) ? 0 : 1);<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>   * Main entry point.<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * @param args The command line parameters.<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * @throws Exception When running the job fails.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   */<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public static void main(String[] args) throws Exception {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    int errCode = ToolRunner.run(HBaseConfiguration.create(), new CellCounter(), args);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    System.exit(errCode);<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>}<a name="line.332"></a>
+<span class="sourceLineNo">295</span>      printUsage(args.length);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      return -1;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    Job job = createSubmittableJob(getConf(), args);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    return (job.waitForCompletion(true) ? 0 : 1);<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>  private void printUsage(int parameterCount) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    System.err.println("ERROR: Wrong number of parameters: " + parameterCount);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    System.err.println("Usage: hbase cellcounter &lt;tablename&gt; &lt;outputDir&gt; [reportSeparator] "<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        + "[^[regex pattern] or [Prefix]] [--starttime=&lt;starttime&gt; --endtime=&lt;endtime&gt;]");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    System.err.println("  Note: -D properties will be applied to the conf used.");<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    System.err.println("  Additionally, all of the SCAN properties from TableInputFormat can be "<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        + "specified to get fine grained control on what is counted.");<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    System.err.println("   -D" + TableInputFormat.SCAN_ROW_START + "=&lt;rowkey&gt;");<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    System.err.println("   -D" + TableInputFormat.SCAN_ROW_STOP + "=&lt;rowkey&gt;");<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    System.err.println("   -D" + TableInputFormat.SCAN_COLUMNS + "=\"&lt;col1&gt; &lt;col2&gt;...\"");<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    System.err.println("   -D" + TableInputFormat.SCAN_COLUMN_FAMILY<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        + "=&lt;family1&gt;,&lt;family2&gt;, ...");<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    System.err.println("   -D" + TableInputFormat.SCAN_TIMESTAMP + "=&lt;timestamp&gt;");<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    System.err.println("   -D" + TableInputFormat.SCAN_TIMERANGE_START + "=&lt;timestamp&gt;");<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    System.err.println("   -D" + TableInputFormat.SCAN_TIMERANGE_END + "=&lt;timestamp&gt;");<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    System.err.println("   -D" + TableInputFormat.SCAN_MAXVERSIONS + "=&lt;count&gt;");<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    System.err.println("   -D" + TableInputFormat.SCAN_CACHEDROWS + "=&lt;count&gt;");<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    System.err.println("   -D" + TableInputFormat.SCAN_BATCHSIZE + "=&lt;count&gt;");<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    System.err.println(" &lt;reportSeparator&gt; parameter can be used to override the default report "<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        + "separator string : used to separate the rowId/column family name and qualifier name.");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    System.err.println(" [^[regex pattern] or [Prefix] parameter can be used to limit the cell "<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        + "counter count operation to a limited subset of rows from the table based on regex or "<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        + "prefix pattern.");<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>  /**<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   * Main entry point.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * @param args The command line parameters.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * @throws Exception When running the job fails.<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public static void main(String[] args) throws Exception {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    int errCode = ToolRunner.run(HBaseConfiguration.create(), new CellCounter(), args);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    System.exit(errCode);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>}<a name="line.337"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html
index 56ec3ac..8f4cacb 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html
@@ -229,9 +229,9 @@
 <span class="sourceLineNo">221</span>   * Note that we don't document --expected-count, because it's intended for test.<a name="line.221"></a>
 <span class="sourceLineNo">222</span>   */<a name="line.222"></a>
 <span class="sourceLineNo">223</span>  private static void printUsage() {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    System.err.println("Usage: RowCounter [options] &lt;tablename&gt; " +<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        "[--starttime=[start] --endtime=[end] " +<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        "[--range=[startKey],[endKey][;[startKey],[endKey]...]] [&lt;column1&gt; &lt;column2&gt;...]");<a name="line.226"></a>
+<span class="sourceLineNo">224</span>    System.err.println("Usage: hbase rowcounter [options] &lt;tablename&gt; "<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        + "[--starttime=&lt;start&gt; --endtime=&lt;end&gt;] "<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        + "[--range=[startKey],[endKey][;[startKey],[endKey]...]] [&lt;column1&gt; &lt;column2&gt;...]");<a name="line.226"></a>
 <span class="sourceLineNo">227</span>    System.err.println("For performance consider the following options:\n"<a name="line.227"></a>
 <span class="sourceLineNo">228</span>        + "-Dhbase.client.scanner.caching=100\n"<a name="line.228"></a>
 <span class="sourceLineNo">229</span>        + "-Dmapreduce.map.speculative=false");<a name="line.229"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.html
index 56ec3ac..8f4cacb 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.html
@@ -229,9 +229,9 @@
 <span class="sourceLineNo">221</span>   * Note that we don't document --expected-count, because it's intended for test.<a name="line.221"></a>
 <span class="sourceLineNo">222</span>   */<a name="line.222"></a>
 <span class="sourceLineNo">223</span>  private static void printUsage() {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    System.err.println("Usage: RowCounter [options] &lt;tablename&gt; " +<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        "[--starttime=[start] --endtime=[end] " +<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        "[--range=[startKey],[endKey][;[startKey],[endKey]...]] [&lt;column1&gt; &lt;column2&gt;...]");<a name="line.226"></a>
+<span class="sourceLineNo">224</span>    System.err.println("Usage: hbase rowcounter [options] &lt;tablename&gt; "<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        + "[--starttime=&lt;start&gt; --endtime=&lt;end&gt;] "<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        + "[--range=[startKey],[endKey][;[startKey],[endKey]...]] [&lt;column1&gt; &lt;column2&gt;...]");<a name="line.226"></a>
 <span class="sourceLineNo">227</span>    System.err.println("For performance consider the following options:\n"<a name="line.227"></a>
 <span class="sourceLineNo">228</span>        + "-Dhbase.client.scanner.caching=100\n"<a name="line.228"></a>
 <span class="sourceLineNo">229</span>        + "-Dmapreduce.map.speculative=false");<a name="line.229"></a>


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 7001ee7..215cadc 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180411" />
+    <meta name="Date-Revision-yyyymmdd" content="20180412" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -284,7 +284,7 @@
 <td>3601</td>
 <td>0</td>
 <td>0</td>
-<td>15876</td></tr></table></div>
+<td>15869</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -4157,7 +4157,7 @@
 <td><a href="#org.apache.hadoop.hbase.mapreduce.CellCounter.java">org/apache/hadoop/hbase/mapreduce/CellCounter.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>9</td></tr>
+<td>6</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.CellCreator.java">org/apache/hadoop/hbase/mapreduce/CellCreator.java</a></td>
 <td>0</td>
@@ -4627,7 +4627,7 @@
 <td><a href="#org.apache.hadoop.hbase.mapreduce.WALPlayer.java">org/apache/hadoop/hbase/mapreduce/WALPlayer.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>1</td></tr>
+<td>2</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication.java">org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.java</a></td>
 <td>0</td>
@@ -5007,7 +5007,7 @@
 <td><a href="#org.apache.hadoop.hbase.master.assignment.RegionStateStore.java">org/apache/hadoop/hbase/master/assignment/RegionStateStore.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>6</td></tr>
+<td>5</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.RegionStates.java">org/apache/hadoop/hbase/master/assignment/RegionStates.java</a></td>
 <td>0</td>
@@ -5982,7 +5982,7 @@
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>10</td></tr>
+<td>9</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.util.DelayedUtil.java">org/apache/hadoop/hbase/procedure2/util/DelayedUtil.java</a></td>
 <td>0</td>
@@ -6832,7 +6832,7 @@
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedRegionScannerImpl.java">org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>6</td></tr>
+<td>4</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedStoreScanner.java">org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.java</a></td>
 <td>0</td>
@@ -7182,7 +7182,7 @@
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestJoinedScanners.java">org/apache/hadoop/hbase/regionserver/TestJoinedScanners.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>3</td></tr>
+<td>1</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestKeepDeletes.java">org/apache/hadoop/hbase/regionserver/TestKeepDeletes.java</a></td>
 <td>0</td>
@@ -9159,1041 +9159,1046 @@
 <td>0</td>
 <td>3</td></tr>
 <tr class="a">
+<td><a href="#org.apache.hadoop.hbase.thrift2.ThriftServer.java">org/apache/hadoop/hbase/thrift2/ThriftServer.java</a></td>
+<td>0</td>
+<td>0</td>
+<td>1</td></tr>
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.tool.Canary.java">org/apache/hadoop/hbase/tool/Canary.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>44</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.tool.LoadIncrementalHFiles.java">org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.tool.MapreduceTestingShim.java">org/apache/hadoop/hbase/tool/MapreduceTestingShim.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.tool.TestCanaryTool.java">org/apache/hadoop/hbase/tool/TestCanaryTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.tool.TestLoadIncrementalHFiles.java">org/apache/hadoop/hbase/tool/TestLoadIncrementalHFiles.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.tool.TestLoadIncrementalHFilesSplitRecovery.java">org/apache/hadoop/hbase/tool/TestLoadIncrementalHFilesSplitRecovery.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.trace.IntegrationTestSendTraceRequests.java">org/apache/hadoop/hbase/trace/IntegrationTestSendTraceRequests.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.trace.SpanReceiverHost.java">org/apache/hadoop/hbase/trace/SpanReceiverHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.trace.TraceTree.java">org/apache/hadoop/hbase/trace/TraceTree.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.trace.TraceUtil.java">org/apache/hadoop/hbase/trace/TraceUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.types.TestCopyOnWriteMaps.java">org/apache/hadoop/hbase/types/TestCopyOnWriteMaps.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.types.TestOrderedBlob.java">org/apache/hadoop/hbase/types/TestOrderedBlob.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.types.TestOrderedString.java">org/apache/hadoop/hbase/types/TestOrderedString.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.types.TestStruct.java">org/apache/hadoop/hbase/types/TestStruct.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>21</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.types.TestTerminatedWrapper.java">org/apache/hadoop/hbase/types/TestTerminatedWrapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.types.TestUnion2.java">org/apache/hadoop/hbase/types/TestUnion2.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.AbstractByteRange.java">org/apache/hadoop/hbase/util/AbstractByteRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.AbstractFileStatusFilter.java">org/apache/hadoop/hbase/util/AbstractFileStatusFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.AbstractHBaseTool.java">org/apache/hadoop/hbase/util/AbstractHBaseTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.AbstractPositionedByteRange.java">org/apache/hadoop/hbase/util/AbstractPositionedByteRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Addressing.java">org/apache/hadoop/hbase/util/Addressing.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.AtomicUtils.java">org/apache/hadoop/hbase/util/AtomicUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.AvlUtil.java">org/apache/hadoop/hbase/util/AvlUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.Base64.java">org/apache/hadoop/hbase/util/Base64.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>28</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.BaseTestHBaseFsck.java">org/apache/hadoop/hbase/util/BaseTestHBaseFsck.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.BloomContext.java">org/apache/hadoop/hbase/util/BloomContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.BloomFilter.java">org/apache/hadoop/hbase/util/BloomFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.BloomFilterChunk.java">org/apache/hadoop/hbase/util/BloomFilterChunk.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.BloomFilterFactory.java">org/apache/hadoop/hbase/util/BloomFilterFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.BloomFilterUtil.java">org/apache/hadoop/hbase/util/BloomFilterUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.BloomFilterWriter.java">org/apache/hadoop/hbase/util/BloomFilterWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.BoundedPriorityBlockingQueue.java">org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.BuilderStyleTest.java">org/apache/hadoop/hbase/util/BuilderStyleTest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ByteBufferArray.java">org/apache/hadoop/hbase/util/ByteBufferArray.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ByteBufferUtils.java">org/apache/hadoop/hbase/util/ByteBufferUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>45</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ByteRangeUtils.java">org/apache/hadoop/hbase/util/ByteRangeUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Bytes.java">org/apache/hadoop/hbase/util/Bytes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>85</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ChecksumType.java">org/apache/hadoop/hbase/util/ChecksumType.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ClassLoaderTestHelper.java">org/apache/hadoop/hbase/util/ClassLoaderTestHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ClassSize.java">org/apache/hadoop/hbase/util/ClassSize.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Classes.java">org/apache/hadoop/hbase/util/Classes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.CollectionBackedScanner.java">org/apache/hadoop/hbase/util/CollectionBackedScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.CollectionUtils.java">org/apache/hadoop/hbase/util/CollectionUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.CommonFSUtils.java">org/apache/hadoop/hbase/util/CommonFSUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.CompressionTest.java">org/apache/hadoop/hbase/util/CompressionTest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ConcatenatedLists.java">org/apache/hadoop/hbase/util/ConcatenatedLists.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ConfigurationUtil.java">org/apache/hadoop/hbase/util/ConfigurationUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ConnectionCache.java">org/apache/hadoop/hbase/util/ConnectionCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ConstantDelayQueue.java">org/apache/hadoop/hbase/util/ConstantDelayQueue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.CoprocessorClassLoader.java">org/apache/hadoop/hbase/util/CoprocessorClassLoader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Counter.java">org/apache/hadoop/hbase/util/Counter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.DirectMemoryUtils.java">org/apache/hadoop/hbase/util/DirectMemoryUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.DynamicClassLoader.java">org/apache/hadoop/hbase/util/DynamicClassLoader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>26</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.EncryptionTest.java">org/apache/hadoop/hbase/util/EncryptionTest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.EnvironmentEdgeManager.java">org/apache/hadoop/hbase/util/EnvironmentEdgeManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.EnvironmentEdgeManagerTestHelper.java">org/apache/hadoop/hbase/util/EnvironmentEdgeManagerTestHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ExceptionUtil.java">org/apache/hadoop/hbase/util/ExceptionUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.FSHDFSUtils.java">org/apache/hadoop/hbase/util/FSHDFSUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.FSRegionScanner.java">org/apache/hadoop/hbase/util/FSRegionScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.FSTableDescriptors.java">org/apache/hadoop/hbase/util/FSTableDescriptors.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.FSUtils.java">org/apache/hadoop/hbase/util/FSUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>61</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.FSVisitor.java">org/apache/hadoop/hbase/util/FSVisitor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.FileStatusFilter.java">org/apache/hadoop/hbase/util/FileStatusFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.GetJavaProperty.java">org/apache/hadoop/hbase/util/GetJavaProperty.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.HBaseConfTool.java">org/apache/hadoop/hbase/util/HBaseConfTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.HBaseFsck.java">org/apache/hadoop/hbase/util/HBaseFsck.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>97</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.HBaseFsckRepair.java">org/apache/hadoop/hbase/util/HBaseFsckRepair.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.HBaseHomePath.java">org/apache/hadoop/hbase/util/HBaseHomePath.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.HFileArchiveTestingUtil.java">org/apache/hadoop/hbase/util/HFileArchiveTestingUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.HFileArchiveUtil.java">org/apache/hadoop/hbase/util/HFileArchiveUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.HFileTestUtil.java">org/apache/hadoop/hbase/util/HFileTestUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.Hash.java">org/apache/hadoop/hbase/util/Hash.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.HashKey.java">org/apache/hadoop/hbase/util/HashKey.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.HashedBytes.java">org/apache/hadoop/hbase/util/HashedBytes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.IdLock.java">org/apache/hadoop/hbase/util/IdLock.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.IdReadWriteLock.java">org/apache/hadoop/hbase/util/IdReadWriteLock.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.JRubyFormat.java">org/apache/hadoop/hbase/util/JRubyFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.JSONBean.java">org/apache/hadoop/hbase/util/JSONBean.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.JVM.java">org/apache/hadoop/hbase/util/JVM.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.JVMClusterUtil.java">org/apache/hadoop/hbase/util/JVMClusterUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.JenkinsHash.java">org/apache/hadoop/hbase/util/JenkinsHash.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>39</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.JsonMapper.java">org/apache/hadoop/hbase/util/JsonMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.JvmPauseMonitor.java">org/apache/hadoop/hbase/util/JvmPauseMonitor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.KeyLocker.java">org/apache/hadoop/hbase/util/KeyLocker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.LoadTestDataGeneratorWithMOB.java">org/apache/hadoop/hbase/util/LoadTestDataGeneratorWithMOB.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.LoadTestDataGeneratorWithTags.java">org/apache/hadoop/hbase/util/LoadTestDataGeneratorWithTags.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.LoadTestTool.java">org/apache/hadoop/hbase/util/LoadTestTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MD5Hash.java">org/apache/hadoop/hbase/util/MD5Hash.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ManualEnvironmentEdge.java">org/apache/hadoop/hbase/util/ManualEnvironmentEdge.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MapreduceDependencyClasspathTool.java">org/apache/hadoop/hbase/util/MapreduceDependencyClasspathTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Methods.java">org/apache/hadoop/hbase/util/Methods.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MockServer.java">org/apache/hadoop/hbase/util/MockServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ModifyRegionUtils.java">org/apache/hadoop/hbase/util/ModifyRegionUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MultiHConnection.java">org/apache/hadoop/hbase/util/MultiHConnection.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.MultiThreadedAction.java">org/apache/hadoop/hbase/util/MultiThreadedAction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MultiThreadedReader.java">org/apache/hadoop/hbase/util/MultiThreadedReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.MultiThreadedReaderWithACL.java">org/apache/hadoop/hbase/util/MultiThreadedReaderWithACL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MultiThreadedUpdater.java">org/apache/hadoop/hbase/util/MultiThreadedUpdater.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.MultiThreadedWriter.java">org/apache/hadoop/hbase/util/MultiThreadedWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MultiThreadedWriterBase.java">org/apache/hadoop/hbase/util/MultiThreadedWriterBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.MunkresAssignment.java">org/apache/hadoop/hbase/util/MunkresAssignment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MurmurHash3.java">org/apache/hadoop/hbase/util/MurmurHash3.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.NettyEventLoopGroupConfig.java">org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.Order.java">org/apache/hadoop/hbase/util/Order.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.OrderedBytes.java">org/apache/hadoop/hbase/util/OrderedBytes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>44</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.Pair.java">org/apache/hadoop/hbase/util/Pair.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.PairOfSameType.java">org/apache/hadoop/hbase/util/PairOfSameType.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.PoolMap.java">org/apache/hadoop/hbase/util/PoolMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.PositionedByteRange.java">org/apache/hadoop/hbase/util/PositionedByteRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.PrettyPrinter.java">org/apache/hadoop/hbase/util/PrettyPrinter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ProcessBasedLocalHBaseCluster.java">org/apache/hadoop/hbase/util/ProcessBasedLocalHBaseCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.RedundantKVGenerator.java">org/apache/hadoop/hbase/util/RedundantKVGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ReflectionUtils.java">org/apache/hadoop/hbase/util/ReflectionUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.RegionMover.java">org/apache/hadoop/hbase/util/RegionMover.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>35</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.RegionSplitCalculator.java">org/apache/hadoop/hbase/util/RegionSplitCalculator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.RegionSplitter.java">org/apache/hadoop/hbase/util/RegionSplitter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.RetryCounter.java">org/apache/hadoop/hbase/util/RetryCounter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.RollingStatCalculator.java">org/apache/hadoop/hbase/util/RollingStatCalculator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.RowBloomContext.java">org/apache/hadoop/hbase/util/RowBloomContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ServerCommandLine.java">org/apache/hadoop/hbase/util/ServerCommandLine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ServerRegionReplicaUtil.java">org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ShutdownHookManager.java">org/apache/hadoop/hbase/util/ShutdownHookManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.SimpleByteRange.java">org/apache/hadoop/hbase/util/SimpleByteRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.SimpleMutableByteRange.java">org/apache/hadoop/hbase/util/SimpleMutableByteRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.SimplePositionedByteRange.java">org/apache/hadoop/hbase/util/SimplePositionedByteRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.SimplePositionedMutableByteRange.java">org/apache/hadoop/hbase/util/SimplePositionedMutableByteRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Sleeper.java">org/apache/hadoop/hbase/util/Sleeper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.StealJobQueue.java">org/apache/hadoop/hbase/util/StealJobQueue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.StoppableImplementation.java">org/apache/hadoop/hbase/util/StoppableImplementation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.Strings.java">org/apache/hadoop/hbase/util/Strings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestBase64.java">org/apache/hadoop/hbase/util/TestBase64.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TestBloomFilterChunk.java">org/apache/hadoop/hbase/util/TestBloomFilterChunk.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestBytes.java">org/apache/hadoop/hbase/util/TestBytes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>21</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TestCompressionTest.java">org/apache/hadoop/hbase/util/TestCompressionTest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestCoprocessorClassLoader.java">org/apache/hadoop/hbase/util/TestCoprocessorClassLoader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TestCoprocessorScanPolicy.java">org/apache/hadoop/hbase/util/TestCoprocessorScanPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestFSTableDescriptors.java">org/apache/hadoop/hbase/util/TestFSTableDescriptors.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TestFSUtils.java">org/apache/hadoop/hbase/util/TestFSUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestFSVisitor.java">org/apache/hadoop/hbase/util/TestFSVisitor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TestHFileArchiveUtil.java">org/apache/hadoop/hbase/util/TestHFileArchiveUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestIdLock.java">org/apache/hadoop/hbase/util/TestIdLock.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TestIdReadWriteLock.java">org/apache/hadoop/hbase/util/TestIdReadWriteLock.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestMiniClusterLoadEncoded.java">org/apache/hadoop/hbase/util/TestMiniClusterLoadEncoded.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TestMiniClusterLoadSequential.java">org/apache/hadoop/hbase/util/TestMiniClusterLoadSequential.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestOrderedBytes.java">org/apache/hadoop/hbase/util/TestOrderedBytes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>30</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TestRegionSplitter.java">org/apache/hadoop/hbase/util/TestRegionSplitter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>192</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestSimplePositionedMutableByteRange.java">org/apache/hadoop/hbase/util/TestSimplePositionedMutableByteRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TestSortedList.java">org/apache/hadoop/hbase/util/TestSortedList.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Threads.java">org/apache/hadoop/hbase/util/Threads.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TimeOffsetEnvironmentEdge.java">org/apache/hadoop/hbase/util/TimeOffsetEnvironmentEdge.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Triple.java">org/apache/hadoop/hbase/util/Triple.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.UnsafeAccess.java">org/apache/hadoop/hbase/util/UnsafeAccess.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>35</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.UnsafeAvailChecker.java">org/apache/hadoop/hbase/util/UnsafeAvailChecker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.VersionInfo.java">org/apache/hadoop/hbase/util/VersionInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Writables.java">org/apache/hadoop/hbase/util/Writables.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ZKDataMigrator.java">org/apache/hadoop/hbase/util/ZKDataMigrator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.compaction.MajorCompactor.java">org/apache/hadoop/hbase/util/compaction/MajorCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.compaction.TestMajorCompactionRequest.java">org/apache/hadoop/hbase/util/compaction/TestMajorCompactionRequest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.compaction.TestMajorCompactor.java">org/apache/hadoop/hbase/util/compaction/TestMajorCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker.java">org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.java">org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.hbck.OfflineMetaRebuildTestCore.java">org/apache/hadoop/hbase/util/hbck/OfflineMetaRebuildTestCore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair.java">org/apache/hadoop/hbase/util/hbck/OfflineMetaRepair.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.test.LoadTestDataGenerator.java">org/apache/hadoop/hbase/util/test/LoadTestDataGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.test.LoadTestDataGeneratorWithACL.java">org/apache/hadoop/hbase/util/test/LoadTestDataGeneratorWithACL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.AbstractFSWALProvider.java">org/apache/hadoop/hbase/wal/AbstractFSWALProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.BoundedGroupingStrategy.java">org/apache/hadoop/hbase/wal/BoundedGroupingStrategy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.DisabledWALProvider.java">org/apache/hadoop/hbase/wal/DisabledWALProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.IOTestProvider.java">org/apache/hadoop/hbase/wal/IOTestProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.NamespaceGroupingStrategy.java">org/apache/hadoop/hbase/wal/NamespaceGroupingStrategy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.NettyAsyncFSWALConfigHelper.java">org/apache/hadoop/hbase/wal/NettyAsyncFSWALConfigHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.TestBoundedRegionGroupingStrategy.java">org/apache/hadoop/hbase/wal/TestBoundedRegionGroupingStrategy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.TestFSHLogProvider.java">org/apache/hadoop/hbase/wal/TestFSHLogProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.TestWALFactory.java">org/apache/hadoop/hbase/wal/TestWALFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.TestWALMethods.java">org/apache/hadoop/hbase/wal/TestWALMethods.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.TestWALOpenAfterDNRollingStart.java">org/apache/hadoop/hbase/wal/TestWALOpenAfterDNRollingStart.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.TestWALReaderOnSecureWAL.java">org/apache/hadoop/hbase/wal/TestWALReaderOnSecureWAL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.TestWALRootDir.java">org/apache/hadoop/hbase/wal/TestWALRootDir.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.TestWALSplit.java">org/apache/hadoop/hbase/wal/TestWALSplit.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.WAL.java">org/apache/hadoop/hbase/wal/WAL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.WALEdit.java">org/apache/hadoop/hbase/wal/WALEdit.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.WALFactory.java">org/apache/hadoop/hbase/wal/WALFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.WALKey.java">org/apache/hadoop/hbase/wal/WALKey.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.WALKeyImpl.java">org/apache/hadoop/hbase/wal/WALKeyImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.WALPerformanceEvaluation.java">org/apache/hadoop/hbase/wal/WALPerformanceEvaluation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.WALPrettyPrinter.java">org/apache/hadoop/hbase/wal/WALPrettyPrinter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.WALSplitter.java">org/apache/hadoop/hbase/wal/WALSplitter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>40</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.MetaTableLocator.java">org/apache/hadoop/hbase/zookeeper/MetaTableLocator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.MetricsZooKeeperSourceImpl.java">org/apache/hadoop/hbase/zookeeper/MetricsZooKeeperSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ReadOnlyZKClient.java">org/apache/hadoop/hbase/zookeeper/ReadOnlyZKClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.TestMetricsZooKeeperSourceImpl.java">org/apache/hadoop/hbase/zookeeper/TestMetricsZooKeeperSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.TestZKLeaderManager.java">org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZKConfig.java">org/apache/hadoop/hbase/zookeeper/ZKConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZKMainServer.java">org/apache/hadoop/hbase/zookeeper/ZKMainServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZKMetadata.java">org/apache/hadoop/hbase/zookeeper/ZKMetadata.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZKWatcher.java">org/apache/hadoop/hbase/zookeeper/ZKWatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZNodePaths.java">org/apache/hadoop/hbase/zookeeper/ZNodePaths.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>26</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZooKeeperHelper.java">org/apache/hadoop/hbase/zookeeper/ZooKeeperHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.metrics2.impl.JmxCacheBuster.java">org/apache/hadoop/metrics2/impl/JmxCacheBuster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.metrics2.lib.DefaultMetricsSystemHelper.java">org/apache/hadoop/metrics2/lib/DefaultMetricsSystemHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry.java">org/apache/hadoop/metrics2/lib/DynamicMetricsRegistry.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.metrics2.lib.MetricsExecutorImpl.java">org/apache/hadoop/metrics2/lib/MetricsExecutorImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.metrics2.lib.MutableHistogram.java">org/apache/hadoop/metrics2/lib/MutableHistogram.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.metrics2.lib.MutableRangeHistogram.java">org/apache/hadoop/metrics2/lib/MutableRangeHistogram.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.metrics2.lib.MutableSizeHistogram.java">org/apache/hadoop/metrics2/lib/MutableSizeHistogram.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.metrics2.lib.MutableTimeHistogram.java">org/apache/hadoop/metrics2/lib/MutableTimeHistogram.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.metrics2.util.MetricQuantile.java">org/apache/hadoop/metrics2/util/MetricQuantile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.metrics2.util.MetricSampleQuantiles.java">org/apache/hadoop/metrics2/util/MetricSampleQuantiles.java</a></td>
 <td>0</td>
 <td>0</td>
@@ -10201,72 +10206,72 @@
 <div class="section">
 <h2><a name="Rules"></a>Rules</h2>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Category</th>
 <th>Rule</th>
 <th>Violations</th>
 <th>Severity</th></tr>
-<tr class="b">
+<tr class="a">
 <td>annotation</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_annotation.html#MissingDeprecated">MissingDeprecated</a></td>
 <td>144</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td>blocks</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_blocks.html#EmptyBlock">EmptyBlock</a></td>
 <td>48</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_blocks.html#LeftCurly">LeftCurly</a></td>
 <td>197</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_blocks.html#NeedBraces">NeedBraces</a></td>
-<td>1937</td>
+<td>1936</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td>coding</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_coding.html#EmptyStatement">EmptyStatement</a></td>
 <td>32</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_coding.html#EqualsHashCode">EqualsHashCode</a></td>
 <td>5</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_coding.html#InnerAssignment">InnerAssignment</a></td>
 <td>99</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_coding.html#MissingSwitchDefault">MissingSwitchDefault</a></td>
 <td>50</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_coding.html#NoFinalizer">NoFinalizer</a></td>
 <td>1</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td>design</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_design.html#FinalClass">FinalClass</a></td>
 <td>57</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_design.html#HideUtilityClassConstructor">HideUtilityClassConstructor</a></td>
 <td>100</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_design.html#InterfaceIsType">InterfaceIsType</a></td>
 <td>1</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_design.html#VisibilityModifier">VisibilityModifier</a>
 <ul>
@@ -10274,12 +10279,12 @@
 <li>packageAllowed: <tt>&quot;true&quot;</tt></li></ul></td>
 <td>134</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td>imports</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_imports.html#AvoidStarImport">AvoidStarImport</a></td>
 <td>83</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_imports.html#ImportOrder">ImportOrder</a>
 <ul>
@@ -10287,21 +10292,21 @@
 <li>sortStaticImportsAlphabetically: <tt>&quot;true&quot;</tt></li>
 <li>groups: <tt>&quot;*,org.apache.hbase.thirdparty,org.apache.hadoop.hbase.shaded&quot;</tt></li>
 <li>option: <tt>&quot;top&quot;</tt></li></ul></td>
-<td>1223</td>
+<td>1222</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_imports.html#RedundantImport">RedundantImport</a></td>
 <td>28</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_imports.html#UnusedImports">UnusedImports</a>
 <ul>
 <li>processJavadoc: <tt>&quot;true&quot;</tt></li></ul></td>
-<td>122</td>
+<td>121</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td>indentation</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_indentation.html#Indentation">Indentation</a>
 <ul>
@@ -10312,52 +10317,52 @@
 <li>lineWrappingIndentation: <tt>&quot;2&quot;</tt></li></ul></td>
 <td>4633</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td>javadoc</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
 <ul>
 <li>offset: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>784</td>
+<td>798</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>3845</td>
+<td>3831</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td>misc</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_misc.html#ArrayTypeStyle">ArrayTypeStyle</a></td>
-<td>152</td>
+<td>151</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_misc.html#UpperEll">UpperEll</a></td>
 <td>61</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td>sizes</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_sizes.html#LineLength">LineLength</a>
 <ul>
 <li>max: <tt>&quot;100&quot;</tt></li>
 <li>ignorePattern: <tt>&quot;^package.*|^import.*|a href|href|http://|https://|ftp://|org.apache.thrift.|com.google.protobuf.|hbase.protobuf.generated&quot;</tt></li></ul></td>
-<td>1616</td>
+<td>1613</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_sizes.html#MethodLength">MethodLength</a></td>
-<td>69</td>
+<td>70</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td>whitespace</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_whitespace.html#FileTabCharacter">FileTabCharacter</a></td>
 <td>9</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_whitespace.html#MethodParamPad">MethodParamPad</a></td>
-<td>173</td>
+<td>172</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_whitespace.html#ParenPad">ParenPad</a></td>
 <td>273</td>
@@ -10367,49 +10372,49 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.AcidGuaranteesTestTool.java">org/apache/hadoop/hbase/AcidGuaranteesTestTool.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>138</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>163</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>215</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>216</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>282</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>283</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -10418,157 +10423,157 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.AsyncMetaTableAccessor.java">org/apache/hadoop/hbase/AsyncMetaTableAccessor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>62</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>109</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'lambda arguments' have incorrect indentation level 8, expected level should be 14.</td>
 <td>121</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 10, expected level should be 16.</td>
 <td>122</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 18.</td>
 <td>123</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 18.</td>
 <td>124</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 10, expected level should be 16.</td>
 <td>125</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 10, expected level should be 16.</td>
 <td>126</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block rcurly' have incorrect indentation level 8, expected level should be 14.</td>
 <td>128</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>138</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>178</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>191</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>217</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 117).</td>
 <td>233</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>244</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>275</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>288</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>394</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>396</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>404</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>412</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>457</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>462</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>480</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -10577,19 +10582,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.AuthUtil.java">org/apache/hadoop/hbase/AuthUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class AuthUtil should be declared as final.</td>
 <td>69</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -10598,25 +10603,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ByteBufferKeyOnlyKeyValue.java">org/apache/hadoop/hbase/ByteBufferKeyOnlyKeyValue.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>59</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>60</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -10625,13 +10630,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.Cell.java">org/apache/hadoop/hbase/Cell.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -10640,31 +10645,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CellBuilderFactory.java">org/apache/hadoop/hbase/CellBuilderFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>27</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>28</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -10673,85 +10678,85 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CellComparatorImpl.java">org/apache/hadoop/hbase/CellComparatorImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>66</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>67</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>69</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>75</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>78</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>105</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>106</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>138</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>139</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>176</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>177</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>264</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -10760,13 +10765,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CellScanner.java">org/apache/hadoop/hbase/CellScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -10775,409 +10780,409 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CellUtil.java">org/apache/hadoop/hbase/CellUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>143</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>156</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>157</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>376</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>377</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>378</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>389</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>390</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>391</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
 <td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
 <td>402</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>420</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>522</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>534</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>535</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>552</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>553</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>554</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>597</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>615</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>618</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>626</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>630</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>635</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>637</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>640</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>660</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>670</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>676</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>685</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>703</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>718</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>719</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>816</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>830</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>844</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>859</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>986</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1013</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1026</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1027</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1028</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1107</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1108</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1119</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1120</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1131</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1145</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1146</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1159</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1185</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1199</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1217</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1227</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1248</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1250</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1260</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1261</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1262</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1263</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1264</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1355</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1356</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1362</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1385</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1386</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1471</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -11186,31 +11191,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ChoreService.java">org/apache/hadoop/hbase/ChoreService.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>172</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>302</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>374</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -11219,31 +11224,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ClassFinder.java">org/apache/hadoop/hbase/ClassFinder.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 54 should have line break after.</td>
 <td>70</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 46 should have line break after.</td>
 <td>71</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 40 should have line break after.</td>
 <td>72</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -11252,31 +11257,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ClusterId.java">org/apache/hadoop/hbase/ClusterId.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.exceptions.DeserializationException' import.</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>28</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>60</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -11285,13 +11290,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ClusterManager.java">org/apache/hadoop/hbase/ClusterManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -11300,13 +11305,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ClusterStatus.java">org/apache/hadoop/hbase/ClusterStatus.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -11315,25 +11320,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CompoundConfiguration.java">org/apache/hadoop/hbase/CompoundConfiguration.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def modifier' have incorrect indentation level 3, expected level should be 4.</td>
 <td>79</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>183</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -11342,13 +11347,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CoordinatedStateManager.java">org/apache/hadoop/hbase/CoordinatedStateManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -11357

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>
+<span class="sourceLineNo">2391</

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    } else

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    } else if (recentlyModified) {<a name="line.2391"></a>
+<span clas

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
index 8302e28..c370eb9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
@@ -2113,3031 +2113,3033 @@
 <span class="sourceLineNo">2105</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2105"></a>
 <span class="sourceLineNo">2106</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>        } else {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>              tableName + " has dangling table state " + tableState);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // check that all tables have states<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        if (fixMeta) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          if (newState == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>        } else {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>              tableName + " has no state in meta ");<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      return;<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    for (FileStatus file : files) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      try {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      } catch (AccessDeniedException ace) {<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>          + " does not have write perms to " + file.getPath()<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        throw ace;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * Deletes region from meta table<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>  /**<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * Deletes region from meta table<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   */<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    Delete d = new Delete(metaKey);<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    meta.delete(d);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Reset the split parent region info in meta table<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    mutations.add(d);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span><a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        .setOffline(false)<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        .setSplit(false)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        .build();<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    mutations.add(p);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    meta.mutateRow(mutations);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>  }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span><a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>  /**<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   * that should not be alive.  If the region server does not support the<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   */<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    if (!rsSupportsOffline) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      LOG.warn("Using unassign region " + regionString<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          + " instead of using offline method, you should"<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          + " restart HMaster after these repairs");<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      admin.unassign(regionName, true);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    // first time we assume the rs's supports #offline.<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    try {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      LOG.info("Offlining region " + regionString);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      admin.offline(regionName);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    } catch (IOException ioe) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        LOG.warn("Using unassign region " + regionString<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            + " instead of using offline method, you should"<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            + " restart HMaster after these repairs");<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        admin.unassign(regionName, true);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        return;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      throw ioe;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  }<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span><a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    undeployRegionsForHbi(hi);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (h != null) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        undeployRegionsForHbi(h);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        //in consistency checks<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>        h.setSkipChecks(true);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      try {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        offline(rse.hri.getRegionName());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      } catch (IOException ioe) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      }<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    }<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>  /**<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   *<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   * A separate call is required to update the master in-memory region state<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>   * restart or failover may be required.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>   */<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      undeployRegions(hi);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // get assignment info and hregioninfo from meta.<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    Get get = new Get(hi.getRegionName());<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    Result r = meta.get(get);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    if (rl == null) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          " since meta does not have handle to reach it");<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      return;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      ServerName serverName = h.getServerName();<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      if (serverName == null) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>        errors.reportError("Unable to close region "<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + "have handle to reach it.");<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        continue;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>      if (hri == null) {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>            + " because hbase:meta had invalid or missing "<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>            + " qualifier value.");<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        continue;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // close the region -- close files and remove assignment<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    KeeperException, InterruptedException {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    // If we are trying to fix the errors<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    if (shouldFixAssignments()) {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      errors.print(msg);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      undeployRegions(hbi);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      setShouldRerun();<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      if (hri == null) {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        hri = hbi.metaEntry;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span><a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        if (h != null) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>          undeployRegions(h);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          //in consistency checks<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          h.setSkipChecks(true);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    }<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  /**<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * Check a single region for consistency and correct deployment.<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   */<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (hbi.isSkipChecks()) return;<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>    String descriptiveName = hbi.toString();<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    boolean deploymentMatchesMeta =<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    boolean splitParent =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    // ========== First the healthy cases =============<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      return;<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      return;<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        "tabled that is not deployed");<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      return;<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    } else if (recentlyModified) {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.warn("Region " + descriptiveName + " was recently modified -- skipping");<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return;<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    // ========== Cases where the region is not in hbase:meta =============<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // We shouldn't have record of this region at all then!<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      assert false : "Entry for region with no data";<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    } else if (!inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>      errors.reportError(ERROR_CODE.NOT_IN_META_HDFS, "Region "<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          + descriptiveName + ", key=" + key + ", not on HDFS or in hbase:meta but " +<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          "deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      if (shouldFixAssignments()) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>        undeployRegions(hbi);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span><a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      if (hbi.isMerged()) {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        // This region has already been merged, the remaining hdfs file will be<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>        // cleaned by CatalogJanitor later<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>        hbi.setSkipChecks(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        LOG.info("Region " + descriptiveName<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>            + " got merge recently, its file(s) will be cleaned by CatalogJanitor later");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        return;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      errors.reportError(ERROR_CODE.NOT_IN_META_OR_DEPLOYED, "Region "<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          + descriptiveName + " on HDFS, but not listed in hbase:meta " +<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          "or deployed on any region server");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      // restore region consistency of an adopted orphan<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      if (shouldFixMeta()) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.error("Region " + hbi.getHdfsHRI() + " could have been repaired"<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>              +  " in table integrity repair phase if -fixHdfsOrphans was" +<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>              " used.");<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          return;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        }<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span><a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        RegionInfo hri = hbi.getHdfsHRI();<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        TableInfo tableInfo = tablesInfo.get(hri.getTable());<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (RegionInfo region : tableInfo.getRegionsFromMeta()) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          if (Bytes.compareTo(region.getStartKey(), hri.getStartKey()) &lt;= 0<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>              &amp;&amp; (region.getEndKey().length == 0 || Bytes.compareTo(region.getEndKey(),<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>                hri.getEndKey()) &gt;= 0)<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>              &amp;&amp; Bytes.compareTo(region.getStartKey(), hri.getEndKey()) &lt;= 0) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            if(region.isSplit() || region.isOffline()) continue;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            Path regionDir = hbi.getHdfsRegionDir();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>            FileSystem fs = regionDir.getFileSystem(getConf());<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(fs, regionDir);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>            for (Path familyDir : familyDirs) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>              List&lt;Path&gt; referenceFilePaths = FSUtils.getReferenceFilePaths(fs, familyDir);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>              for (Path referenceFilePath : referenceFilePaths) {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>                Path parentRegionDir =<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>                    StoreFileInfo.getReferredToFile(referenceFilePath).getParent().getParent();<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>                if (parentRegionDir.toString().endsWith(region.getEncodedName())) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>                  LOG.warn(hri + " start and stop keys are in the range of " + region<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>                      + ". The region might not be cleaned up from hdfs when region " + region<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>                      + " split failed. Hence deleting from hdfs.");<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>                  HRegionFileSystem.deleteRegionFromFileSystem(getConf(), fs,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>                    regionDir.getParent(), hri);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>                  return;<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>                }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>              }<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>            }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>        }<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>        LOG.info("Patching hbase:meta with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span><a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>        tryAssignmentRepair(hbi, "Trying to reassign region...");<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    } else if (!inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed) {<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>      errors.reportError(ERROR_CODE.NOT_IN_META, "Region " + descriptiveName<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>          + " not in META, but deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      debugLsr(hbi.getHdfsRegionDir());<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>        // for replicas, this means that we should undeploy the region (we would have<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        // gone over the primaries and fixed meta holes in first phase under<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        // checkAndFixConsistency; we shouldn't get the condition !inMeta at<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        // this stage unless unwanted replica)<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (shouldFixAssignments()) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          undeployRegionsForHbi(hbi);<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>        }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      if (shouldFixMeta() &amp;&amp; hbi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        if (!hbi.isHdfsRegioninfoPresent()) {<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>          LOG.error("This should have been repaired in table integrity repair phase");<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>          return;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>        LOG.info("Patching hbase:meta with with .regioninfo: " + hbi.getHdfsHRI());<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        int numReplicas = admin.getTableDescriptor(hbi.getTableName()).getRegionReplication();<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>        HBaseFsckRepair.fixMetaHoleOnlineAndAddReplicas(getConf(), hbi.getHdfsHRI(),<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>            admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>              .getLiveServerMetrics().keySet(), numReplicas);<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>        tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      }<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span><a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ========== Cases where the region is in hbase:meta =============<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; splitParent) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      // check whether this is an actual error, or just transient state where parent<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      // is not cleaned<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (hbi.metaEntry.splitA != null &amp;&amp; hbi.metaEntry.splitB != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // check that split daughters are there<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        HbckInfo infoA = this.regionInfoMap.get(hbi.metaEntry.splitA.getEncodedName());<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        HbckInfo infoB = this.regionInfoMap.get(hbi.metaEntry.splitB.getEncodedName());<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (infoA != null &amp;&amp; infoB != null) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // we already processed or will process daughters. Move on, nothing to see here.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          hbi.setSkipChecks(true);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>          return;<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      }<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span><a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      // For Replica region, we need to do a similar check. If replica is not split successfully,<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      // error is going to be reported against primary daughter region.<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>            + "and not deployed on any region server. This may be transient.");<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>        hbi.setSkipChecks(true);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        return;<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span><a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>          + descriptiveName + " is a split parent in META, in HDFS, "<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          + "and not deployed on any region server. This could be transient, "<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>          + "consider to run the catalog janitor first!");<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      if (shouldFixSplitParents()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        setShouldRerun();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        resetSplitParent(hbi);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; !isDeployed) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS_OR_DEPLOYED, "Region "<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>          + descriptiveName + " found in META, but not in HDFS "<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          + "or deployed on any region server.");<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      if (shouldFixMeta()) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        deleteMetaRegion(hbi);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    } else if (inMeta &amp;&amp; !inHdfs &amp;&amp; isDeployed) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      errors.reportError(ERROR_CODE.NOT_IN_HDFS, "Region " + descriptiveName<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          + " found in META, but not in HDFS, " +<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          "and deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      // We treat HDFS as ground truth.  Any information in meta is transient<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      // and equivalent data can be regenerated.  So, lets unassign and remove<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      // these problems from META.<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      if (shouldFixAssignments()) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        errors.print("Trying to fix unassigned region...");<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>        undeployRegions(hbi);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      if (shouldFixMeta()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        // wait for it to complete<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        deleteMetaRegion(hbi);<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      }<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !isDeployed &amp;&amp; shouldBeDeployed) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      errors.reportError(ERROR_CODE.NOT_DEPLOYED, "Region " + descriptiveName<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          + " not deployed on any region server.");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      tryAssignmentRepair(hbi, "Trying to fix unassigned region...");<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !shouldBeDeployed) {<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      errors.reportError(ERROR_CODE.SHOULD_NOT_BE_DEPLOYED,<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>          "Region " + descriptiveName + " should not be deployed according " +<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          "to META, but is deployed on " + Joiner.on(", ").join(hbi.deployedOn));<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (shouldFixAssignments()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        errors.print("Trying to close the region " + descriptiveName);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        setShouldRerun();<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isMultiplyDeployed) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      errors.reportError(ERROR_CODE.MULTI_DEPLOYED, "Region " + descriptiveName<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          + " is listed in hbase:meta on region server " + hbi.metaEntry.regionServer<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          + " but is multiply assigned to region servers " +<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          Joiner.on(", ").join(hbi.deployedOn));<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      // If we are trying to fix the errors<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      if (shouldFixAssignments()) {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        errors.print("Trying to fix assignment error...");<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>        setShouldRerun();<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; !deploymentMatchesMeta) {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      errors.reportError(ERROR_CODE.SERVER_DOES_NOT_MATCH_META, "Region "<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          + descriptiveName + " listed in hbase:meta on region server " +<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>          hbi.metaEntry.regionServer + " but found on region server " +<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          hbi.deployedOn.get(0));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>      // If we are trying to fix the errors<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      if (shouldFixAssignments()) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        errors.print("Trying to fix assignment error...");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        setShouldRerun();<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        HBaseFsckRepair.fixMultiAssignment(connection, hbi.metaEntry, hbi.deployedOn);<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        HBaseFsckRepair.waitUntilAssigned(admin, hbi.getHdfsHRI());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    } else {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      errors.reportError(ERROR_CODE.UNKNOWN, "Region " + descriptiveName +<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          " is in an unforeseen state:" +<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          " inMeta=" + inMeta +<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>          " inHdfs=" + inHdfs +<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          " isDeployed=" + isDeployed +<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>          " isMultiplyDeployed=" + isMultiplyDeployed +<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          " deploymentMatchesMeta=" + deploymentMatchesMeta +<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          " shouldBeDeployed=" + shouldBeDeployed);<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  /**<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>   * Checks tables integrity. Goes over all regions and scans the tables.<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>   * Collects all the pieces for each table and checks if there are missing,<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>   * repeated or overlapping ones.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>   * @throws IOException<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>   */<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  SortedMap&lt;TableName, TableInfo&gt; checkIntegrity() throws IOException {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    tablesInfo = new TreeMap&lt;&gt;();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    LOG.debug("There are " + regionInfoMap.size() + " region info entries");<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    for (HbckInfo hbi : regionInfoMap.values()) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      // Check only valid, working regions<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      if (hbi.metaEntry == null) {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        // this assumes that consistency check has run loadMetaEntry<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        Path p = hbi.getHdfsRegionDir();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>        if (p == null) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>          errors.report("No regioninfo in Meta or HDFS. " + hbi);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span><a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        // TODO test.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        continue;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      if (hbi.metaEntry.regionServer == null) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        errors.detail("Skipping region because no region server: " + hbi);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>        continue;<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      if (hbi.metaEntry.isOffline()) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        errors.detail("Skipping region because it is offline: " + hbi);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>      if (hbi.containsOnlyHdfsEdits()) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        errors.detail("Skipping region because it only contains edits" + hbi);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>        continue;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>      }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span><a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      // Missing regionDir or over-deployment is checked elsewhere. Include<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>      // these cases in modTInfo, so we can evaluate those regions as part of<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      // the region chain in META<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      //if (hbi.foundRegionDir == null) continue;<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      //if (hbi.deployedOn.size() != 1) continue;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (hbi.deployedOn.isEmpty()) continue;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      // We should be safe here<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>      TableName tableName = hbi.metaEntry.getTable();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      TableInfo modTInfo = tablesInfo.get(tableName);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (modTInfo == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        modTInfo = new TableInfo(tableName);<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (ServerName server : hbi.deployedOn) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        modTInfo.addServer(server);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span><a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>      if (!hbi.isSkipChecks()) {<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        modTInfo.addRegionInfo(hbi);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      tablesInfo.put(tableName, modTInfo);<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    loadTableInfosForTablesWithNoRegion();<a name="line.2651"></a>
+<span class="sourceLineNo">2108</span>        } else if (!checkMetaOnly) {<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          // dangling table state in meta if checkMetaOnly is false. If checkMetaOnly is<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          // true, tableInfo will be null as tablesInfo are not polulated for all tables from hdfs<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>              tableName + " has dangling table state " + tableState);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      }<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    // check that all tables have states<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>        if (fixMeta) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          if (newState == null) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>          }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        } else {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>              tableName + " has no state in meta ");<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      return;<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span><a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    for (FileStatus file : files) {<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      } catch (AccessDeniedException ace) {<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>          + " does not have write perms to " + file.getPath()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        throw ace;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Deletes region from meta table<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   */<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>  /**<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * Deletes region from meta table<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   */<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    Delete d = new Delete(metaKey);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    meta.delete(d);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   * Reset the split parent region info in meta table<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   */<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    mutations.add(d);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .setOffline(false)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        .setSplit(false)<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>        .build();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri, EnvironmentEdgeManager.currentTime());<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    mutations.add(p);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    meta.mutateRow(mutations);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>  /**<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   * that should not be alive.  If the region server does not support the<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    if (!rsSupportsOffline) {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      LOG.warn("Using unassign region " + regionString<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>          + " instead of using offline method, you should"<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>          + " restart HMaster after these repairs");<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      admin.unassign(regionName, true);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      return;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    // first time we assume the rs's supports #offline.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      LOG.info("Offlining region " + regionString);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      admin.offline(regionName);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    } catch (IOException ioe) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        LOG.warn("Using unassign region " + regionString<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            + " instead of using offline method, you should"<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            + " restart HMaster after these repairs");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        admin.unassign(regionName, true);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        return;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      }<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      throw ioe;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span><a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>    undeployRegionsForHbi(hi);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      return;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      if (h != null) {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        undeployRegionsForHbi(h);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        //in consistency checks<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>        h.setSkipChecks(true);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      try {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        offline(rse.hri.getRegionName());<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      } catch (IOException ioe) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   *<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   * A separate call is required to update the master in-memory region state<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>   * restart or failover may be required.<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      undeployRegions(hi);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      return;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // get assignment info and hregioninfo from meta.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    Get get = new Get(hi.getRegionName());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    Result r = meta.get(get);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    if (rl == null) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          " since meta does not have handle to reach it");<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>      return;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      ServerName serverName = h.getServerName();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (serverName == null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        errors.reportError("Unable to close region "<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            + "have handle to reach it.");<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        continue;<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      }<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      if (hri == null) {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>            + " because hbase:meta had invalid or missing "<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>            + " qualifier value.");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        continue;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      // close the region -- close files and remove assignment<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span><a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>    KeeperException, InterruptedException {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>    // If we are trying to fix the errors<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (shouldFixAssignments()) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      errors.print(msg);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      undeployRegions(hbi);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      setShouldRerun();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      if (hri == null) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        hri = hbi.metaEntry;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span><a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        if (h != null) {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>          undeployRegions(h);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          //in consistency checks<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>          h.setSkipChecks(true);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   * Check a single region for consistency and correct deployment.<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>   */<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>    if (hbi.isSkipChecks()) return;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>    String descriptiveName = hbi.toString();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir() != null;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    boolean hasMetaAssignment = inMeta &amp;&amp; hbi.metaEntry.regionServer != null;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    boolean isDeployed = !hbi.deployedOn.isEmpty();<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    boolean isMultiplyDeployed = hbi.deployedOn.size() &gt; 1;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    boolean deploymentMatchesMeta =<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      hasMetaAssignment &amp;&amp; isDeployed &amp;&amp; !isMultiplyDeployed &amp;&amp;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0));<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    boolean splitParent =<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        inMeta &amp;&amp; hbi.metaEntry.isSplit() &amp;&amp; hbi.metaEntry.isOffline();<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    boolean shouldBeDeployed = inMeta &amp;&amp; !isTableDisabled(hbi.metaEntry.getTable());<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    boolean recentlyModified = inHdfs &amp;&amp;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      hbi.getModTime() + timelag &gt; EnvironmentEdgeManager.currentTime();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span><a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    // ========== First the healthy cases =============<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    if (hbi.containsOnlyHdfsEdits()) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      return;<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    if (inMeta &amp;&amp; inHdfs &amp;&amp; isDeployed &amp;&amp; deploymentMatchesMeta &amp;&amp; shouldBeDeployed) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      return;<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    } else if (inMeta &amp;&amp; inHdfs &amp;&amp; !shouldBeDeployed &amp;&amp; !isDeployed) {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>      LOG.info("Region " + descriptiveName + " is in META, and in a disabled " +<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        "tabled that is not deployed");<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      return;<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    } else if (recentlyModified) {<

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index cedb178..3fecdff 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -26,7 +26,7 @@ under the License.
     <copyright>&#169;2007 - 2018 The Apache Software Foundation</copyright>
     <item>
       <title>File: 3601,
-             Errors: 15876,
+             Errors: 15869,
              Warnings: 0,
              Infos: 0
       </title>
@@ -601,7 +601,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  6
+                  4
                 </td>
               </tr>
                           <tr>
@@ -5263,7 +5263,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  9
+                  6
                 </td>
               </tr>
                           <tr>
@@ -10961,7 +10961,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  10
+                  9
                 </td>
               </tr>
                           <tr>
@@ -21755,7 +21755,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  6
+                  5
                 </td>
               </tr>
                           <tr>
@@ -34901,7 +34901,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -35531,7 +35531,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  3
+                  1
                 </td>
               </tr>
                           <tr>
@@ -38205,7 +38205,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  2
                 </td>
               </tr>
                           <tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 1e5db94..a0bacd3 100644
--- a/coc.html
+++ b/coc.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180411" />
+    <meta name="Date-Revision-yyyymmdd" content="20180412" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -375,7 +375,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index d83a829..737aff5 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180411" />
+    <meta name="Date-Revision-yyyymmdd" content="20180412" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -440,7 +440,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 3f48b95..01b64bc 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180411" />
+    <meta name="Date-Revision-yyyymmdd" content="20180412" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -1105,7 +1105,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index c9c7fcf..dc32122 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180411" />
+    <meta name="Date-Revision-yyyymmdd" content="20180412" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -313,7 +313,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 179fa26..ade5a79 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180411" />
+    <meta name="Date-Revision-yyyymmdd" content="20180412" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -969,7 +969,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index bfc3067..525eae6 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3768,21 +3768,21 @@
 <!--   -->
 </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>"Wed Apr 11 14:41:28 UTC 2018"</code></td>
+<td class="colLast"><code>"Thu Apr 12 14:42:18 UTC 2018"</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>"37e5b0b1b790fef25a544c282c6556e009269a0e"</code></td>
+<td class="colLast"><code>"2912c953551bedbfbf30c32c156ed7bb187d54c3"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="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#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"98835c01785bb7b3d1dc35f1f6ab3cd1"</code></td>
+<td class="colLast"><code>"7478585c09b5dfa7052f49de0f17318b"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index f9d79b5..5f2858a 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -10248,8 +10248,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/ScannerContext.html#checkAnyLimitReached-org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope-">checkAnyLimitReached(ScannerContext.LimitScope)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/thrift2/ThriftServer.html#checkArguments-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">checkArguments(CommandLine)</a></span> - Method in class org.apache.hadoop.hbase.thrift2.<a href="org/apache/hadoop/hbase/thrift2/ThriftServer.html" title="class in org.apache.hadoop.hbase.thrift2">ThriftServer</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/IndividualBytesFieldCell.html#checkArrayBounds-byte:A-int-int-">checkArrayBounds(byte[], int, int)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/IndividualBytesFieldCell.html" title="class in org.apache.hadoop.hbase">IndividualBytesFieldCell</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/visibility/VisibilityController.html#checkAuths">checkAuths</a></span> - Variable in class org.apache.hadoop.hbase.security.visibility.<a href="org/apache/hadoop/hbase/security/visibility/VisibilityController.html" title="class in org.apache.hadoop.hbase.security.visibility">VisibilityController</a></dt>
@@ -12352,6 +12350,20 @@
 <dd>
 <div class="block">Constructor</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Admin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema(TableName, TableName, boolean)</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></dt>
+<dd>
+<div class="block">Create a new table by cloning the existent table schema.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncAdmin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema(TableName, TableName, boolean)</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncAdmin.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdmin</a></dt>
+<dd>
+<div class="block">Create a new table by cloning the existent table schema.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema(TableName, TableName, boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html" title="class in org.apache.hadoop.hbase.client">AsyncHBaseAdmin</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/HBaseAdmin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema(TableName, TableName, boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/HBaseAdmin.html" title="class in org.apache.hadoop.hbase.client">HBaseAdmin</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema(TableName, TableName, boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellUtil.html#cloneTags-org.apache.hadoop.hbase.Cell-">cloneTags(Cell)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellUtil.html" title="class in org.apache.hadoop.hbase">CellUtil</a></dt>
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>
@@ -62938,6 +62950,8 @@
 <div class="block">Indicates to the client whether this task is monitoring a currently active 
  RPC call.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/RSGroupTableAccessor.html#isRSGroupsEnabled-org.apache.hadoop.hbase.client.Connection-">isRSGroupsEnabled(Connection)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/RSGroupTableAccessor.html" title="class in org.apache.hadoop.hbase">RSGroupTableAccessor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/Procedure.html#isRunnable--">isRunnable()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isRunning--">isRunning()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a></dt>
@@ -65883,7 +65897,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#listTableDescriptors-java.util.regex.Pattern-boolean-">listTableDescriptors(Pattern, boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin</a></dt>
 <dd>
-<div class="block"><code>#listTables(boolean)</code></div>
+<div class="block"><a href="org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#listTableDescriptors-boolean-"><code>RawAsyncHBaseAdmin.listTableDescriptors(boolean)</code></a></div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/HMaster.html#listTableDescriptors-java.lang.String-java.lang.String-java.util.List-boolean-">listTableDescriptors(String, String, List&lt;TableName&gt;, boolean)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a></dt>
 <dd>
@@ -83492,6 +83506,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapred/RowCounter.html#printUsage--">printUsage()</a></span> - Static method in class org.apache.hadoop.hbase.mapred.<a href="org/apache/hadoop/hbase/mapred/RowCounter.html" title="class in org.apache.hadoop.hbase.mapred">RowCounter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/CellCounter.html#printUsage-int-">printUsage(int)</a></span> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/CellCounter.html" title="class in org.apache.hadoop.hbase.mapreduce">CellCounter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/CopyTable.html#printUsage-java.lang.String-">printUsage(String)</a></span> - Static method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/CopyTable.html" title="class in org.apache.hadoop.hbase.mapreduce">CopyTable</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/HashTable.html#printUsage-java.lang.String-">printUsage(String)</a></span> - Static method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/HashTable.html" title="class in org.apache.hadoop.hbase.mapreduce">HashTable</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/RSGroupTableAccessor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/RSGroupTableAccessor.html b/devapidocs/org/apache/hadoop/hbase/RSGroupTableAccessor.html
index 76afb14..c9f366e 100644
--- a/devapidocs/org/apache/hadoop/hbase/RSGroupTableAccessor.html
+++ b/devapidocs/org/apache/hadoop/hbase/RSGroupTableAccessor.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":9};
+var methods = {"i0":9,"i1":9,"i2":9,"i3":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -190,6 +190,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colFirst"><code>private static <a href="../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/RSGroupTableAccessor.html#getRSGroupInfo-org.apache.hadoop.hbase.client.Result-">getRSGroupInfo</a></span>(<a href="../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/RSGroupTableAccessor.html#isRSGroupsEnabled-org.apache.hadoop.hbase.client.Connection-">isRSGroupsEnabled</a></span>(<a href="../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection)</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -253,7 +257,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RSGroupTableAccessor</h4>
-<pre>private&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/RSGroupTableAccessor.html#line.80">RSGroupTableAccessor</a>()</pre>
+<pre>private&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/RSGroupTableAccessor.html#line.48">RSGroupTableAccessor</a>()</pre>
 </li>
 </ul>
 </li>
@@ -264,13 +268,27 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="isRSGroupsEnabled-org.apache.hadoop.hbase.client.Connection-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isRSGroupsEnabled</h4>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/RSGroupTableAccessor.html#line.51">isRSGroupsEnabled</a>(<a href="../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection)
+                                 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>
+<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>
+</dl>
+</li>
+</ul>
 <a name="getAllRSGroupInfo-org.apache.hadoop.hbase.client.Connection-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllRSGroupInfo</h4>
-<pre>public static&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/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/RSGroupTableAccessor.html#line.48">getAllRSGroupInfo</a>(<a href="../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection)
+<pre>public static&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/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/RSGroupTableAccessor.html#line.55">getAllRSGroupInfo</a>(<a href="../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection)
                                            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>
@@ -284,7 +302,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSGroupInfo</h4>
-<pre>private static&nbsp;<a href="../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/RSGroupTableAccessor.html#line.62">getRSGroupInfo</a>(<a href="../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result)
+<pre>private static&nbsp;<a href="../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/RSGroupTableAccessor.html#line.69">getRSGroupInfo</a>(<a href="../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result)
                                    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>
@@ -298,7 +316,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getRSGroupInfo</h4>
-<pre>public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/RSGroupTableAccessor.html#line.72">getRSGroupInfo</a>(<a href="../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<pre>public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/RSGroupTableAccessor.html#line.79">getRSGroupInfo</a>(<a href="../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                                          byte[]&nbsp;rsGroupName)
                                   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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index b385d9a..52c7f71 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -167,9 +167,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" title="class or interface in java.io">Serializable</a>)
 <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/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.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 </ul>
 </li>


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html b/devapidocs/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html
index 16f1a0e..6b3b8d1 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.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,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":10,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":10,"i97":10,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i
 109":10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":10,"i122":10,"i123":10,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":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,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":10,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":10,"i97":10,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i
 109":10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":10,"i122":10,"i123":10,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":10,"i130":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -273,46 +273,54 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 </tr>
 <tr id="i13" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">cloneTableSchema</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;newTableName,
+                boolean&nbsp;preserveSplits)</code>
+<div class="block">Create a new table by cloning the existent table schema.</div>
+</td>
+</tr>
+<tr id="i14" class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        byte[]&nbsp;columnFamily,
        <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#compact-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">compact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
        <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#compactRegion-byte:A-">compactRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Compact an individual region.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#compactRegion-byte:A-byte:A-">compactRegion</a></span>(byte[]&nbsp;regionName,
              byte[]&nbsp;columnFamily)</code>
 <div class="block">Compact a column family within a region.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#compactRegionServer-org.apache.hadoop.hbase.ServerName-">compactRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Compact all regions on the region server.</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>&lt;S,R&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;R&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#coprocessorService-java.util.function.Function-org.apache.hadoop.hbase.client.ServiceCaller-">coprocessorService</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java.util.function">Function</a>&lt;com.google.protobuf.RpcChannel,S&gt;&nbsp;stubMaker,
                   <a href="../../../../../org/apache/hadoop/hbase/client/ServiceCaller.html" title="interface in org.apache.hadoop.hbase.client">ServiceCaller</a>&lt;S,R&gt;&nbsp;callable)</code>
 <div class="block">Execute the given coprocessor call on the master.</div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>&lt;S,R&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;R&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#coprocessorService-java.util.function.Function-org.apache.hadoop.hbase.client.ServiceCaller-org.apache.hadoop.hbase.ServerName-">coprocessorService</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java.util.function">Function</a>&lt;com.google.protobuf.RpcChannel,S&gt;&nbsp;stubMaker,
                   <a href="../../../../../org/apache/hadoop/hbase/client/ServiceCaller.html" title="interface in org.apache.hadoop.hbase.client">ServiceCaller</a>&lt;S,R&gt;&nbsp;callable,
@@ -320,26 +328,26 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <div class="block">Execute the given coprocessor call on the given region server.</div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#createNamespace-org.apache.hadoop.hbase.NamespaceDescriptor-">createNamespace</a></span>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;descriptor)</code>
 <div class="block">Create a new namespace.</div>
 </td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</code>
 <div class="block">Creates a new table.</div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-byte:A:A-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
            byte[][]&nbsp;splitKeys)</code>
 <div class="block">Creates a new table with an initial set of empty regions defined by the specified split keys.</div>
 </td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-byte:A-byte:A-int-">createTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
            byte[]&nbsp;startKey,
@@ -348,7 +356,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <div class="block">Creates a new table with the specified number of regions.</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#decommissionRegionServers-java.util.List-boolean-">decommissionRegionServers</a></span>(<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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers,
                          boolean&nbsp;offload)</code>
@@ -356,50 +364,50 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
  assigned to them.</div>
 </td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#deleteColumnFamily-org.apache.hadoop.hbase.TableName-byte:A-">deleteColumnFamily</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   byte[]&nbsp;columnFamily)</code>
 <div class="block">Delete a column family from a table.</div>
 </td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#deleteNamespace-java.lang.String-">deleteNamespace</a></span>(<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;name)</code>
 <div class="block">Delete an existing namespace.</div>
 </td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#deleteSnapshot-java.lang.String-">deleteSnapshot</a></span>(<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;snapshotName)</code>
 <div class="block">Delete an existing snapshot.</div>
 </td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#deleteSnapshots--">deleteSnapshots</a></span>()</code>
 <div class="block">Delete all existing snapshots.</div>
 </td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#deleteSnapshots-java.util.regex.Pattern-">deleteSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">Delete existing snapshots whose names match the pattern passed.</div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#deleteTable-org.apache.hadoop.hbase.TableName-">deleteTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Deletes a table.</div>
 </td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#deleteTableSnapshots-java.util.regex.Pattern-">deleteTableSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern)</code>
 <div class="block">Delete all existing snapshots matching the given table name pattern.</div>
 </td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#deleteTableSnapshots-java.util.regex.Pattern-java.util.regex.Pattern-">deleteTableSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;snapshotNamePattern)</code>
@@ -407,43 +415,43 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
  name regular expression.</div>
 </td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#disableReplicationPeer-java.lang.String-">disableReplicationPeer</a></span>(<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;peerId)</code>
 <div class="block">Stop the replication stream to the specified peer</div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#disableTable-org.apache.hadoop.hbase.TableName-">disableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable a table.</div>
 </td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#disableTableReplication-org.apache.hadoop.hbase.TableName-">disableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable a table's replication switch.</div>
 </td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#enableReplicationPeer-java.lang.String-">enableReplicationPeer</a></span>(<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;peerId)</code>
 <div class="block">Restart the replication stream to the specified peer</div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#enableTable-org.apache.hadoop.hbase.TableName-">enableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table.</div>
 </td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#enableTableReplication-org.apache.hadoop.hbase.TableName-">enableTableReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table's replication switch.</div>
 </td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#execProcedure-java.lang.String-java.lang.String-java.util.Map-">execProcedure</a></span>(<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;signature,
              <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;instance,
@@ -451,7 +459,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <div class="block">Execute a distributed procedure on a cluster.</div>
 </td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;byte[]&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#execProcedureWithReturn-java.lang.String-java.lang.String-java.util.Map-">execProcedureWithReturn</a></span>(<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;signature,
                        <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;instance,
@@ -459,159 +467,159 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <div class="block">Execute a distributed procedure on a cluster.</div>
 </td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#flush-org.apache.hadoop.hbase.TableName-">flush</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Flush a table.</div>
 </td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#flushRegion-byte:A-">flushRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Flush an individual region.</div>
 </td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#flushRegionServer-org.apache.hadoop.hbase.ServerName-">flushRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</code>
 <div class="block">Flush all region on the region server.</div>
 </td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getClusterMetrics--">getClusterMetrics</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getClusterMetrics-java.util.EnumSet-">getClusterMetrics</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase">ClusterMetrics.Option</a>&gt;&nbsp;options)</code>&nbsp;</td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getCompactionState-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">getCompactionState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getCompactionStateForRegion-byte:A-">getCompactionStateForRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Get the current compaction state of region.</div>
 </td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getDescriptor-org.apache.hadoop.hbase.TableName-">getDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Method for getting the tableDescriptor</div>
 </td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getLastMajorCompactionTimestamp-org.apache.hadoop.hbase.TableName-">getLastMajorCompactionTimestamp</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the timestamp of the last major compaction for the passed table.</div>
 </td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getLastMajorCompactionTimestampForRegion-byte:A-">getLastMajorCompactionTimestampForRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Get the timestamp of the last major compaction for the passed region.</div>
 </td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getLocks--">getLocks</a></span>()</code>
 <div class="block">List locks.</div>
 </td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getNamespaceDescriptor-java.lang.String-">getNamespaceDescriptor</a></span>(<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;name)</code>
 <div class="block">Get a namespace descriptor by name</div>
 </td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getProcedures--">getProcedures</a></span>()</code>
 <div class="block">List procedures</div>
 </td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/quotas/QuotaSettings.html" title="class in org.apache.hadoop.hbase.quotas">QuotaSettings</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getQuota-org.apache.hadoop.hbase.quotas.QuotaFilter-">getQuota</a></span>(<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaFilter.html" title="class in org.apache.hadoop.hbase.quotas">QuotaFilter</a>&nbsp;filter)</code>
 <div class="block">List the quotas based on the filter.</div>
 </td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getRegionMetrics-org.apache.hadoop.hbase.ServerName-">getRegionMetrics</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Get a list of <a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase"><code>RegionMetrics</code></a> of all regions hosted on a region seerver.</div>
 </td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getRegionMetrics-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.TableName-">getRegionMetrics</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                 <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get a list of <a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase"><code>RegionMetrics</code></a> of all regions hosted on a region seerver for a table.</div>
 </td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getRegions-org.apache.hadoop.hbase.ServerName-">getRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Get all the online regions on a region server.</div>
 </td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getRegions-org.apache.hadoop.hbase.TableName-">getRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the regions of a given table.</div>
 </td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getReplicationPeerConfig-java.lang.String-">getReplicationPeerConfig</a></span>(<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;peerId)</code>
 <div class="block">Returns the configured ReplicationPeerConfig for the specified peer</div>
 </td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i61" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/security/SecurityCapability.html" title="enum in org.apache.hadoop.hbase.client.security">SecurityCapability</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#getSecurityCapabilities--">getSecurityCapabilities</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i62" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#isBalancerEnabled--">isBalancerEnabled</a></span>()</code>
 <div class="block">Query the current state of the balancer.</div>
 </td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#isCatalogJanitorEnabled--">isCatalogJanitorEnabled</a></span>()</code>
 <div class="block">Query on the catalog janitor state.</div>
 </td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#isCleanerChoreEnabled--">isCleanerChoreEnabled</a></span>()</code>
 <div class="block">Query the current state of the cleaner chore.</div>
 </td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#isMasterInMaintenanceMode--">isMasterInMaintenanceMode</a></span>()</code>
 <div class="block">Check whether master is in maintenance mode</div>
 </td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#isMergeEnabled--">isMergeEnabled</a></span>()</code>
 <div class="block">Query the current state of the Merge switch.</div>
 </td>
 </tr>
-<tr id="i66" class="altColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#isNormalizerEnabled--">isNormalizerEnabled</a></span>()</code>
 <div class="block">Query the current state of the region normalizer</div>
 </td>
 </tr>
-<tr id="i67" class="rowColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#isProcedureFinished-java.lang.String-java.lang.String-java.util.Map-">isProcedureFinished</a></span>(<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;signature,
                    <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;instance,
@@ -619,23 +627,23 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <div class="block">Check the current state of the specified procedure.</div>
 </td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#isSnapshotFinished-org.apache.hadoop.hbase.client.SnapshotDescription-">isSnapshotFinished</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&nbsp;snapshot)</code>
 <div class="block">Check the current state of the passed snapshot.</div>
 </td>
 </tr>
-<tr id="i69" class="rowColor">
+<tr id="i70" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#isSplitEnabled--">isSplitEnabled</a></span>()</code>
 <div class="block">Query the current state of the Split switch.</div>
 </td>
 </tr>
-<tr id="i70" class="altColor">
+<tr id="i71" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#isTableAvailable-org.apache.hadoop.hbase.TableName-">isTableAvailable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i72" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#isTableAvailable-org.apache.hadoop.hbase.TableName-byte:A:A-">isTableAvailable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 byte[][]&nbsp;splitKeys)</code>
@@ -643,107 +651,107 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
  which was used while creating the given table.</div>
 </td>
 </tr>
-<tr id="i72" class="altColor">
+<tr id="i73" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#isTableDisabled-org.apache.hadoop.hbase.TableName-">isTableDisabled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i73" class="rowColor">
+<tr id="i74" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#isTableEnabled-org.apache.hadoop.hbase.TableName-">isTableEnabled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i74" class="altColor">
+<tr id="i75" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#listDeadServers--">listDeadServers</a></span>()</code>
 <div class="block">List all the dead region servers.</div>
 </td>
 </tr>
-<tr id="i75" class="rowColor">
+<tr id="i76" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#listDecommissionedRegionServers--">listDecommissionedRegionServers</a></span>()</code>
 <div class="block">List region servers marked as decommissioned, which can not be assigned regions.</div>
 </td>
 </tr>
-<tr id="i76" class="altColor">
+<tr id="i77" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#listNamespaceDescriptors--">listNamespaceDescriptors</a></span>()</code>
 <div class="block">List available namespace descriptors</div>
 </td>
 </tr>
-<tr id="i77" class="rowColor">
+<tr id="i78" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/replication/TableCFs.html" title="class in org.apache.hadoop.hbase.client.replication">TableCFs</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#listReplicatedTableCFs--">listReplicatedTableCFs</a></span>()</code>
 <div class="block">Find all table and column families that are replicated from this cluster</div>
 </td>
 </tr>
-<tr id="i78" class="altColor">
+<tr id="i79" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#listReplicationPeers--">listReplicationPeers</a></span>()</code>
 <div class="block">Return a list of replication peers.</div>
 </td>
 </tr>
-<tr id="i79" class="rowColor">
+<tr id="i80" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#listReplicationPeers-java.util.regex.Pattern-">listReplicationPeers</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">Return a list of replication peers.</div>
 </td>
 </tr>
-<tr id="i80" class="altColor">
+<tr id="i81" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#listSnapshots--">listSnapshots</a></span>()</code>
 <div class="block">List completed snapshots.</div>
 </td>
 </tr>
-<tr id="i81" class="rowColor">
+<tr id="i82" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#listSnapshots-java.util.regex.Pattern-">listSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</code>
 <div class="block">List all the completed snapshots matching the given pattern.</div>
 </td>
 </tr>
-<tr id="i82" class="altColor">
+<tr id="i83" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#listTableDescriptors-boolean-">listTableDescriptors</a></span>(boolean&nbsp;includeSysTables)</code>
 <div class="block">List all the tables.</div>
 </td>
 </tr>
-<tr id="i83" class="rowColor">
+<tr id="i84" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#listTableDescriptors-java.util.regex.Pattern-boolean-">listTableDescriptors</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern,
                     boolean&nbsp;includeSysTables)</code>
 <div class="block">List all the tables matching the given pattern.</div>
 </td>
 </tr>
-<tr id="i84" class="altColor">
+<tr id="i85" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#listTableDescriptorsByNamespace-java.lang.String-">listTableDescriptorsByNamespace</a></span>(<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;name)</code>
 <div class="block">Get list of table descriptors by namespace.</div>
 </td>
 </tr>
-<tr id="i85" class="rowColor">
+<tr id="i86" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#listTableNames-boolean-">listTableNames</a></span>(boolean&nbsp;includeSysTables)</code>
 <div class="block">List all of the names of tables.</div>
 </td>
 </tr>
-<tr id="i86" class="altColor">
+<tr id="i87" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#listTableNames-java.util.regex.Pattern-boolean-">listTableNames</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern,
               boolean&nbsp;includeSysTables)</code>
 <div class="block">List all of the names of userspace tables.</div>
 </td>
 </tr>
-<tr id="i87" class="rowColor">
+<tr id="i88" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#listTableNamesByNamespace-java.lang.String-">listTableNamesByNamespace</a></span>(<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;name)</code>
 <div class="block">Get list of table names by namespace.</div>
 </td>
 </tr>
-<tr id="i88" class="altColor">
+<tr id="i89" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#listTableSnapshots-java.util.regex.Pattern-">listTableSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern)</code>
 <div class="block">List all the completed snapshots matching the given table name pattern.</div>
 </td>
 </tr>
-<tr id="i89" class="rowColor">
+<tr id="i90" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#listTableSnapshots-java.util.regex.Pattern-java.util.regex.Pattern-">listTableSnapshots</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;tableNamePattern,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;snapshotNamePattern)</code>
@@ -751,7 +759,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
  name regular expression.</div>
 </td>
 </tr>
-<tr id="i90" class="altColor">
+<tr id="i91" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#majorCompact-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.CompactType-">majorCompact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
             byte[]&nbsp;columnFamily,
@@ -759,33 +767,33 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <div class="block">Major compact a column family within a table.</div>
 </td>
 </tr>
-<tr id="i91" class="rowColor">
+<tr id="i92" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#majorCompact-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">majorCompact</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
             <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</code>
 <div class="block">Major compact a table.</div>
 </td>
 </tr>
-<tr id="i92" class="altColor">
+<tr id="i93" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#majorCompactRegion-byte:A-">majorCompactRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Major compact a region.</div>
 </td>
 </tr>
-<tr id="i93" class="rowColor">
+<tr id="i94" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#majorCompactRegion-byte:A-byte:A-">majorCompactRegion</a></span>(byte[]&nbsp;regionName,
                   byte[]&nbsp;columnFamily)</code>
 <div class="block">Major compact a column family within region.</div>
 </td>
 </tr>
-<tr id="i94" class="altColor">
+<tr id="i95" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#majorCompactRegionServer-org.apache.hadoop.hbase.ServerName-">majorCompactRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Compact all regions on the region server.</div>
 </td>
 </tr>
-<tr id="i95" class="rowColor">
+<tr id="i96" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#mergeRegions-byte:A-byte:A-boolean-">mergeRegions</a></span>(byte[]&nbsp;nameOfRegionA,
             byte[]&nbsp;nameOfRegionB,
@@ -793,214 +801,214 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <div class="block">Merge two regions.</div>
 </td>
 </tr>
-<tr id="i96" class="altColor">
+<tr id="i97" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#mergeSwitch-boolean-">mergeSwitch</a></span>(boolean&nbsp;on)</code>
 <div class="block">Turn the Merge switch on or off.</div>
 </td>
 </tr>
-<tr id="i97" class="rowColor">
+<tr id="i98" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#modifyColumnFamily-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-">modifyColumnFamily</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   <a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;columnFamily)</code>
 <div class="block">Modify an existing column family on a table.</div>
 </td>
 </tr>
-<tr id="i98" class="altColor">
+<tr id="i99" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#modifyNamespace-org.apache.hadoop.hbase.NamespaceDescriptor-">modifyNamespace</a></span>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;descriptor)</code>
 <div class="block">Modify an existing namespace.</div>
 </td>
 </tr>
-<tr id="i99" class="rowColor">
+<tr id="i100" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#modifyTable-org.apache.hadoop.hbase.client.TableDescriptor-">modifyTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</code>
 <div class="block">Modify an existing table, more IRB friendly version.</div>
 </td>
 </tr>
-<tr id="i100" class="altColor">
+<tr id="i101" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#move-byte:A-">move</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Move the region <code>r</code> to a random server.</div>
 </td>
 </tr>
-<tr id="i101" class="rowColor">
+<tr id="i102" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#move-byte:A-org.apache.hadoop.hbase.ServerName-">move</a></span>(byte[]&nbsp;regionName,
     <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;destServerName)</code>
 <div class="block">Move the region <code>r</code> to <code>dest</code>.</div>
 </td>
 </tr>
-<tr id="i102" class="altColor">
+<tr id="i103" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#normalize--">normalize</a></span>()</code>
 <div class="block">Invoke region normalizer.</div>
 </td>
 </tr>
-<tr id="i103" class="rowColor">
+<tr id="i104" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#normalizerSwitch-boolean-">normalizerSwitch</a></span>(boolean&nbsp;on)</code>
 <div class="block">Set region normalizer on/off.</div>
 </td>
 </tr>
-<tr id="i104" class="altColor">
+<tr id="i105" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#offline-byte:A-">offline</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Offline specified region from master's in-memory state.</div>
 </td>
 </tr>
-<tr id="i105" class="rowColor">
+<tr id="i106" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html#recommissionRegionServer-org.apache.hadoop.hbase.ServerName-java.util.List-">recommissionRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server,
                         <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;byte[]&gt;&nbsp;encodedRegionNames)</code>
 <div class="block"

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
index 544df85..8862e06 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
@@ -656,7 +656,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#rollWriter--">rollWriter</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i37" class="rowColor">
-<td class="colFirst"><code>private boolean</code></td>
+<td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#rollWriter-long-">rollWriter</a></span>(long&nbsp;logId)</code>&nbsp;</td>
 </tr>
 <tr id="i38" class="altColor">
@@ -1428,7 +1428,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>WALS_PATH_FILTER</h4>
-<pre>private static final&nbsp;org.apache.hadoop.fs.PathFilter <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1190">WALS_PATH_FILTER</a></pre>
+<pre>private static final&nbsp;org.apache.hadoop.fs.PathFilter <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1193">WALS_PATH_FILTER</a></pre>
 </li>
 </ul>
 <a name="FILE_STATUS_ID_COMPARATOR">
@@ -1437,7 +1437,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FILE_STATUS_ID_COMPARATOR</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;org.apache.hadoop.fs.FileStatus&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1198">FILE_STATUS_ID_COMPARATOR</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;org.apache.hadoop.fs.FileStatus&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1201">FILE_STATUS_ID_COMPARATOR</a></pre>
 </li>
 </ul>
 </li>
@@ -1606,7 +1606,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>load</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.399">load</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureLoader</a>&nbsp;loader)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.398">load</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureLoader</a>&nbsp;loader)
           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="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#load-org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureLoader-">ProcedureStore</a></code></span></div>
 <div class="block">Load the Procedures in the store.</div>
@@ -1624,7 +1624,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>tryCleanupLogsOnLoad</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.454">tryCleanupLogsOnLoad</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.453">tryCleanupLogsOnLoad</a>()</pre>
 </li>
 </ul>
 <a name="insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">
@@ -1633,7 +1633,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>insert</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.473">insert</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.472">insert</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
                    <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">ProcedureStore</a></code></span></div>
 <div class="block">When a procedure is submitted to the executor insert(proc, null) will be called.
@@ -1655,7 +1655,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>insert</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.507">insert</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;procs)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.506">insert</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;procs)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure:A-">ProcedureStore</a></code></span></div>
 <div class="block">Serialize a set of new procedures.
  These procedures are freshly submitted to the executor and each procedure
@@ -1672,7 +1672,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>update</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.536">update</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.535">update</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#update-org.apache.hadoop.hbase.procedure2.Procedure-">ProcedureStore</a></code></span></div>
 <div class="block">The specified procedure was executed,
  and the new state should be written to the store.</div>
@@ -1688,7 +1688,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.559">delete</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.558">delete</a>(long&nbsp;procId)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-long-">ProcedureStore</a></code></span></div>
 <div class="block">The specified procId was removed from the executor,
  due to completion, abort or failure.
@@ -1705,7 +1705,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.582">delete</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.581">delete</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
                    long[]&nbsp;subProcIds)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">ProcedureStore</a></code></span></div>
 <div class="block">The parent procedure completed.
@@ -1723,7 +1723,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.607">delete</a>(long[]&nbsp;procIds,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.606">delete</a>(long[]&nbsp;procIds,
                    int&nbsp;offset,
                    int&nbsp;count)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-long:A-int-int-">ProcedureStore</a></code></span></div>
@@ -1744,7 +1744,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.618">delete</a>(long[]&nbsp;procIds)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.617">delete</a>(long[]&nbsp;procIds)</pre>
 </li>
 </ul>
 <a name="acquireSlot--">
@@ -1753,7 +1753,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>acquireSlot</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.642">acquireSlot</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.641">acquireSlot</a>()</pre>
 </li>
 </ul>
 <a name="releaseSlot-org.apache.hadoop.hbase.procedure2.util.ByteSlot-">
@@ -1762,7 +1762,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>releaseSlot</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.647">releaseSlot</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.646">releaseSlot</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot)</pre>
 </li>
 </ul>
 <a name="pushData-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.PushType-org.apache.hadoop.hbase.procedure2.util.ByteSlot-long-long:A-">
@@ -1771,7 +1771,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>pushData</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.654">pushData</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>&nbsp;type,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.653">pushData</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>&nbsp;type,
                       <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
                       long&nbsp;procId,
                       long[]&nbsp;subProcIds)</pre>
@@ -1783,7 +1783,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>updateStoreTracker</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.714">updateStoreTracker</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>&nbsp;type,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.713">updateStoreTracker</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>&nbsp;type,
                                 long&nbsp;procId,
                                 long[]&nbsp;subProcIds)</pre>
 </li>
@@ -1794,7 +1794,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>isSyncAborted</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.745">isSyncAborted</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.744">isSyncAborted</a>()</pre>
 </li>
 </ul>
 <a name="syncLoop--">
@@ -1803,7 +1803,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncLoop</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.749">syncLoop</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.748">syncLoop</a>()
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1817,7 +1817,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getSyncMetrics</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.SyncMetrics</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.829">getSyncMetrics</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.SyncMetrics</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.828">getSyncMetrics</a>()</pre>
 </li>
 </ul>
 <a name="syncSlots--">
@@ -1826,7 +1826,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncSlots</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.838">syncSlots</a>()
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.837">syncSlots</a>()
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1840,7 +1840,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncSlots</h4>
-<pre>protected&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.866">syncSlots</a>(org.apache.hadoop.fs.FSDataOutputStream&nbsp;stream,
+<pre>protected&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.865">syncSlots</a>(org.apache.hadoop.fs.FSDataOutputStream&nbsp;stream,
                          <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>[]&nbsp;slots,
                          int&nbsp;offset,
                          int&nbsp;count)
@@ -1857,7 +1857,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncStream</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.885">syncStream</a>(org.apache.hadoop.fs.FSDataOutputStream&nbsp;stream)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.884">syncStream</a>(org.apache.hadoop.fs.FSDataOutputStream&nbsp;stream)
                    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>
@@ -1871,7 +1871,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWriterWithRetries</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.893">rollWriterWithRetries</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.892">rollWriterWithRetries</a>()</pre>
 </li>
 </ul>
 <a name="tryRollWriter--">
@@ -1880,7 +1880,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>tryRollWriter</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.909">tryRollWriter</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.908">tryRollWriter</a>()</pre>
 </li>
 </ul>
 <a name="getMillisToNextPeriodicRoll--">
@@ -1889,7 +1889,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getMillisToNextPeriodicRoll</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.918">getMillisToNextPeriodicRoll</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.917">getMillisToNextPeriodicRoll</a>()</pre>
 </li>
 </ul>
 <a name="getMillisFromLastRoll--">
@@ -1898,7 +1898,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getMillisFromLastRoll</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.925">getMillisFromLastRoll</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.924">getMillisFromLastRoll</a>()</pre>
 </li>
 </ul>
 <a name="periodicRollForTesting--">
@@ -1907,7 +1907,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>periodicRollForTesting</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.930">periodicRollForTesting</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.929">periodicRollForTesting</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>
@@ -1921,7 +1921,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWriterForTesting</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.940">rollWriterForTesting</a>()
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.939">rollWriterForTesting</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>
@@ -1935,7 +1935,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>removeInactiveLogsForTesting</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.950">removeInactiveLogsForTesting</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.949">removeInactiveLogsForTesting</a>()
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1949,7 +1949,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>periodicRoll</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.959">periodicRoll</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.958">periodicRoll</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>
@@ -1963,7 +1963,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWriter</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.984">rollWriter</a>()
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.983">rollWriter</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>
@@ -1977,8 +1977,8 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWriter</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1005">rollWriter</a>(long&nbsp;logId)
-                    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>
+<pre>boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1005">rollWriter</a>(long&nbsp;logId)
+            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>
 <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>
@@ -2000,7 +2000,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>removeInactiveLogs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1096">removeInactiveLogs</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1099">removeInactiveLogs</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>
@@ -2014,7 +2014,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>buildHoldingCleanupTracker</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1108">buildHoldingCleanupTracker</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1111">buildHoldingCleanupTracker</a>()</pre>
 </li>
 </ul>
 <a name="removeAllLogs-long-">
@@ -2023,7 +2023,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>removeAllLogs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1129">removeAllLogs</a>(long&nbsp;lastLogId)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1132">removeAllLogs</a>(long&nbsp;lastLogId)</pre>
 <div class="block">Remove all logs with logId <= <code>lastLogId</code>.</div>
 </li>
 </ul>
@@ -2033,7 +2033,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>removeLogFile</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1151">removeLogFile</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;log,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1154">removeLogFile</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;log,
                               org.apache.hadoop.fs.Path&nbsp;walArchiveDir)</pre>
 </li>
 </ul>
@@ -2043,7 +2043,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1172">getWALDir</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1175">getWALDir</a>()</pre>
 </li>
 </ul>
 <a name="getFileSystem--">
@@ -2052,7 +2052,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileSystem</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1176">getFileSystem</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1179">getFileSystem</a>()</pre>
 </li>
 </ul>
 <a name="getLogFilePath-long-">
@@ -2061,7 +2061,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogFilePath</h4>
-<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1180">getLogFilePath</a>(long&nbsp;logId)
+<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1183">getLogFilePath</a>(long&nbsp;logId)
                                             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>
@@ -2075,7 +2075,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogIdFromName</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1184">getLogIdFromName</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;name)</pre>
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1187">getLogIdFromName</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;name)</pre>
 </li>
 </ul>
 <a name="getLogFiles--">
@@ -2084,7 +2084,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogFiles</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.FileStatus[]&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1208">getLogFiles</a>()
+<pre>private&nbsp;org.apache.hadoop.fs.FileStatus[]&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1211">getLogFiles</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>
@@ -2098,7 +2098,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxLogId</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1219">getMaxLogId</a>(org.apache.hadoop.fs.FileStatus[]&nbsp;logFiles)</pre>
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1222">getMaxLogId</a>(org.apache.hadoop.fs.FileStatus[]&nbsp;logFiles)</pre>
 </li>
 </ul>
 <a name="initOldLogs-org.apache.hadoop.fs.FileStatus:A-">
@@ -2107,7 +2107,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>initOldLogs</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1232">initOldLogs</a>(org.apache.hadoop.fs.FileStatus[]&nbsp;logFiles)
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1235">initOldLogs</a>(org.apache.hadoop.fs.FileStatus[]&nbsp;logFiles)
                   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="returnLabel">Returns:</span></dt>
@@ -2123,7 +2123,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>initTrackerFromOldLogs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1261">initTrackerFromOldLogs</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1264">initTrackerFromOldLogs</a>()</pre>
 <div class="block">If last log's tracker is not null, use it as <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#storeTracker"><code>storeTracker</code></a>.
  Otherwise, set storeTracker as partial, and let <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><code>ProcedureWALFormatReader</code></a> rebuild
  it using entries in the log.</div>
@@ -2135,7 +2135,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockListLast">
 <li class="blockList">
 <h4>initOldLog</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1275">initOldLog</a>(org.apache.hadoop.fs.FileStatus&nbsp;logFile,
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1278">initOldLog</a>(org.apache.hadoop.fs.FileStatus&nbsp;logFile,
                                     org.apache.hadoop.fs.Path&nbsp;walArchiveDir)
                              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">Loads given log file and it's tracker.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index 814aa08..6a7d5d8 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -228,12 +228,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" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.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/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/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/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/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/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html b/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html
index d31e3f8..f3e42a8 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html
@@ -271,7 +271,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Reg
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldStop</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html#line.62">shouldStop</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentRowCell)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html#line.61">shouldStop</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentRowCell)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#shouldStop-org.apache.hadoop.hbase.Cell-">shouldStop</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RegionScannerImpl</a></code></dd>
@@ -284,7 +284,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Reg
 <ul class="blockListLast">
 <li class="blockList">
 <h4>nextRow</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html#line.74">nextRow</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext,
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html#line.73">nextRow</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext,
                           <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;curRowCell)
                    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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 6472a31..069d4e2 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -704,20 +704,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" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.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/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/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/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/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/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/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/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.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/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/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/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/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/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/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/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/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index 2731576..23060c2 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -130,9 +130,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" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index f6fc79b..a4ab1b7 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -238,8 +238,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" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
index 732825f..5efcbb8 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/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" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.SourceHolder.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">MetricsReplicationSourceFactoryImpl.SourceHolder</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationSourceShipper.WorkerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.SourceHolder.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">MetricsReplicationSourceFactoryImpl.SourceHolder</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index c20ff47..034077c 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -110,8 +110,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" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index 5a7e325..d02c856 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -138,8 +138,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" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/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/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/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/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index 29d7634..67b7e3a 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -191,9 +191,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" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/thrift/ThriftServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/ThriftServer.html b/devapidocs/org/apache/hadoop/hbase/thrift/ThriftServer.html
index 2441bc6..4cae0d0 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/ThriftServer.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/ThriftServer.html
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.LimitedPrivate(value="Tools")
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.46">ThriftServer</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.43">ThriftServer</a>
 extends <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></pre>
 <div class="block">ThriftServer- this class starts up a Thrift server which implements the
  Hbase API specified in the Hbase.thrift IDL file. The server runs in an
@@ -285,7 +285,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.48">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.45">LOG</a></pre>
 </li>
 </ul>
 <a name="MIN_WORKERS_OPTION">
@@ -294,7 +294,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>MIN_WORKERS_OPTION</h4>
-<pre>private 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/thrift/ThriftServer.html#line.50">MIN_WORKERS_OPTION</a></pre>
+<pre>private 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/thrift/ThriftServer.html#line.47">MIN_WORKERS_OPTION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.thrift.ThriftServer.MIN_WORKERS_OPTION">Constant Field Values</a></dd>
@@ -307,7 +307,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>MAX_WORKERS_OPTION</h4>
-<pre>private 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/thrift/ThriftServer.html#line.51">MAX_WORKERS_OPTION</a></pre>
+<pre>private 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/thrift/ThriftServer.html#line.48">MAX_WORKERS_OPTION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.thrift.ThriftServer.MAX_WORKERS_OPTION">Constant Field Values</a></dd>
@@ -320,7 +320,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>MAX_QUEUE_SIZE_OPTION</h4>
-<pre>private 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/thrift/ThriftServer.html#line.52">MAX_QUEUE_SIZE_OPTION</a></pre>
+<pre>private 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/thrift/ThriftServer.html#line.49">MAX_QUEUE_SIZE_OPTION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.thrift.ThriftServer.MAX_QUEUE_SIZE_OPTION">Constant Field Values</a></dd>
@@ -333,7 +333,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>KEEP_ALIVE_SEC_OPTION</h4>
-<pre>private 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/thrift/ThriftServer.html#line.53">KEEP_ALIVE_SEC_OPTION</a></pre>
+<pre>private 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/thrift/ThriftServer.html#line.50">KEEP_ALIVE_SEC_OPTION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.thrift.ThriftServer.KEEP_ALIVE_SEC_OPTION">Constant Field Values</a></dd>
@@ -346,7 +346,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>BIND_OPTION</h4>
-<pre>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/thrift/ThriftServer.html#line.54">BIND_OPTION</a></pre>
+<pre>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/thrift/ThriftServer.html#line.51">BIND_OPTION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.thrift.ThriftServer.BIND_OPTION">Constant Field Values</a></dd>
@@ -359,7 +359,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>COMPACT_OPTION</h4>
-<pre>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/thrift/ThriftServer.html#line.55">COMPACT_OPTION</a></pre>
+<pre>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/thrift/ThriftServer.html#line.52">COMPACT_OPTION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.thrift.ThriftServer.COMPACT_OPTION">Constant Field Values</a></dd>
@@ -372,7 +372,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>FRAMED_OPTION</h4>
-<pre>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/thrift/ThriftServer.html#line.56">FRAMED_OPTION</a></pre>
+<pre>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/thrift/ThriftServer.html#line.53">FRAMED_OPTION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.thrift.ThriftServer.FRAMED_OPTION">Constant Field Values</a></dd>
@@ -385,7 +385,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>PORT_OPTION</h4>
-<pre>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/thrift/ThriftServer.html#line.57">PORT_OPTION</a></pre>
+<pre>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/thrift/ThriftServer.html#line.54">PORT_OPTION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.thrift.ThriftServer.PORT_OPTION">Constant Field Values</a></dd>
@@ -398,7 +398,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_BIND_ADDR</h4>
-<pre>private 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/thrift/ThriftServer.html#line.59">DEFAULT_BIND_ADDR</a></pre>
+<pre>private 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/thrift/ThriftServer.html#line.56">DEFAULT_BIND_ADDR</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.thrift.ThriftServer.DEFAULT_BIND_ADDR">Constant Field Values</a></dd>
@@ -411,7 +411,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_LISTEN_PORT</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.60">DEFAULT_LISTEN_PORT</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.57">DEFAULT_LISTEN_PORT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.thrift.ThriftServer.DEFAULT_LISTEN_PORT">Constant Field Values</a></dd>
@@ -424,7 +424,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.62">conf</a></pre>
+<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.59">conf</a></pre>
 </li>
 </ul>
 <a name="serverRunner">
@@ -433,7 +433,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>serverRunner</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftServerRunner.html" title="class in org.apache.hadoop.hbase.thrift">ThriftServerRunner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.63">serverRunner</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftServerRunner.html" title="class in org.apache.hadoop.hbase.thrift">ThriftServerRunner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.60">serverRunner</a></pre>
 </li>
 </ul>
 <a name="infoServer">
@@ -442,7 +442,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>infoServer</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.65">infoServer</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.62">infoServer</a></pre>
 </li>
 </ul>
 <a name="READ_TIMEOUT_OPTION">
@@ -451,7 +451,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>READ_TIMEOUT_OPTION</h4>
-<pre>private 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/thrift/ThriftServer.html#line.67">READ_TIMEOUT_OPTION</a></pre>
+<pre>private 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/thrift/ThriftServer.html#line.64">READ_TIMEOUT_OPTION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.thrift.ThriftServer.READ_TIMEOUT_OPTION">Constant Field Values</a></dd>
@@ -472,7 +472,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ThriftServer</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.73">ThriftServer</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.70">ThriftServer</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 </li>
@@ -489,7 +489,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>printUsageAndExit</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.77">printUsageAndExit</a>(org.apache.hbase.thirdparty.org.apache.commons.cli.Options&nbsp;options,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.74">printUsageAndExit</a>(org.apache.hbase.thirdparty.org.apache.commons.cli.Options&nbsp;options,
                                       int&nbsp;exitCode)
                                throws org.apache.hadoop.util.Shell.ExitCodeException</pre>
 <dl>
@@ -504,7 +504,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>doMain</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.92">doMain</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;args)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.90">doMain</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;args)
      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Start up or shuts down the Thrift server, depending on the arguments.</div>
 <dl>
@@ -521,7 +521,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>processOptions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.113">processOptions</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;args)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.111">processOptions</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;args)
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Parse the command line options to set parameters the conf.</div>
 <dl>
@@ -536,7 +536,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.213">stop</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.201">stop</a>()</pre>
 </li>
 </ul>
 <a name="optionToConf-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-java.lang.String-org.apache.hadoop.conf.Configuration-java.lang.String-">
@@ -545,7 +545,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>optionToConf</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.225">optionToConf</a>(org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine&nbsp;cmd,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.213">optionToConf</a>(org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine&nbsp;cmd,
                                  <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;option,
                                  org.apache.hadoop.conf.Configuration&nbsp;conf,
                                  <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;destConfKey)</pre>
@@ -557,7 +557,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.234">main</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;args)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/thrift/ThriftServer.html#line.222">main</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;args)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/client/class-use/Connection.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/Connection.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/Connection.html
index 02d7b34..14bfa72 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/Connection.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/Connection.html
@@ -564,6 +564,10 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">RSGroupTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/RSGroupTableAccessor.html#isRSGroupsEnabled-org.apache.hadoop.hbase.client.Connection-">isRSGroupsEnabled</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#mergeRegions-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-long-org.apache.hadoop.hbase.client.RegionInfo-long-org.apache.hadoop.hbase.ServerName-int-">mergeRegions</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
             <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;mergedRegion,
@@ -576,7 +580,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <div class="block">Merge the two regions into one in an atomic operation.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#multiMutate-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.client.Table-byte:A-java.util.List-">multiMutate</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
            <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
@@ -585,21 +589,21 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <div class="block">Performs an atomic multi-mutate operation against the given table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#multiMutate-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.client.Table-byte:A-org.apache.hadoop.hbase.client.Mutation...-">multiMutate</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
            <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
            byte[]&nbsp;row,
            <a href="../../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>...&nbsp;mutations)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#mutateMetaTable-org.apache.hadoop.hbase.client.Connection-java.util.List-">mutateMetaTable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                <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/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp;mutations)</code>
 <div class="block">Execute the passed <code>mutations</code> against <code>hbase:meta</code> table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#overwriteRegions-org.apache.hadoop.hbase.client.Connection-java.util.List-int-">overwriteRegions</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                 <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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regionInfos,
@@ -607,21 +611,21 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <div class="block">Overwrites the specified regions from hbase:meta.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#putsToMetaTable-org.apache.hadoop.hbase.client.Connection-java.util.List-">putsToMetaTable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                <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/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&gt;&nbsp;ps)</code>
 <div class="block">Put the passed <code>ps</code> to the <code>hbase:meta</code> table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#putToMetaTable-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.client.Put-">putToMetaTable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
               <a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;p)</code>
 <div class="block">Put the passed <code>p</code> to the <code>hbase:meta</code> table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#removeRegionReplicasFromMeta-java.util.Set-int-int-org.apache.hadoop.hbase.client.Connection-">removeRegionReplicasFromMeta</a></span>(<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;metaRows,
                             int&nbsp;replicaIndexToDeleteFrom,
@@ -630,7 +634,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <div class="block">Deletes some replica columns corresponding to replicas for the passed rows</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#scanMeta-org.apache.hadoop.hbase.client.Connection-byte:A-byte:A-org.apache.hadoop.hbase.MetaTableAccessor.QueryType-org.apache.hadoop.hbase.filter.Filter-int-org.apache.hadoop.hbase.MetaTableAccessor.Visitor-">scanMeta</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
         byte[]&nbsp;startRow,
@@ -640,7 +644,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
         int&nbsp;maxRows,
         <a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.Visitor.html" title="interface in org.apache.hadoop.hbase">MetaTableAccessor.Visitor</a>&nbsp;visitor)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#scanMeta-org.apache.hadoop.hbase.client.Connection-byte:A-byte:A-org.apache.hadoop.hbase.MetaTableAccessor.QueryType-int-org.apache.hadoop.hbase.MetaTableAccessor.Visitor-">scanMeta</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
         byte[]&nbsp;startRow,
@@ -651,7 +655,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <div class="block">Performs a scan of META table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#scanMeta-org.apache.hadoop.hbase.client.Connection-byte:A-byte:A-org.apache.hadoop.hbase.MetaTableAccessor.QueryType-org.apache.hadoop.hbase.MetaTableAccessor.Visitor-">scanMeta</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
         byte[]&nbsp;startRow,
@@ -659,7 +663,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
         <a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase">MetaTableAccessor.QueryType</a>&nbsp;type,
         <a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.Visitor.html" title="interface in org.apache.hadoop.hbase">MetaTableAccessor.Visitor</a>&nbsp;visitor)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#scanMeta-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.MetaTableAccessor.Visitor-org.apache.hadoop.hbase.TableName-byte:A-int-">scanMeta</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
         <a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.Visitor.html" title="interface in org.apache.hadoop.hbase">MetaTableAccessor.Visitor</a>&nbsp;visitor,
@@ -670,7 +674,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
  given row.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#scanMeta-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.MetaTableAccessor.QueryType-int-org.apache.hadoop.hbase.MetaTableAccessor.Visitor-">scanMeta</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
         <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
@@ -678,13 +682,13 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
         int&nbsp;maxRows,
         <a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.Visitor.html" title="interface in org.apache.hadoop.hbase">MetaTableAccessor.Visitor</a>&nbsp;visitor)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#scanMetaForTableRegions-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.MetaTableAccessor.Visitor-org.apache.hadoop.hbase.TableName-">scanMetaForTableRegions</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                        <a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.Visitor.html" title="interface in org.apache.hadoop.hbase">MetaTableAccessor.Visitor</a>&nbsp;visitor,
                        <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#splitRegion-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.client.RegionInfo-long-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-int-">splitRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
            <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;parent,
@@ -696,14 +700,14 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <div class="block">Splits the region into two in an atomic operation.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#tableExists-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.TableName-">tableExists</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
            <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Checks if the specified table exists.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#updateLocation-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-long-long-">updateLocation</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
               <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
@@ -713,7 +717,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <div class="block">Updates the location of the specified region to be the specified server.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#updateRegionLocation-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-long-long-">updateRegionLocation</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                     <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
@@ -724,7 +728,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
  and startcode.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#updateTableState-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableState.State-">updateTableState</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;conn,
                 <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -732,7 +736,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <div class="block">Updates state in META</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#updateTableState-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.client.TableState-">updateTableState</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                 <a href="../../../../../../org/apache/hadoop/hbase/client/TableState.html" title="class in org.apache.hadoop.hbase.client">TableState</a>&nbsp;state)</code>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptor.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptor.html
index 68c8d82..f9dd01f 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptor.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptor.html
@@ -580,7 +580,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<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/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">RawAsyncHBaseAdmin.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#listTableDescriptors-java.util.regex.Pattern-boolean-">listTableDescriptors</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern,
                     boolean&nbsp;includeSysTables)</code>
-<div class="block"><code>#listTables(boolean)</code></div>
+<div class="block"><a href="../../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#listTableDescriptors-boolean-"><code>RawAsyncHBaseAdmin.listTableDescriptors(boolean)</code></a></div>
 </td>
 </tr>
 <tr class="rowColor">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index 3c769c6..0ad2430 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -550,24 +550,24 @@
 <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" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
index ae0124e..ce950b0 100644
--- a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
@@ -104,8 +104,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" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 14f5156..2b8bb1c 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -184,13 +184,13 @@
 <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" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/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/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.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/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/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/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/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/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index 2c047fe..05d42a4 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -273,12 +273,12 @@
 <ul>
 <li type="circle">java.lang.<a href="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" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/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/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/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/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/mapreduce/CellCounter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/CellCounter.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/CellCounter.html
index b5c4b85..396576f 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/CellCounter.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/CellCounter.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":10};
+var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":10,"i6":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -254,6 +254,10 @@ implements org.apache.hadoop.util.Tool</pre>
 </td>
 </tr>
 <tr id="i5" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.html#printUsage-int-">printUsage</a></span>(int&nbsp;parameterCount)</code>&nbsp;</td>
+</tr>
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.html#run-java.lang.String:A-">run</a></span>(<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;args)</code>&nbsp;</td>
 </tr>
@@ -429,13 +433,22 @@ implements org.apache.hadoop.util.Tool</pre>
 </dl>
 </li>
 </ul>
+<a name="printUsage-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>printUsage</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.html#line.302">printUsage</a>(int&nbsp;parameterCount)</pre>
+</li>
+</ul>
 <a name="main-java.lang.String:A-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.html#line.327">main</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;args)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/CellCounter.html#line.332">main</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;args)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Main entry point.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/WALPlayer.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
index 4b222f0..c619aee 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
@@ -543,7 +543,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html#line.377">main</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;args)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html#line.382">main</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;args)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Main entry point.</div>
 <dl>
@@ -560,7 +560,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html#line.383">run</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;args)
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html#line.388">run</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;args)
         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index a07a1d8..0678f9b 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -293,9 +293,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" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="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/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/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html
index f5a4c58..3ee3b05 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html
@@ -408,7 +408,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>updateRegionLocation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.128">updateRegionLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;regionStateNode)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.127">updateRegionLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;regionStateNode)
                           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>
@@ -422,7 +422,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>updateMetaLocation</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.141">updateMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.140">updateMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                                 <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
                          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>
@@ -437,7 +437,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>updateUserRegionLocation</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.151">updateUserRegionLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.150">updateUserRegionLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                                       <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>&nbsp;state,
                                       <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;regionLocation,
                                       <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;lastHost,
@@ -456,7 +456,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>updateRegionLocation</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.198">updateRegionLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.197">updateRegionLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                                   <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>&nbsp;state,
                                   <a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)
                            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>
@@ -472,7 +472,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getOpenSeqNumForParentRegion</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.213">getOpenSeqNumForParentRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.212">getOpenSeqNumForParentRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)
                                    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>
@@ -486,7 +486,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>splitRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.223">splitRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;parent,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.222">splitRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;parent,
                         <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriA,
                         <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriB,
                         <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
@@ -503,7 +503,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>mergeRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.237">mergeRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;child,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.236">mergeRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;child,
                          <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriA,
                          <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriB,
                          <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
@@ -520,7 +520,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.253">deleteRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.252">deleteRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
                   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>
@@ -534,7 +534,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.257">deleteRegions</a>(<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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.256">deleteRegions</a>(<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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions)
                    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>
@@ -548,7 +548,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hasGlobalReplicationScope</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.264">hasGlobalReplicationScope</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.263">hasGlobalReplicationScope</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                                    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>
@@ -562,7 +562,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hasGlobalReplicationScope</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.268">hasGlobalReplicationScope</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.267">hasGlobalReplicationScope</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)</pre>
 </li>
 </ul>
 <a name="getRegionReplication-org.apache.hadoop.hbase.client.TableDescriptor-">
@@ -571,7 +571,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionReplication</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.272">getRegionReplication</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.271">getRegionReplication</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)</pre>
 </li>
 </ul>
 <a name="getTableDescriptor-org.apache.hadoop.hbase.TableName-">
@@ -580,7 +580,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableDescriptor</h4>
-<pre>private&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/master/assignment/RegionStateStore.html#line.276">getTableDescriptor</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>private&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/master/assignment/RegionStateStore.html#line.275">getTableDescriptor</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                                     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>
@@ -594,7 +594,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServer</h4>
-<pre>static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.292">getRegionServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;r,
+<pre>static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.291">getRegionServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;r,
                                   int&nbsp;replicaId)</pre>
 <div class="block">Returns the <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase"><code>ServerName</code></a> from catalog table <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client"><code>Result</code></a>
  where the region is transitioning. It should be the same as
@@ -614,7 +614,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerNameColumn</h4>
-<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.309">getServerNameColumn</a>(int&nbsp;replicaId)</pre>
+<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.308">getServerNameColumn</a>(int&nbsp;replicaId)</pre>
 </li>
 </ul>
 <a name="getRegionState-org.apache.hadoop.hbase.client.Result-int-">
@@ -623,7 +623,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionState</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.326">getRegionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;r,
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.325">getRegionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;r,
                                                int&nbsp;replicaId)</pre>
 <div class="block">Pull the region state from a catalog table <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client"><code>Result</code></a>.</div>
 <dl>
@@ -640,7 +640,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getStateColumn</h4>
-<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.335">getStateColumn</a>(int&nbsp;replicaId)</pre>
+<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.334">getStateColumn</a>(int&nbsp;replicaId)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index 890d83d..361fcf6 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -346,11 +346,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" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/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/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/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index 550d779..a7119b7 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -208,9 +208,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" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/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/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/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
index 3e1ea7f..9eb46aa 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
@@ -125,8 +125,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" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index 6971e5e..800a3e6 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -441,19 +441,19 @@
 <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" title="class or interface in java.io">Serializable</a>)
 <ul>
-<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/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/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/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/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/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/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/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/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/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/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/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/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 4ecc23b..d830e9a 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -212,10 +212,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" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/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/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>
+<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/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/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d220bc5e/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
index 6a13bfc..81a3527 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static enum <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.652">WALProcedureStore.PushType</a>
+<pre>private static enum <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.651">WALProcedureStore.PushType</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>&gt;</pre>
 </li>
 </ul>
@@ -213,7 +213,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>INSERT</h4>
-<pre>public static final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html#line.652">INSERT</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html#line.651">INSERT</a></pre>
 </li>
 </ul>
 <a name="UPDATE">
@@ -222,7 +222,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>UPDATE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html#line.652">UPDATE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html#line.651">UPDATE</a></pre>
 </li>
 </ul>
 <a name="DELETE">
@@ -231,7 +231,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DELETE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html#line.652">DELETE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html#line.651">DELETE</a></pre>
 </li>
 </ul>
 </li>