<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> *<a name="line.2"></a>
<span class="sourceLineNo">003</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
<span class="sourceLineNo">004</span> * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
<span class="sourceLineNo">005</span> * distributed with this work for additional information<a name="line.5"></a>
<span class="sourceLineNo">006</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
<span class="sourceLineNo">007</span> * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance<a name="line.8"></a>
<span class="sourceLineNo">009</span> * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
<span class="sourceLineNo">010</span> *<a name="line.10"></a>
<span class="sourceLineNo">011</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
<span class="sourceLineNo">012</span> *<a name="line.12"></a>
<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing, software<a name="line.13"></a>
<span class="sourceLineNo">014</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.14"></a>
<span class="sourceLineNo">015</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.15"></a>
<span class="sourceLineNo">016</span> * See the License for the specific language governing permissions and<a name="line.16"></a>
<span class="sourceLineNo">017</span> * limitations under the License.<a name="line.17"></a>
<span class="sourceLineNo">018</span> */<a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.client;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
<span class="sourceLineNo">021</span>import edu.umd.cs.findbugs.annotations.CheckForNull;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.io.DataInputStream;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.util.Arrays;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.util.Comparator;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.util.List;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.util.stream.Collectors;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HConstants;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.TableName;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.util.ByteArrayHashKey;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.util.HashKey;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.util.JenkinsHash;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.MD5Hash;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.hadoop.io.DataInputBuffer;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;<a name="line.40"></a>
<span class="sourceLineNo">041</span><a name="line.41"></a>
<span class="sourceLineNo">042</span>/**<a name="line.42"></a>
<span class="sourceLineNo">043</span> * Information about a region. A region is a range of keys in the whole keyspace<a name="line.43"></a>
<span class="sourceLineNo">044</span> * of a table, an identifier (a timestamp) for differentiating between subset<a name="line.44"></a>
<span class="sourceLineNo">045</span> * ranges (after region split) and a replicaId for differentiating the instance<a name="line.45"></a>
<span class="sourceLineNo">046</span> * for the same range and some status information about the region.<a name="line.46"></a>
<span class="sourceLineNo">047</span> *<a name="line.47"></a>
<span class="sourceLineNo">048</span> * The region has a unique name which consists of the following fields:<a name="line.48"></a>
<span class="sourceLineNo">049</span> * &lt;ul&gt;<a name="line.49"></a>
<span class="sourceLineNo">050</span> * &lt;li&gt; tableName   : The name of the table &lt;/li&gt;<a name="line.50"></a>
<span class="sourceLineNo">051</span> * &lt;li&gt; startKey    : The startKey for the region. &lt;/li&gt;<a name="line.51"></a>
<span class="sourceLineNo">052</span> * &lt;li&gt; regionId    : A timestamp when the region is created. &lt;/li&gt;<a name="line.52"></a>
<span class="sourceLineNo">053</span> * &lt;li&gt; replicaId   : An id starting from 0 to differentiate replicas of the<a name="line.53"></a>
<span class="sourceLineNo">054</span> * same region range but hosted in separated servers. The same region range can<a name="line.54"></a>
<span class="sourceLineNo">055</span> * be hosted in multiple locations.&lt;/li&gt;<a name="line.55"></a>
<span class="sourceLineNo">056</span> * &lt;li&gt; encodedName : An MD5 encoded string for the region name.&lt;/li&gt;<a name="line.56"></a>
<span class="sourceLineNo">057</span> * &lt;/ul&gt;<a name="line.57"></a>
<span class="sourceLineNo">058</span> *<a name="line.58"></a>
<span class="sourceLineNo">059</span> * &lt;br&gt; Other than the fields in the region name, region info contains:<a name="line.59"></a>
<span class="sourceLineNo">060</span> * &lt;ul&gt;<a name="line.60"></a>
<span class="sourceLineNo">061</span> * &lt;li&gt; endKey      : the endKey for the region (exclusive) &lt;/li&gt;<a name="line.61"></a>
<span class="sourceLineNo">062</span> * &lt;li&gt; split       : Whether the region is split &lt;/li&gt;<a name="line.62"></a>
<span class="sourceLineNo">063</span> * &lt;li&gt; offline     : Whether the region is offline &lt;/li&gt;<a name="line.63"></a>
<span class="sourceLineNo">064</span> * &lt;/ul&gt;<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>@InterfaceAudience.Public<a name="line.67"></a>
<span class="sourceLineNo">068</span>public interface RegionInfo extends Comparable&lt;RegionInfo&gt; {<a name="line.68"></a>
<span class="sourceLineNo">069</span>  /**<a name="line.69"></a>
<span class="sourceLineNo">070</span>   * @deprecated since 2.3.2/3.0.0; to be removed in 4.0.0 with no replacement (for internal use).<a name="line.70"></a>
<span class="sourceLineNo">071</span>   */<a name="line.71"></a>
<span class="sourceLineNo">072</span>  @Deprecated<a name="line.72"></a>
<span class="sourceLineNo">073</span>  @InterfaceAudience.Private<a name="line.73"></a>
<span class="sourceLineNo">074</span>  // Not using RegionInfoBuilder intentionally to avoid a static loading deadlock: HBASE-24896<a name="line.74"></a>
<span class="sourceLineNo">075</span>  RegionInfo UNDEFINED = new MutableRegionInfo(0, TableName.valueOf("__UNDEFINED__"),<a name="line.75"></a>
<span class="sourceLineNo">076</span>    RegionInfo.DEFAULT_REPLICA_ID);<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>   * Separator used to demarcate the encodedName in a region name<a name="line.79"></a>
<span class="sourceLineNo">080</span>   * in the new format. See description on new format above.<a name="line.80"></a>
<span class="sourceLineNo">081</span>   */<a name="line.81"></a>
<span class="sourceLineNo">082</span>  @InterfaceAudience.Private<a name="line.82"></a>
<span class="sourceLineNo">083</span>  int ENC_SEPARATOR = '.';<a name="line.83"></a>
<span class="sourceLineNo">084</span><a name="line.84"></a>
<span class="sourceLineNo">085</span>  @InterfaceAudience.Private<a name="line.85"></a>
<span class="sourceLineNo">086</span>  int MD5_HEX_LENGTH = 32;<a name="line.86"></a>
<span class="sourceLineNo">087</span><a name="line.87"></a>
<span class="sourceLineNo">088</span>  @InterfaceAudience.Private<a name="line.88"></a>
<span class="sourceLineNo">089</span>  int DEFAULT_REPLICA_ID = 0;<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>   * to keep appended int's sorted in string format. Only allows 2 bytes<a name="line.92"></a>
<span class="sourceLineNo">093</span>   * to be sorted for replicaId.<a name="line.93"></a>
<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
<span class="sourceLineNo">095</span>  @InterfaceAudience.Private<a name="line.95"></a>
<span class="sourceLineNo">096</span>  String REPLICA_ID_FORMAT = "%04X";<a name="line.96"></a>
<span class="sourceLineNo">097</span><a name="line.97"></a>
<span class="sourceLineNo">098</span>  @InterfaceAudience.Private<a name="line.98"></a>
<span class="sourceLineNo">099</span>  byte REPLICA_ID_DELIMITER = (byte)'_';<a name="line.99"></a>
<span class="sourceLineNo">100</span><a name="line.100"></a>
<span class="sourceLineNo">101</span>  @InterfaceAudience.Private<a name="line.101"></a>
<span class="sourceLineNo">102</span>  String INVALID_REGION_NAME_FORMAT_MESSAGE = "Invalid regionName format";<a name="line.102"></a>
<span class="sourceLineNo">103</span><a name="line.103"></a>
<span class="sourceLineNo">104</span>  @InterfaceAudience.Private<a name="line.104"></a>
<span class="sourceLineNo">105</span>  Comparator&lt;RegionInfo&gt; COMPARATOR<a name="line.105"></a>
<span class="sourceLineNo">106</span>    = (RegionInfo lhs, RegionInfo rhs) -&gt; {<a name="line.106"></a>
<span class="sourceLineNo">107</span>      if (rhs == null) {<a name="line.107"></a>
<span class="sourceLineNo">108</span>        return 1;<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>      // Are regions of same table?<a name="line.111"></a>
<span class="sourceLineNo">112</span>      int result = lhs.getTable().compareTo(rhs.getTable());<a name="line.112"></a>
<span class="sourceLineNo">113</span>      if (result != 0) {<a name="line.113"></a>
<span class="sourceLineNo">114</span>        return result;<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>      // Compare start keys.<a name="line.117"></a>
<span class="sourceLineNo">118</span>      result = Bytes.compareTo(lhs.getStartKey(), rhs.getStartKey());<a name="line.118"></a>
<span class="sourceLineNo">119</span>      if (result != 0) {<a name="line.119"></a>
<span class="sourceLineNo">120</span>        return result;<a name="line.120"></a>
<span class="sourceLineNo">121</span>      }<a name="line.121"></a>
<span class="sourceLineNo">122</span><a name="line.122"></a>
<span class="sourceLineNo">123</span>      // Compare end keys.<a name="line.123"></a>
<span class="sourceLineNo">124</span>      result = Bytes.compareTo(lhs.getEndKey(), rhs.getEndKey());<a name="line.124"></a>
<span class="sourceLineNo">125</span><a name="line.125"></a>
<span class="sourceLineNo">126</span>      if (result != 0) {<a name="line.126"></a>
<span class="sourceLineNo">127</span>        if (lhs.getStartKey().length != 0<a name="line.127"></a>
<span class="sourceLineNo">128</span>                &amp;&amp; lhs.getEndKey().length == 0) {<a name="line.128"></a>
<span class="sourceLineNo">129</span>            return 1; // this is last region<a name="line.129"></a>
<span class="sourceLineNo">130</span>        }<a name="line.130"></a>
<span class="sourceLineNo">131</span>        if (rhs.getStartKey().length != 0<a name="line.131"></a>
<span class="sourceLineNo">132</span>                &amp;&amp; rhs.getEndKey().length == 0) {<a name="line.132"></a>
<span class="sourceLineNo">133</span>            return -1; // o is the last region<a name="line.133"></a>
<span class="sourceLineNo">134</span>        }<a name="line.134"></a>
<span class="sourceLineNo">135</span>        return result;<a name="line.135"></a>
<span class="sourceLineNo">136</span>      }<a name="line.136"></a>
<span class="sourceLineNo">137</span><a name="line.137"></a>
<span class="sourceLineNo">138</span>      // regionId is usually milli timestamp -- this defines older stamps<a name="line.138"></a>
<span class="sourceLineNo">139</span>      // to be "smaller" than newer stamps in sort order.<a name="line.139"></a>
<span class="sourceLineNo">140</span>      if (lhs.getRegionId() &gt; rhs.getRegionId()) {<a name="line.140"></a>
<span class="sourceLineNo">141</span>        return 1;<a name="line.141"></a>
<span class="sourceLineNo">142</span>      } else if (lhs.getRegionId() &lt; rhs.getRegionId()) {<a name="line.142"></a>
<span class="sourceLineNo">143</span>        return -1;<a name="line.143"></a>
<span class="sourceLineNo">144</span>      }<a name="line.144"></a>
<span class="sourceLineNo">145</span><a name="line.145"></a>
<span class="sourceLineNo">146</span>      int replicaDiff = lhs.getReplicaId() - rhs.getReplicaId();<a name="line.146"></a>
<span class="sourceLineNo">147</span>      if (replicaDiff != 0) {<a name="line.147"></a>
<span class="sourceLineNo">148</span>        return replicaDiff;<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>      if (lhs.isOffline() == rhs.isOffline()) {<a name="line.151"></a>
<span class="sourceLineNo">152</span>        return 0;<a name="line.152"></a>
<span class="sourceLineNo">153</span>      }<a name="line.153"></a>
<span class="sourceLineNo">154</span>      if (lhs.isOffline()) {<a name="line.154"></a>
<span class="sourceLineNo">155</span>        return -1;<a name="line.155"></a>
<span class="sourceLineNo">156</span>      }<a name="line.156"></a>
<span class="sourceLineNo">157</span><a name="line.157"></a>
<span class="sourceLineNo">158</span>      return 1;<a name="line.158"></a>
<span class="sourceLineNo">159</span>  };<a name="line.159"></a>
<span class="sourceLineNo">160</span><a name="line.160"></a>
<span class="sourceLineNo">161</span><a name="line.161"></a>
<span class="sourceLineNo">162</span>  /**<a name="line.162"></a>
<span class="sourceLineNo">163</span>   * @return Return a short, printable name for this region<a name="line.163"></a>
<span class="sourceLineNo">164</span>   * (usually encoded name) for us logging.<a name="line.164"></a>
<span class="sourceLineNo">165</span>   */<a name="line.165"></a>
<span class="sourceLineNo">166</span>  String getShortNameToLog();<a name="line.166"></a>
<span class="sourceLineNo">167</span><a name="line.167"></a>
<span class="sourceLineNo">168</span>  /**<a name="line.168"></a>
<span class="sourceLineNo">169</span>   * @return the regionId.<a name="line.169"></a>
<span class="sourceLineNo">170</span>   */<a name="line.170"></a>
<span class="sourceLineNo">171</span>  long getRegionId();<a name="line.171"></a>
<span class="sourceLineNo">172</span><a name="line.172"></a>
<span class="sourceLineNo">173</span>  /**<a name="line.173"></a>
<span class="sourceLineNo">174</span>   * @return the regionName as an array of bytes.<a name="line.174"></a>
<span class="sourceLineNo">175</span>   * @see #getRegionNameAsString()<a name="line.175"></a>
<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
<span class="sourceLineNo">177</span>  byte [] getRegionName();<a name="line.177"></a>
<span class="sourceLineNo">178</span><a name="line.178"></a>
<span class="sourceLineNo">179</span>  /**<a name="line.179"></a>
<span class="sourceLineNo">180</span>   * @return Region name as a String for use in logging, etc.<a name="line.180"></a>
<span class="sourceLineNo">181</span>   */<a name="line.181"></a>
<span class="sourceLineNo">182</span>  String getRegionNameAsString();<a name="line.182"></a>
<span class="sourceLineNo">183</span><a name="line.183"></a>
<span class="sourceLineNo">184</span>  /**<a name="line.184"></a>
<span class="sourceLineNo">185</span>   * @return the encoded region name.<a name="line.185"></a>
<span class="sourceLineNo">186</span>   */<a name="line.186"></a>
<span class="sourceLineNo">187</span>  String getEncodedName();<a name="line.187"></a>
<span class="sourceLineNo">188</span><a name="line.188"></a>
<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
<span class="sourceLineNo">190</span>   * @return the encoded region name as an array of bytes.<a name="line.190"></a>
<span class="sourceLineNo">191</span>   */<a name="line.191"></a>
<span class="sourceLineNo">192</span>  byte [] getEncodedNameAsBytes();<a name="line.192"></a>
<span class="sourceLineNo">193</span><a name="line.193"></a>
<span class="sourceLineNo">194</span>  /**<a name="line.194"></a>
<span class="sourceLineNo">195</span>   * @return the startKey.<a name="line.195"></a>
<span class="sourceLineNo">196</span>   */<a name="line.196"></a>
<span class="sourceLineNo">197</span>  byte [] getStartKey();<a name="line.197"></a>
<span class="sourceLineNo">198</span><a name="line.198"></a>
<span class="sourceLineNo">199</span>  /**<a name="line.199"></a>
<span class="sourceLineNo">200</span>   * @return the endKey.<a name="line.200"></a>
<span class="sourceLineNo">201</span>   */<a name="line.201"></a>
<span class="sourceLineNo">202</span>  byte [] getEndKey();<a name="line.202"></a>
<span class="sourceLineNo">203</span><a name="line.203"></a>
<span class="sourceLineNo">204</span>  /**<a name="line.204"></a>
<span class="sourceLineNo">205</span>   * @return current table name of the region<a name="line.205"></a>
<span class="sourceLineNo">206</span>   */<a name="line.206"></a>
<span class="sourceLineNo">207</span>  TableName getTable();<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>   * @return returns region replica id<a name="line.210"></a>
<span class="sourceLineNo">211</span>   */<a name="line.211"></a>
<span class="sourceLineNo">212</span>  int getReplicaId();<a name="line.212"></a>
<span class="sourceLineNo">213</span><a name="line.213"></a>
<span class="sourceLineNo">214</span>  /**<a name="line.214"></a>
<span class="sourceLineNo">215</span>   * @return True if has been split and has daughters.<a name="line.215"></a>
<span class="sourceLineNo">216</span>   */<a name="line.216"></a>
<span class="sourceLineNo">217</span>  boolean isSplit();<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>   * @return True if this region is offline.<a name="line.220"></a>
<span class="sourceLineNo">221</span>   */<a name="line.221"></a>
<span class="sourceLineNo">222</span>  boolean isOffline();<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>   * @return True if this is a split parent region.<a name="line.225"></a>
<span class="sourceLineNo">226</span>   */<a name="line.226"></a>
<span class="sourceLineNo">227</span>  boolean isSplitParent();<a name="line.227"></a>
<span class="sourceLineNo">228</span><a name="line.228"></a>
<span class="sourceLineNo">229</span>  /**<a name="line.229"></a>
<span class="sourceLineNo">230</span>   * @return true if this region is a meta region.<a name="line.230"></a>
<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
<span class="sourceLineNo">232</span>  boolean isMetaRegion();<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>   * @return true if the given inclusive range of rows is fully contained<a name="line.235"></a>
<span class="sourceLineNo">236</span>   * by this region. For example, if the region is foo,a,g and this is<a name="line.236"></a>
<span class="sourceLineNo">237</span>   * passed ["b","c"] or ["a","c"] it will return true, but if this is passed<a name="line.237"></a>
<span class="sourceLineNo">238</span>   * ["b","z"] it will return false.<a name="line.238"></a>
<span class="sourceLineNo">239</span>   * @throws IllegalArgumentException if the range passed is invalid (ie. end &amp;lt; start)<a name="line.239"></a>
<span class="sourceLineNo">240</span>   */<a name="line.240"></a>
<span class="sourceLineNo">241</span>  boolean containsRange(byte[] rangeStartKey, byte[] rangeEndKey);<a name="line.241"></a>
<span class="sourceLineNo">242</span><a name="line.242"></a>
<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
<span class="sourceLineNo">244</span>   * @return true if the given row falls in this region.<a name="line.244"></a>
<span class="sourceLineNo">245</span>   */<a name="line.245"></a>
<span class="sourceLineNo">246</span>  boolean containsRow(byte[] row);<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>   * Does region name contain its encoded name?<a name="line.249"></a>
<span class="sourceLineNo">250</span>   * @param regionName region name<a name="line.250"></a>
<span class="sourceLineNo">251</span>   * @return boolean indicating if this a new format region<a name="line.251"></a>
<span class="sourceLineNo">252</span>   *         name which contains its encoded name.<a name="line.252"></a>
<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
<span class="sourceLineNo">254</span>  @InterfaceAudience.Private<a name="line.254"></a>
<span class="sourceLineNo">255</span>  static boolean hasEncodedName(final byte[] regionName) {<a name="line.255"></a>
<span class="sourceLineNo">256</span>    // check if region name ends in ENC_SEPARATOR<a name="line.256"></a>
<span class="sourceLineNo">257</span>    return (regionName.length &gt;= 1) &amp;&amp;<a name="line.257"></a>
<span class="sourceLineNo">258</span>      (regionName[regionName.length - 1] == RegionInfo.ENC_SEPARATOR);<a name="line.258"></a>
<span class="sourceLineNo">259</span>  }<a name="line.259"></a>
<span class="sourceLineNo">260</span><a name="line.260"></a>
<span class="sourceLineNo">261</span>  /**<a name="line.261"></a>
<span class="sourceLineNo">262</span>   * @return the encodedName<a name="line.262"></a>
<span class="sourceLineNo">263</span>   */<a name="line.263"></a>
<span class="sourceLineNo">264</span>  @InterfaceAudience.Private<a name="line.264"></a>
<span class="sourceLineNo">265</span>  static String encodeRegionName(final byte [] regionName) {<a name="line.265"></a>
<span class="sourceLineNo">266</span>    String encodedName;<a name="line.266"></a>
<span class="sourceLineNo">267</span>    if (hasEncodedName(regionName)) {<a name="line.267"></a>
<span class="sourceLineNo">268</span>      // region is in new format:<a name="line.268"></a>
<span class="sourceLineNo">269</span>      // &lt;tableName&gt;,&lt;startKey&gt;,&lt;regionIdTimeStamp&gt;/encodedName/<a name="line.269"></a>
<span class="sourceLineNo">270</span>      encodedName = Bytes.toString(regionName,<a name="line.270"></a>
<span class="sourceLineNo">271</span>      regionName.length - MD5_HEX_LENGTH - 1,<a name="line.271"></a>
<span class="sourceLineNo">272</span>      MD5_HEX_LENGTH);<a name="line.272"></a>
<span class="sourceLineNo">273</span>    } else {<a name="line.273"></a>
<span class="sourceLineNo">274</span>      // old format region name. First hbase:meta region also<a name="line.274"></a>
<span class="sourceLineNo">275</span>      // use this format.EncodedName is the JenkinsHash value.<a name="line.275"></a>
<span class="sourceLineNo">276</span>      HashKey&lt;byte[]&gt; key = new ByteArrayHashKey(regionName, 0, regionName.length);<a name="line.276"></a>
<span class="sourceLineNo">277</span>      int hashVal = Math.abs(JenkinsHash.getInstance().hash(key, 0));<a name="line.277"></a>
<span class="sourceLineNo">278</span>      encodedName = String.valueOf(hashVal);<a name="line.278"></a>
<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
<span class="sourceLineNo">280</span>    return encodedName;<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>  @InterfaceAudience.Private<a name="line.283"></a>
<span class="sourceLineNo">284</span>  static String getRegionNameAsString(byte[] regionName) {<a name="line.284"></a>
<span class="sourceLineNo">285</span>    return getRegionNameAsString(null, regionName);<a name="line.285"></a>
<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
<span class="sourceLineNo">287</span><a name="line.287"></a>
<span class="sourceLineNo">288</span>  @InterfaceAudience.Private<a name="line.288"></a>
<span class="sourceLineNo">289</span>  static String getRegionNameAsString(@CheckForNull RegionInfo ri, byte[] regionName) {<a name="line.289"></a>
<span class="sourceLineNo">290</span>    if (RegionInfo.hasEncodedName(regionName)) {<a name="line.290"></a>
<span class="sourceLineNo">291</span>      // new format region names already have their encoded name.<a name="line.291"></a>
<span class="sourceLineNo">292</span>      return Bytes.toStringBinary(regionName);<a name="line.292"></a>
<span class="sourceLineNo">293</span>    }<a name="line.293"></a>
<span class="sourceLineNo">294</span><a name="line.294"></a>
<span class="sourceLineNo">295</span>    // old format. regionNameStr doesn't have the region name.<a name="line.295"></a>
<span class="sourceLineNo">296</span>    if (ri == null) {<a name="line.296"></a>
<span class="sourceLineNo">297</span>      return Bytes.toStringBinary(regionName) + "." + RegionInfo.encodeRegionName(regionName);<a name="line.297"></a>
<span class="sourceLineNo">298</span>    } else {<a name="line.298"></a>
<span class="sourceLineNo">299</span>      return Bytes.toStringBinary(regionName) + "." + ri.getEncodedName();<a name="line.299"></a>
<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
<span class="sourceLineNo">302</span><a name="line.302"></a>
<span class="sourceLineNo">303</span>  /**<a name="line.303"></a>
<span class="sourceLineNo">304</span>   * @return Return a String of short, printable names for &lt;code&gt;hris&lt;/code&gt;<a name="line.304"></a>
<span class="sourceLineNo">305</span>   * (usually encoded name) for us logging.<a name="line.305"></a>
<span class="sourceLineNo">306</span>   */<a name="line.306"></a>
<span class="sourceLineNo">307</span>  static String getShortNameToLog(RegionInfo...hris) {<a name="line.307"></a>
<span class="sourceLineNo">308</span>    return getShortNameToLog(Arrays.asList(hris));<a name="line.308"></a>
<span class="sourceLineNo">309</span>  }<a name="line.309"></a>
<span class="sourceLineNo">310</span><a name="line.310"></a>
<span class="sourceLineNo">311</span>  /**<a name="line.311"></a>
<span class="sourceLineNo">312</span>   * @return Return a String of short, printable names for &lt;code&gt;hris&lt;/code&gt; (usually encoded name)<a name="line.312"></a>
<span class="sourceLineNo">313</span>   *   for us logging.<a name="line.313"></a>
<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
<span class="sourceLineNo">315</span>  static String getShortNameToLog(final List&lt;RegionInfo&gt; ris) {<a name="line.315"></a>
<span class="sourceLineNo">316</span>    return ris.stream().map(RegionInfo::getEncodedName).collect(Collectors.toList()).toString();<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>   * Gets the table name from the specified region name.<a name="line.320"></a>
<span class="sourceLineNo">321</span>   * @param regionName to extract the table name from<a name="line.321"></a>
<span class="sourceLineNo">322</span>   * @return Table name<a name="line.322"></a>
<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
<span class="sourceLineNo">324</span>  @InterfaceAudience.Private<a name="line.324"></a>
<span class="sourceLineNo">325</span>  // This method should never be used. Its awful doing parse from bytes.<a name="line.325"></a>
<span class="sourceLineNo">326</span>  // It is fallback in case we can't get the tablename any other way. Could try removing it.<a name="line.326"></a>
<span class="sourceLineNo">327</span>  // Keeping it Audience Private so can remove at later date.<a name="line.327"></a>
<span class="sourceLineNo">328</span>  static TableName getTable(final byte [] regionName) {<a name="line.328"></a>
<span class="sourceLineNo">329</span>    int offset = -1;<a name="line.329"></a>
<span class="sourceLineNo">330</span>    for (int i = 0; i &lt; regionName.length; i++) {<a name="line.330"></a>
<span class="sourceLineNo">331</span>      if (regionName[i] == HConstants.DELIMITER) {<a name="line.331"></a>
<span class="sourceLineNo">332</span>        offset = i;<a name="line.332"></a>
<span class="sourceLineNo">333</span>        break;<a name="line.333"></a>
<span class="sourceLineNo">334</span>      }<a name="line.334"></a>
<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
<span class="sourceLineNo">336</span>    if (offset &lt;= 0) {<a name="line.336"></a>
<span class="sourceLineNo">337</span>      throw new IllegalArgumentException("offset=" + offset);<a name="line.337"></a>
<span class="sourceLineNo">338</span>    }<a name="line.338"></a>
<span class="sourceLineNo">339</span>    byte[] buff  = new byte[offset];<a name="line.339"></a>
<span class="sourceLineNo">340</span>    System.arraycopy(regionName, 0, buff, 0, offset);<a name="line.340"></a>
<span class="sourceLineNo">341</span>    return TableName.valueOf(buff);<a name="line.341"></a>
<span class="sourceLineNo">342</span>  }<a name="line.342"></a>
<span class="sourceLineNo">343</span><a name="line.343"></a>
<span class="sourceLineNo">344</span>  /**<a name="line.344"></a>
<span class="sourceLineNo">345</span>   * Gets the start key from the specified region name.<a name="line.345"></a>
<span class="sourceLineNo">346</span>   * @return Start key.<a name="line.346"></a>
<span class="sourceLineNo">347</span>   */<a name="line.347"></a>
<span class="sourceLineNo">348</span>  static byte[] getStartKey(final byte[] regionName) throws IOException {<a name="line.348"></a>
<span class="sourceLineNo">349</span>    return parseRegionName(regionName)[1];<a name="line.349"></a>
<span class="sourceLineNo">350</span>  }<a name="line.350"></a>
<span class="sourceLineNo">351</span><a name="line.351"></a>
<span class="sourceLineNo">352</span>  /**<a name="line.352"></a>
<span class="sourceLineNo">353</span>   * Figure if the passed bytes represent an encoded region name or not.<a name="line.353"></a>
<span class="sourceLineNo">354</span>   * @param regionName A Region name either encoded or not.<a name="line.354"></a>
<span class="sourceLineNo">355</span>   * @return True if &lt;code&gt;regionName&lt;/code&gt; represents an encoded name.<a name="line.355"></a>
<span class="sourceLineNo">356</span>   */<a name="line.356"></a>
<span class="sourceLineNo">357</span>  @InterfaceAudience.Private // For use by internals only.<a name="line.357"></a>
<span class="sourceLineNo">358</span>  public static boolean isEncodedRegionName(byte[] regionName) {<a name="line.358"></a>
<span class="sourceLineNo">359</span>    // If not parseable as region name, presume encoded. TODO: add stringency; e.g. if hex.<a name="line.359"></a>
<span class="sourceLineNo">360</span>    return parseRegionNameOrReturnNull(regionName) == null &amp;&amp; regionName.length &lt;= MD5_HEX_LENGTH;<a name="line.360"></a>
<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
<span class="sourceLineNo">362</span><a name="line.362"></a>
<span class="sourceLineNo">363</span>  /**<a name="line.363"></a>
<span class="sourceLineNo">364</span>   * @return A deserialized {@link RegionInfo}<a name="line.364"></a>
<span class="sourceLineNo">365</span>   * or null if we failed deserialize or passed bytes null<a name="line.365"></a>
<span class="sourceLineNo">366</span>   */<a name="line.366"></a>
<span class="sourceLineNo">367</span>  @InterfaceAudience.Private<a name="line.367"></a>
<span class="sourceLineNo">368</span>  static RegionInfo parseFromOrNull(final byte [] bytes) {<a name="line.368"></a>
<span class="sourceLineNo">369</span>    if (bytes == null) return null;<a name="line.369"></a>
<span class="sourceLineNo">370</span>    return parseFromOrNull(bytes, 0, bytes.length);<a name="line.370"></a>
<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
<span class="sourceLineNo">372</span><a name="line.372"></a>
<span class="sourceLineNo">373</span>  /**<a name="line.373"></a>
<span class="sourceLineNo">374</span>   * @return A deserialized {@link RegionInfo} or null<a name="line.374"></a>
<span class="sourceLineNo">375</span>   *  if we failed deserialize or passed bytes null<a name="line.375"></a>
<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
<span class="sourceLineNo">377</span>  @InterfaceAudience.Private<a name="line.377"></a>
<span class="sourceLineNo">378</span>  static RegionInfo parseFromOrNull(final byte [] bytes, int offset, int len) {<a name="line.378"></a>
<span class="sourceLineNo">379</span>    if (bytes == null || len &lt;= 0) return null;<a name="line.379"></a>
<span class="sourceLineNo">380</span>    try {<a name="line.380"></a>
<span class="sourceLineNo">381</span>      return parseFrom(bytes, offset, len);<a name="line.381"></a>
<span class="sourceLineNo">382</span>    } catch (DeserializationException e) {<a name="line.382"></a>
<span class="sourceLineNo">383</span>      return null;<a name="line.383"></a>
<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
<span class="sourceLineNo">385</span>  }<a name="line.385"></a>
<span class="sourceLineNo">386</span><a name="line.386"></a>
<span class="sourceLineNo">387</span>  /**<a name="line.387"></a>
<span class="sourceLineNo">388</span>   * @param bytes A pb RegionInfo serialized with a pb magic prefix.<a name="line.388"></a>
<span class="sourceLineNo">389</span>   * @return A deserialized {@link RegionInfo}<a name="line.389"></a>
<span class="sourceLineNo">390</span>   */<a name="line.390"></a>
<span class="sourceLineNo">391</span>  @InterfaceAudience.Private<a name="line.391"></a>
<span class="sourceLineNo">392</span>  static RegionInfo parseFrom(final byte [] bytes) throws DeserializationException {<a name="line.392"></a>
<span class="sourceLineNo">393</span>    if (bytes == null) return null;<a name="line.393"></a>
<span class="sourceLineNo">394</span>    return parseFrom(bytes, 0, bytes.length);<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>   * @param bytes A pb RegionInfo serialized with a pb magic prefix.<a name="line.398"></a>
<span class="sourceLineNo">399</span>   * @param offset starting point in the byte array<a name="line.399"></a>
<span class="sourceLineNo">400</span>   * @param len length to read on the byte array<a name="line.400"></a>
<span class="sourceLineNo">401</span>   * @return A deserialized {@link RegionInfo}<a name="line.401"></a>
<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
<span class="sourceLineNo">403</span>  @InterfaceAudience.Private<a name="line.403"></a>
<span class="sourceLineNo">404</span>  static RegionInfo parseFrom(final byte [] bytes, int offset, int len)<a name="line.404"></a>
<span class="sourceLineNo">405</span>  throws DeserializationException {<a name="line.405"></a>
<span class="sourceLineNo">406</span>    if (ProtobufUtil.isPBMagicPrefix(bytes, offset, len)) {<a name="line.406"></a>
<span class="sourceLineNo">407</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.407"></a>
<span class="sourceLineNo">408</span>      try {<a name="line.408"></a>
<span class="sourceLineNo">409</span>        HBaseProtos.RegionInfo.Builder builder = HBaseProtos.RegionInfo.newBuilder();<a name="line.409"></a>
<span class="sourceLineNo">410</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen + offset, len - pblen);<a name="line.410"></a>
<span class="sourceLineNo">411</span>        HBaseProtos.RegionInfo ri = builder.build();<a name="line.411"></a>
<span class="sourceLineNo">412</span>        return ProtobufUtil.toRegionInfo(ri);<a name="line.412"></a>
<span class="sourceLineNo">413</span>      } catch (IOException e) {<a name="line.413"></a>
<span class="sourceLineNo">414</span>        throw new DeserializationException(e);<a name="line.414"></a>
<span class="sourceLineNo">415</span>      }<a name="line.415"></a>
<span class="sourceLineNo">416</span>    } else {<a name="line.416"></a>
<span class="sourceLineNo">417</span>      throw new DeserializationException("PB encoded RegionInfo expected");<a name="line.417"></a>
<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
<span class="sourceLineNo">420</span><a name="line.420"></a>
<span class="sourceLineNo">421</span>  /**<a name="line.421"></a>
<span class="sourceLineNo">422</span>   * Check whether two regions are adjacent; i.e. lies just before or just<a name="line.422"></a>
<span class="sourceLineNo">423</span>   * after in a table.<a name="line.423"></a>
<span class="sourceLineNo">424</span>   * @return true if two regions are adjacent<a name="line.424"></a>
<span class="sourceLineNo">425</span>   */<a name="line.425"></a>
<span class="sourceLineNo">426</span>  static boolean areAdjacent(RegionInfo regionA, RegionInfo regionB) {<a name="line.426"></a>
<span class="sourceLineNo">427</span>    if (regionA == null || regionB == null) {<a name="line.427"></a>
<span class="sourceLineNo">428</span>      throw new IllegalArgumentException(<a name="line.428"></a>
<span class="sourceLineNo">429</span>      "Can't check whether adjacent for null region");<a name="line.429"></a>
<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
<span class="sourceLineNo">431</span>    if (!regionA.getTable().equals(regionB.getTable())) {<a name="line.431"></a>
<span class="sourceLineNo">432</span>      return false;<a name="line.432"></a>
<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
<span class="sourceLineNo">434</span>    RegionInfo a = regionA;<a name="line.434"></a>
<span class="sourceLineNo">435</span>    RegionInfo b = regionB;<a name="line.435"></a>
<span class="sourceLineNo">436</span>    if (Bytes.compareTo(a.getStartKey(), b.getStartKey()) &gt; 0) {<a name="line.436"></a>
<span class="sourceLineNo">437</span>      a = regionB;<a name="line.437"></a>
<span class="sourceLineNo">438</span>      b = regionA;<a name="line.438"></a>
<span class="sourceLineNo">439</span>    }<a name="line.439"></a>
<span class="sourceLineNo">440</span>    return Bytes.equals(a.getEndKey(), b.getStartKey());<a name="line.440"></a>
<span class="sourceLineNo">441</span>  }<a name="line.441"></a>
<span class="sourceLineNo">442</span><a name="line.442"></a>
<span class="sourceLineNo">443</span>  /**<a name="line.443"></a>
<span class="sourceLineNo">444</span>   * @return This instance serialized as protobuf w/ a magic pb prefix.<a name="line.444"></a>
<span class="sourceLineNo">445</span>   * @see #parseFrom(byte[])<a name="line.445"></a>
<span class="sourceLineNo">446</span>   */<a name="line.446"></a>
<span class="sourceLineNo">447</span>  static byte [] toByteArray(RegionInfo ri) {<a name="line.447"></a>
<span class="sourceLineNo">448</span>    byte [] bytes = ProtobufUtil.toRegionInfo(ri).toByteArray();<a name="line.448"></a>
<span class="sourceLineNo">449</span>    return ProtobufUtil.prependPBMagic(bytes);<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>   * Use logging.<a name="line.453"></a>
<span class="sourceLineNo">454</span>   * @param encodedRegionName The encoded regionname.<a name="line.454"></a>
<span class="sourceLineNo">455</span>   * @return &lt;code&gt;hbase:meta&lt;/code&gt; if passed &lt;code&gt;1028785192&lt;/code&gt; else returns<a name="line.455"></a>
<span class="sourceLineNo">456</span>   * &lt;code&gt;encodedRegionName&lt;/code&gt;<a name="line.456"></a>
<span class="sourceLineNo">457</span>   */<a name="line.457"></a>
<span class="sourceLineNo">458</span>  static String prettyPrint(final String encodedRegionName) {<a name="line.458"></a>
<span class="sourceLineNo">459</span>    if (encodedRegionName.equals("1028785192")) {<a name="line.459"></a>
<span class="sourceLineNo">460</span>      return encodedRegionName + "/hbase:meta";<a name="line.460"></a>
<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
<span class="sourceLineNo">462</span>    return encodedRegionName;<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>  /**<a name="line.465"></a>
<span class="sourceLineNo">466</span>   * Make a region name of passed parameters.<a name="line.466"></a>
<span class="sourceLineNo">467</span>   * @param startKey Can be null<a name="line.467"></a>
<span class="sourceLineNo">468</span>   * @param regionid Region id (Usually timestamp from when region was created).<a name="line.468"></a>
<span class="sourceLineNo">469</span>   * @param newFormat should we create the region name in the new format<a name="line.469"></a>
<span class="sourceLineNo">470</span>   *                  (such that it contains its encoded name?).<a name="line.470"></a>
<span class="sourceLineNo">471</span>   * @return Region name made of passed tableName, startKey and id<a name="line.471"></a>
<span class="sourceLineNo">472</span>   */<a name="line.472"></a>
<span class="sourceLineNo">473</span>  static byte [] createRegionName(final TableName tableName, final byte[] startKey,<a name="line.473"></a>
<span class="sourceLineNo">474</span>                                  final long regionid, boolean newFormat) {<a name="line.474"></a>
<span class="sourceLineNo">475</span>    return createRegionName(tableName, startKey, Long.toString(regionid), newFormat);<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>  /**<a name="line.478"></a>
<span class="sourceLineNo">479</span>   * Make a region name of passed parameters.<a name="line.479"></a>
<span class="sourceLineNo">480</span>   * @param startKey Can be null<a name="line.480"></a>
<span class="sourceLineNo">481</span>   * @param id Region id (Usually timestamp from when region was created).<a name="line.481"></a>
<span class="sourceLineNo">482</span>   * @param newFormat should we create the region name in the new format<a name="line.482"></a>
<span class="sourceLineNo">483</span>   *                  (such that it contains its encoded name?).<a name="line.483"></a>
<span class="sourceLineNo">484</span>   * @return Region name made of passed tableName, startKey and id<a name="line.484"></a>
<span class="sourceLineNo">485</span>   */<a name="line.485"></a>
<span class="sourceLineNo">486</span>  static byte [] createRegionName(final TableName tableName,<a name="line.486"></a>
<span class="sourceLineNo">487</span>                                  final byte[] startKey, final String id, boolean newFormat) {<a name="line.487"></a>
<span class="sourceLineNo">488</span>    return createRegionName(tableName, startKey, Bytes.toBytes(id), newFormat);<a name="line.488"></a>
<span class="sourceLineNo">489</span>  }<a name="line.489"></a>
<span class="sourceLineNo">490</span><a name="line.490"></a>
<span class="sourceLineNo">491</span>  /**<a name="line.491"></a>
<span class="sourceLineNo">492</span>   * Make a region name of passed parameters.<a name="line.492"></a>
<span class="sourceLineNo">493</span>   * @param startKey Can be null<a name="line.493"></a>
<span class="sourceLineNo">494</span>   * @param regionid Region id (Usually timestamp from when region was created).<a name="line.494"></a>
<span class="sourceLineNo">495</span>   * @param newFormat should we create the region name in the new format<a name="line.495"></a>
<span class="sourceLineNo">496</span>   *                  (such that it contains its encoded name?).<a name="line.496"></a>
<span class="sourceLineNo">497</span>   * @return Region name made of passed tableName, startKey, id and replicaId<a name="line.497"></a>
<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
<span class="sourceLineNo">499</span>  static byte [] createRegionName(final TableName tableName,<a name="line.499"></a>
<span class="sourceLineNo">500</span>      final byte[] startKey, final long regionid, int replicaId, boolean newFormat) {<a name="line.500"></a>
<span class="sourceLineNo">501</span>    return createRegionName(tableName, startKey, Bytes.toBytes(Long.toString(regionid)),<a name="line.501"></a>
<span class="sourceLineNo">502</span>      replicaId, newFormat);<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>   * Make a region name of passed parameters.<a name="line.506"></a>
<span class="sourceLineNo">507</span>   * @param startKey Can be null<a name="line.507"></a>
<span class="sourceLineNo">508</span>   * @param id Region id (Usually timestamp from when region was created).<a name="line.508"></a>
<span class="sourceLineNo">509</span>   * @param newFormat should we create the region name in the new format<a name="line.509"></a>
<span class="sourceLineNo">510</span>   *                  (such that it contains its encoded name?).<a name="line.510"></a>
<span class="sourceLineNo">511</span>   * @return Region name made of passed tableName, startKey and id<a name="line.511"></a>
<span class="sourceLineNo">512</span>   */<a name="line.512"></a>
<span class="sourceLineNo">513</span>  static byte [] createRegionName(final TableName tableName,<a name="line.513"></a>
<span class="sourceLineNo">514</span>      final byte[] startKey, final byte[] id, boolean newFormat) {<a name="line.514"></a>
<span class="sourceLineNo">515</span>    return createRegionName(tableName, startKey, id, DEFAULT_REPLICA_ID, newFormat);<a name="line.515"></a>
<span class="sourceLineNo">516</span>  }<a name="line.516"></a>
<span class="sourceLineNo">517</span><a name="line.517"></a>
<span class="sourceLineNo">518</span>  /**<a name="line.518"></a>
<span class="sourceLineNo">519</span>   * Make a region name of passed parameters.<a name="line.519"></a>
<span class="sourceLineNo">520</span>   * @param startKey Can be null<a name="line.520"></a>
<span class="sourceLineNo">521</span>   * @param id Region id (Usually timestamp from when region was created).<a name="line.521"></a>
<span class="sourceLineNo">522</span>   * @param newFormat should we create the region name in the new format<a name="line.522"></a>
<span class="sourceLineNo">523</span>   * @return Region name made of passed tableName, startKey, id and replicaId<a name="line.523"></a>
<span class="sourceLineNo">524</span>   */<a name="line.524"></a>
<span class="sourceLineNo">525</span>  static byte [] createRegionName(final TableName tableName,<a name="line.525"></a>
<span class="sourceLineNo">526</span>      final byte[] startKey, final byte[] id, final int replicaId, boolean newFormat) {<a name="line.526"></a>
<span class="sourceLineNo">527</span>    int len = tableName.getName().length + 2 + id.length + (startKey == null? 0: startKey.length);<a name="line.527"></a>
<span class="sourceLineNo">528</span>    if (newFormat) {<a name="line.528"></a>
<span class="sourceLineNo">529</span>      len += MD5_HEX_LENGTH + 2;<a name="line.529"></a>
<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
<span class="sourceLineNo">531</span>    byte[] replicaIdBytes = null;<a name="line.531"></a>
<span class="sourceLineNo">532</span>    // Special casing: replicaId is only appended if replicaId is greater than<a name="line.532"></a>
<span class="sourceLineNo">533</span>    // 0. This is because all regions in meta would have to be migrated to the new<a name="line.533"></a>
<span class="sourceLineNo">534</span>    // name otherwise<a name="line.534"></a>
<span class="sourceLineNo">535</span>    if (replicaId &gt; 0) {<a name="line.535"></a>
<span class="sourceLineNo">536</span>      // use string representation for replica id<a name="line.536"></a>
<span class="sourceLineNo">537</span>      replicaIdBytes = Bytes.toBytes(String.format(REPLICA_ID_FORMAT, replicaId));<a name="line.537"></a>
<span class="sourceLineNo">538</span>      len += 1 + replicaIdBytes.length;<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>    byte [] b = new byte [len];<a name="line.541"></a>
<span class="sourceLineNo">542</span><a name="line.542"></a>
<span class="sourceLineNo">543</span>    int offset = tableName.getName().length;<a name="line.543"></a>
<span class="sourceLineNo">544</span>    System.arraycopy(tableName.getName(), 0, b, 0, offset);<a name="line.544"></a>
<span class="sourceLineNo">545</span>    b[offset++] = HConstants.DELIMITER;<a name="line.545"></a>
<span class="sourceLineNo">546</span>    if (startKey != null &amp;&amp; startKey.length &gt; 0) {<a name="line.546"></a>
<span class="sourceLineNo">547</span>      System.arraycopy(startKey, 0, b, offset, startKey.length);<a name="line.547"></a>
<span class="sourceLineNo">548</span>      offset += startKey.length;<a name="line.548"></a>
<span class="sourceLineNo">549</span>    }<a name="line.549"></a>
<span class="sourceLineNo">550</span>    b[offset++] = HConstants.DELIMITER;<a name="line.550"></a>
<span class="sourceLineNo">551</span>    System.arraycopy(id, 0, b, offset, id.length);<a name="line.551"></a>
<span class="sourceLineNo">552</span>    offset += id.length;<a name="line.552"></a>
<span class="sourceLineNo">553</span><a name="line.553"></a>
<span class="sourceLineNo">554</span>    if (replicaIdBytes != null) {<a name="line.554"></a>
<span class="sourceLineNo">555</span>      b[offset++] = REPLICA_ID_DELIMITER;<a name="line.555"></a>
<span class="sourceLineNo">556</span>      System.arraycopy(replicaIdBytes, 0, b, offset, replicaIdBytes.length);<a name="line.556"></a>
<span class="sourceLineNo">557</span>      offset += replicaIdBytes.length;<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>    if (newFormat) {<a name="line.560"></a>
<span class="sourceLineNo">561</span>      //<a name="line.561"></a>
<span class="sourceLineNo">562</span>      // Encoded name should be built into the region name.<a name="line.562"></a>
<span class="sourceLineNo">563</span>      //<a name="line.563"></a>
<span class="sourceLineNo">564</span>      // Use the region name thus far (namely, &lt;tablename&gt;,&lt;startKey&gt;,&lt;id&gt;_&lt;replicaId&gt;)<a name="line.564"></a>
<span class="sourceLineNo">565</span>      // to compute a MD5 hash to be used as the encoded name, and append<a name="line.565"></a>
<span class="sourceLineNo">566</span>      // it to the byte buffer.<a name="line.566"></a>
<span class="sourceLineNo">567</span>      //<a name="line.567"></a>
<span class="sourceLineNo">568</span>      String md5Hash = MD5Hash.getMD5AsHex(b, 0, offset);<a name="line.568"></a>
<span class="sourceLineNo">569</span>      byte [] md5HashBytes = Bytes.toBytes(md5Hash);<a name="line.569"></a>
<span class="sourceLineNo">570</span><a name="line.570"></a>
<span class="sourceLineNo">571</span>      if (md5HashBytes.length != MD5_HEX_LENGTH) {<a name="line.571"></a>
<span class="sourceLineNo">572</span>        System.out.println("MD5-hash length mismatch: Expected=" + MD5_HEX_LENGTH +<a name="line.572"></a>
<span class="sourceLineNo">573</span>        "; Got=" + md5HashBytes.length);<a name="line.573"></a>
<span class="sourceLineNo">574</span>      }<a name="line.574"></a>
<span class="sourceLineNo">575</span><a name="line.575"></a>
<span class="sourceLineNo">576</span>      // now append the bytes '.&lt;encodedName&gt;.' to the end<a name="line.576"></a>
<span class="sourceLineNo">577</span>      b[offset++] = ENC_SEPARATOR;<a name="line.577"></a>
<span class="sourceLineNo">578</span>      System.arraycopy(md5HashBytes, 0, b, offset, MD5_HEX_LENGTH);<a name="line.578"></a>
<span class="sourceLineNo">579</span>      offset += MD5_HEX_LENGTH;<a name="line.579"></a>
<span class="sourceLineNo">580</span>      b[offset] = ENC_SEPARATOR;<a name="line.580"></a>
<span class="sourceLineNo">581</span>    }<a name="line.581"></a>
<span class="sourceLineNo">582</span><a name="line.582"></a>
<span class="sourceLineNo">583</span>    return b;<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>  /**<a name="line.586"></a>
<span class="sourceLineNo">587</span>   * Creates a RegionInfo object for MOB data.<a name="line.587"></a>
<span class="sourceLineNo">588</span>   *<a name="line.588"></a>
<span class="sourceLineNo">589</span>   * @param tableName the name of the table<a name="line.589"></a>
<span class="sourceLineNo">590</span>   * @return the MOB {@link RegionInfo}.<a name="line.590"></a>
<span class="sourceLineNo">591</span>   */<a name="line.591"></a>
<span class="sourceLineNo">592</span>  static RegionInfo createMobRegionInfo(TableName tableName) {<a name="line.592"></a>
<span class="sourceLineNo">593</span>    // Skipping reference to RegionInfoBuilder in this class.<a name="line.593"></a>
<span class="sourceLineNo">594</span>    return new MutableRegionInfo(tableName, Bytes.toBytes(".mob"),<a name="line.594"></a>
<span class="sourceLineNo">595</span>      HConstants.EMPTY_END_ROW, false, 0, DEFAULT_REPLICA_ID, false);<a name="line.595"></a>
<span class="sourceLineNo">596</span>  }<a name="line.596"></a>
<span class="sourceLineNo">597</span><a name="line.597"></a>
<span class="sourceLineNo">598</span>  /**<a name="line.598"></a>
<span class="sourceLineNo">599</span>   * Separate elements of a regionName.<a name="line.599"></a>
<span class="sourceLineNo">600</span>   * @return Array of byte[] containing tableName, startKey and id OR null if<a name="line.600"></a>
<span class="sourceLineNo">601</span>   *   not parseable as a region name.<a name="line.601"></a>
<span class="sourceLineNo">602</span>   * @throws IOException if not parseable as regionName.<a name="line.602"></a>
<span class="sourceLineNo">603</span>   */<a name="line.603"></a>
<span class="sourceLineNo">604</span>  static byte [][] parseRegionName(final byte[] regionName) throws IOException {<a name="line.604"></a>
<span class="sourceLineNo">605</span>    byte [][] result = parseRegionNameOrReturnNull(regionName);<a name="line.605"></a>
<span class="sourceLineNo">606</span>    if (result == null) {<a name="line.606"></a>
<span class="sourceLineNo">607</span>      throw new IOException(INVALID_REGION_NAME_FORMAT_MESSAGE + ": " + Bytes.toStringBinary(regionName));<a name="line.607"></a>
<span class="sourceLineNo">608</span>    }<a name="line.608"></a>
<span class="sourceLineNo">609</span>    return result;<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>   * Separate elements of a regionName.<a name="line.613"></a>
<span class="sourceLineNo">614</span>   * Region name is of the format:<a name="line.614"></a>
<span class="sourceLineNo">615</span>   * &lt;code&gt;tablename,startkey,regionIdTimestamp[_replicaId][.encodedName.]&lt;/code&gt;.<a name="line.615"></a>
<span class="sourceLineNo">616</span>   * Startkey can contain the delimiter (',') so we parse from the start and then parse from<a name="line.616"></a>
<span class="sourceLineNo">617</span>   * the end.<a name="line.617"></a>
<span class="sourceLineNo">618</span>   * @return Array of byte[] containing tableName, startKey and id OR null if not parseable<a name="line.618"></a>
<span class="sourceLineNo">619</span>   * as a region name.<a name="line.619"></a>
<span class="sourceLineNo">620</span>   */<a name="line.620"></a>
<span class="sourceLineNo">621</span>  static byte [][] parseRegionNameOrReturnNull(final byte[] regionName) {<a name="line.621"></a>
<span class="sourceLineNo">622</span>    int offset = -1;<a name="line.622"></a>
<span class="sourceLineNo">623</span>    for (int i = 0; i &lt; regionName.length; i++) {<a name="line.623"></a>
<span class="sourceLineNo">624</span>      if (regionName[i] == HConstants.DELIMITER) {<a name="line.624"></a>
<span class="sourceLineNo">625</span>        offset = i;<a name="line.625"></a>
<span class="sourceLineNo">626</span>        break;<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>    if (offset == -1) {<a name="line.629"></a>
<span class="sourceLineNo">630</span>      return null;<a name="line.630"></a>
<span class="sourceLineNo">631</span>    }<a name="line.631"></a>
<span class="sourceLineNo">632</span>    byte[] tableName = new byte[offset];<a name="line.632"></a>
<span class="sourceLineNo">633</span>    System.arraycopy(regionName, 0, tableName, 0, offset);<a name="line.633"></a>
<span class="sourceLineNo">634</span>    offset = -1;<a name="line.634"></a>
<span class="sourceLineNo">635</span><a name="line.635"></a>
<span class="sourceLineNo">636</span>    int endOffset = regionName.length;<a name="line.636"></a>
<span class="sourceLineNo">637</span>    // check whether regionName contains encodedName<a name="line.637"></a>
<span class="sourceLineNo">638</span>    if (regionName.length &gt; MD5_HEX_LENGTH + 2 &amp;&amp;<a name="line.638"></a>
<span class="sourceLineNo">639</span>        regionName[regionName.length-1] == ENC_SEPARATOR &amp;&amp;<a name="line.639"></a>
<span class="sourceLineNo">640</span>        regionName[regionName.length-MD5_HEX_LENGTH-2] == ENC_SEPARATOR) {<a name="line.640"></a>
<span class="sourceLineNo">641</span>      endOffset = endOffset - MD5_HEX_LENGTH - 2;<a name="line.641"></a>
<span class="sourceLineNo">642</span>    }<a name="line.642"></a>
<span class="sourceLineNo">643</span><a name="line.643"></a>
<span class="sourceLineNo">644</span>    // parse from end<a name="line.644"></a>
<span class="sourceLineNo">645</span>    byte[] replicaId = null;<a name="line.645"></a>
<span class="sourceLineNo">646</span>    int idEndOffset = endOffset;<a name="line.646"></a>
<span class="sourceLineNo">647</span>    for (int i = endOffset - 1; i &gt; 0; i--) {<a name="line.647"></a>
<span class="sourceLineNo">648</span>      if (regionName[i] == REPLICA_ID_DELIMITER) { //replicaId may or may not be present<a name="line.648"></a>
<span class="sourceLineNo">649</span>        replicaId = new byte[endOffset - i - 1];<a name="line.649"></a>
<span class="sourceLineNo">650</span>        System.arraycopy(regionName, i + 1, replicaId, 0,<a name="line.650"></a>
<span class="sourceLineNo">651</span>        endOffset - i - 1);<a name="line.651"></a>
<span class="sourceLineNo">652</span>        idEndOffset = i;<a name="line.652"></a>
<span class="sourceLineNo">653</span>        // do not break, continue to search for id<a name="line.653"></a>
<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
<span class="sourceLineNo">655</span>      if (regionName[i] == HConstants.DELIMITER) {<a name="line.655"></a>
<span class="sourceLineNo">656</span>        offset = i;<a name="line.656"></a>
<span class="sourceLineNo">657</span>        break;<a name="line.657"></a>
<span class="sourceLineNo">658</span>      }<a name="line.658"></a>
<span class="sourceLineNo">659</span>    }<a name="line.659"></a>
<span class="sourceLineNo">660</span>    if (offset == -1) {<a name="line.660"></a>
<span class="sourceLineNo">661</span>      return null;<a name="line.661"></a>
<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
<span class="sourceLineNo">663</span>    byte [] startKey = HConstants.EMPTY_BYTE_ARRAY;<a name="line.663"></a>
<span class="sourceLineNo">664</span>    if(offset != tableName.length + 1) {<a name="line.664"></a>
<span class="sourceLineNo">665</span>      startKey = new byte[offset - tableName.length - 1];<a name="line.665"></a>
<span class="sourceLineNo">666</span>      System.arraycopy(regionName, tableName.length + 1, startKey, 0,<a name="line.666"></a>
<span class="sourceLineNo">667</span>      offset - tableName.length - 1);<a name="line.667"></a>
<span class="sourceLineNo">668</span>    }<a name="line.668"></a>
<span class="sourceLineNo">669</span>    byte [] id = new byte[idEndOffset - offset - 1];<a name="line.669"></a>
<span class="sourceLineNo">670</span>    System.arraycopy(regionName, offset + 1, id, 0,<a name="line.670"></a>
<span class="sourceLineNo">671</span>    idEndOffset - offset - 1);<a name="line.671"></a>
<span class="sourceLineNo">672</span>    byte [][] elements = new byte[replicaId == null ? 3 : 4][];<a name="line.672"></a>
<span class="sourceLineNo">673</span>    elements[0] = tableName;<a name="line.673"></a>
<span class="sourceLineNo">674</span>    elements[1] = startKey;<a name="line.674"></a>
<span class="sourceLineNo">675</span>    elements[2] = id;<a name="line.675"></a>
<span class="sourceLineNo">676</span>    if (replicaId != null) {<a name="line.676"></a>
<span class="sourceLineNo">677</span>      elements[3] = replicaId;<a name="line.677"></a>
<span class="sourceLineNo">678</span>    }<a name="line.678"></a>
<span class="sourceLineNo">679</span>    return elements;<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>  /**<a name="line.682"></a>
<span class="sourceLineNo">683</span>   * Serializes given RegionInfo's as a byte array. Use this instead of<a name="line.683"></a>
<span class="sourceLineNo">684</span>   * {@link RegionInfo#toByteArray(RegionInfo)} when<a name="line.684"></a>
<span class="sourceLineNo">685</span>   * writing to a stream and you want to use the pb mergeDelimitedFrom (w/o the delimiter, pb reads<a name="line.685"></a>
<span class="sourceLineNo">686</span>   * to EOF which may not be what you want). {@link #parseDelimitedFrom(byte[], int, int)} can<a name="line.686"></a>
<span class="sourceLineNo">687</span>   * be used to read back the instances.<a name="line.687"></a>
<span class="sourceLineNo">688</span>   * @param infos RegionInfo objects to serialize<a name="line.688"></a>
<span class="sourceLineNo">689</span>   * @return This instance serialized as a delimited protobuf w/ a magic pb prefix.<a name="line.689"></a>
<span class="sourceLineNo">690</span>   */<a name="line.690"></a>
<span class="sourceLineNo">691</span>  static byte[] toDelimitedByteArray(RegionInfo... infos) throws IOException {<a name="line.691"></a>
<span class="sourceLineNo">692</span>    byte[][] bytes = new byte[infos.length][];<a name="line.692"></a>
<span class="sourceLineNo">693</span>    int size = 0;<a name="line.693"></a>
<span class="sourceLineNo">694</span>    for (int i = 0; i &lt; infos.length; i++) {<a name="line.694"></a>
<span class="sourceLineNo">695</span>      bytes[i] = toDelimitedByteArray(infos[i]);<a name="line.695"></a>
<span class="sourceLineNo">696</span>      size += bytes[i].length;<a name="line.696"></a>
<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
<span class="sourceLineNo">698</span><a name="line.698"></a>
<span class="sourceLineNo">699</span>    byte[] result = new byte[size];<a name="line.699"></a>
<span class="sourceLineNo">700</span>    int offset = 0;<a name="line.700"></a>
<span class="sourceLineNo">701</span>    for (byte[] b : bytes) {<a name="line.701"></a>
<span class="sourceLineNo">702</span>      System.arraycopy(b, 0, result, offset, b.length);<a name="line.702"></a>
<span class="sourceLineNo">703</span>      offset += b.length;<a name="line.703"></a>
<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
<span class="sourceLineNo">705</span>    return result;<a name="line.705"></a>
<span class="sourceLineNo">706</span>  }<a name="line.706"></a>
<span class="sourceLineNo">707</span><a name="line.707"></a>
<span class="sourceLineNo">708</span>  /**<a name="line.708"></a>
<span class="sourceLineNo">709</span>   * Use this instead of {@link RegionInfo#toByteArray(RegionInfo)} when writing to a stream and you want to use<a name="line.709"></a>
<span class="sourceLineNo">710</span>   * the pb mergeDelimitedFrom (w/o the delimiter, pb reads to EOF which may not be what you want).<a name="line.710"></a>
<span class="sourceLineNo">711</span>   * @return This instance serialized as a delimied protobuf w/ a magic pb prefix.<a name="line.711"></a>
<span class="sourceLineNo">712</span>   */<a name="line.712"></a>
<span class="sourceLineNo">713</span>  static byte [] toDelimitedByteArray(RegionInfo ri) throws IOException {<a name="line.713"></a>
<span class="sourceLineNo">714</span>    return ProtobufUtil.toDelimitedByteArray(ProtobufUtil.toRegionInfo(ri));<a name="line.714"></a>
<span class="sourceLineNo">715</span>  }<a name="line.715"></a>
<span class="sourceLineNo">716</span><a name="line.716"></a>
<span class="sourceLineNo">717</span>  /**<a name="line.717"></a>
<span class="sourceLineNo">718</span>   * Parses an RegionInfo instance from the passed in stream.<a name="line.718"></a>
<span class="sourceLineNo">719</span>   * Presumes the RegionInfo was serialized to the stream with<a name="line.719"></a>
<span class="sourceLineNo">720</span>   * {@link #toDelimitedByteArray(RegionInfo)}.<a name="line.720"></a>
<span class="sourceLineNo">721</span>   * @return An instance of RegionInfo.<a name="line.721"></a>
<span class="sourceLineNo">722</span>   */<a name="line.722"></a>
<span class="sourceLineNo">723</span>  static RegionInfo parseFrom(final DataInputStream in) throws IOException {<a name="line.723"></a>
<span class="sourceLineNo">724</span>    // I need to be able to move back in the stream if this is not a pb<a name="line.724"></a>
<span class="sourceLineNo">725</span>    // serialization so I can do the Writable decoding instead.<a name="line.725"></a>
<span class="sourceLineNo">726</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.726"></a>
<span class="sourceLineNo">727</span>    byte [] pbuf = new byte[pblen];<a name="line.727"></a>
<span class="sourceLineNo">728</span>    if (in.markSupported()) { //read it with mark()<a name="line.728"></a>
<span class="sourceLineNo">729</span>      in.mark(pblen);<a name="line.729"></a>
<span class="sourceLineNo">730</span>    }<a name="line.730"></a>
<span class="sourceLineNo">731</span><a name="line.731"></a>
<span class="sourceLineNo">732</span>    //assumption: if Writable serialization, it should be longer than pblen.<a name="line.732"></a>
<span class="sourceLineNo">733</span>    int read = in.read(pbuf);<a name="line.733"></a>
<span class="sourceLineNo">734</span>    if (read != pblen) throw new IOException("read=" + read + ", wanted=" + pblen);<a name="line.734"></a>
<span class="sourceLineNo">735</span>    if (ProtobufUtil.isPBMagicPrefix(pbuf)) {<a name="line.735"></a>
<span class="sourceLineNo">736</span>      return ProtobufUtil.toRegionInfo(HBaseProtos.RegionInfo.parseDelimitedFrom(in));<a name="line.736"></a>
<span class="sourceLineNo">737</span>    } else {<a name="line.737"></a>
<span class="sourceLineNo">738</span>      throw new IOException("PB encoded RegionInfo expected");<a name="line.738"></a>
<span class="sourceLineNo">739</span>    }<a name="line.739"></a>
<span class="sourceLineNo">740</span>  }<a name="line.740"></a>
<span class="sourceLineNo">741</span><a name="line.741"></a>
<span class="sourceLineNo">742</span>  /**<a name="line.742"></a>
<span class="sourceLineNo">743</span>   * Parses all the RegionInfo instances from the passed in stream until EOF. Presumes the<a name="line.743"></a>
<span class="sourceLineNo">744</span>   * RegionInfo's were serialized to the stream with oDelimitedByteArray()<a name="line.744"></a>
<span class="sourceLineNo">745</span>   * @param bytes serialized bytes<a name="line.745"></a>
<span class="sourceLineNo">746</span>   * @param offset the start offset into the byte[] buffer<a name="line.746"></a>
<span class="sourceLineNo">747</span>   * @param length how far we should read into the byte[] buffer<a name="line.747"></a>
<span class="sourceLineNo">748</span>   * @return All the RegionInfos that are in the byte array. Keeps reading till we hit the end.<a name="line.748"></a>
<span class="sourceLineNo">749</span>   */<a name="line.749"></a>
<span class="sourceLineNo">750</span>  static List&lt;RegionInfo&gt; parseDelimitedFrom(final byte[] bytes, final int offset,<a name="line.750"></a>
<span class="sourceLineNo">751</span>                                             final int length) throws IOException {<a name="line.751"></a>
<span class="sourceLineNo">752</span>    if (bytes == null) {<a name="line.752"></a>
<span class="sourceLineNo">753</span>      throw new IllegalArgumentException("Can't build an object with empty bytes array");<a name="line.753"></a>
<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
<span class="sourceLineNo">755</span>    List&lt;RegionInfo&gt; ris = new ArrayList&lt;&gt;();<a name="line.755"></a>
<span class="sourceLineNo">756</span>    try (DataInputBuffer in = new DataInputBuffer()) {<a name="line.756"></a>
<span class="sourceLineNo">757</span>      in.reset(bytes, offset, length);<a name="line.757"></a>
<span class="sourceLineNo">758</span>      while (in.available() &gt; 0) {<a name="line.758"></a>
<span class="sourceLineNo">759</span>        RegionInfo ri = parseFrom(in);<a name="line.759"></a>
<span class="sourceLineNo">760</span>        ris.add(ri);<a name="line.760"></a>
<span class="sourceLineNo">761</span>      }<a name="line.761"></a>
<span class="sourceLineNo">762</span>    }<a name="line.762"></a>
<span class="sourceLineNo">763</span>    return ris;<a name="line.763"></a>
<span class="sourceLineNo">764</span>  }<a name="line.764"></a>
<span class="sourceLineNo">765</span><a name="line.765"></a>
<span class="sourceLineNo">766</span>  /**<a name="line.766"></a>
<span class="sourceLineNo">767</span>   * @return True if this is first Region in Table<a name="line.767"></a>
<span class="sourceLineNo">768</span>   */<a name="line.768"></a>
<span class="sourceLineNo">769</span>  default boolean isFirst() {<a name="line.769"></a>
<span class="sourceLineNo">770</span>    return Bytes.equals(getStartKey(), HConstants.EMPTY_START_ROW);<a name="line.770"></a>
<span class="sourceLineNo">771</span>  }<a name="line.771"></a>
<span class="sourceLineNo">772</span><a name="line.772"></a>
<span class="sourceLineNo">773</span>  /**<a name="line.773"></a>
<span class="sourceLineNo">774</span>   * @return True if this is last Region in Table<a name="line.774"></a>
<span class="sourceLineNo">775</span>   */<a name="line.775"></a>
<span class="sourceLineNo">776</span>  default boolean isLast() {<a name="line.776"></a>
<span class="sourceLineNo">777</span>    return Bytes.equals(getEndKey(), HConstants.EMPTY_END_ROW);<a name="line.777"></a>
<span class="sourceLineNo">778</span>  }<a name="line.778"></a>
<span class="sourceLineNo">779</span><a name="line.779"></a>
<span class="sourceLineNo">780</span>  /**<a name="line.780"></a>
<span class="sourceLineNo">781</span>   * @return True if region is next, adjacent but 'after' this one.<a name="line.781"></a>
<span class="sourceLineNo">782</span>   * @see #isAdjacent(RegionInfo)<a name="line.782"></a>
<span class="sourceLineNo">783</span>   * @see #areAdjacent(RegionInfo, RegionInfo)<a name="line.783"></a>
<span class="sourceLineNo">784</span>   */<a name="line.784"></a>
<span class="sourceLineNo">785</span>  default boolean isNext(RegionInfo after) {<a name="line.785"></a>
<span class="sourceLineNo">786</span>    return getTable().equals(after.getTable()) &amp;&amp; Bytes.equals(getEndKey(), after.getStartKey());<a name="line.786"></a>
<span class="sourceLineNo">787</span>  }<a name="line.787"></a>
<span class="sourceLineNo">788</span><a name="line.788"></a>
<span class="sourceLineNo">789</span>  /**<a name="line.789"></a>
<span class="sourceLineNo">790</span>   * @return True if region is adjacent, either just before or just after this one.<a name="line.790"></a>
<span class="sourceLineNo">791</span>   * @see #isNext(RegionInfo)<a name="line.791"></a>
<span class="sourceLineNo">792</span>   */<a name="line.792"></a>
<span class="sourceLineNo">793</span>  default boolean isAdjacent(RegionInfo other) {<a name="line.793"></a>
<span class="sourceLineNo">794</span>    return getTable().equals(other.getTable()) &amp;&amp; areAdjacent(this, other);<a name="line.794"></a>
<span class="sourceLineNo">795</span>  }<a name="line.795"></a>
<span class="sourceLineNo">796</span><a name="line.796"></a>
<span class="sourceLineNo">797</span>  /**<a name="line.797"></a>
<span class="sourceLineNo">798</span>   * @return True if RegionInfo is degenerate... if startKey &gt; endKey.<a name="line.798"></a>
<span class="sourceLineNo">799</span>   */<a name="line.799"></a>
<span class="sourceLineNo">800</span>  default boolean isDegenerate() {<a name="line.800"></a>
<span class="sourceLineNo">801</span>    return !isLast() &amp;&amp; Bytes.compareTo(getStartKey(), getEndKey()) &gt; 0;<a name="line.801"></a>
<span class="sourceLineNo">802</span>  }<a name="line.802"></a>
<span class="sourceLineNo">803</span><a name="line.803"></a>
<span class="sourceLineNo">804</span>  /**<a name="line.804"></a>
<span class="sourceLineNo">805</span>   * @return True if an overlap in region range.<a name="line.805"></a>
<span class="sourceLineNo">806</span>   * @see #isDegenerate()<a name="line.806"></a>
<span class="sourceLineNo">807</span>   */<a name="line.807"></a>
<span class="sourceLineNo">808</span>  default boolean isOverlap(RegionInfo other) {<a name="line.808"></a>
<span class="sourceLineNo">809</span>    if (other == null) {<a name="line.809"></a>
<span class="sourceLineNo">810</span>      return false;<a name="line.810"></a>
<span class="sourceLineNo">811</span>    }<a name="line.811"></a>
<span class="sourceLineNo">812</span>    if (!getTable().equals(other.getTable())) {<a name="line.812"></a>
<span class="sourceLineNo">813</span>      return false;<a name="line.813"></a>
<span class="sourceLineNo">814</span>    }<a name="line.814"></a>
<span class="sourceLineNo">815</span>    int startKeyCompare = Bytes.compareTo(getStartKey(), other.getStartKey());<a name="line.815"></a>
<span class="sourceLineNo">816</span>    if (startKeyCompare == 0) {<a name="line.816"></a>
<span class="sourceLineNo">817</span>      return true;<a name="line.817"></a>
<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
<span class="sourceLineNo">819</span>    if (startKeyCompare &lt; 0) {<a name="line.819"></a>
<span class="sourceLineNo">820</span>      if (isLast()) {<a name="line.820"></a>
<span class="sourceLineNo">821</span>        return true;<a name="line.821"></a>
<span class="sourceLineNo">822</span>      }<a name="line.822"></a>
<span class="sourceLineNo">823</span>      return Bytes.compareTo(getEndKey(), other.getStartKey()) &gt; 0;<a name="line.823"></a>
<span class="sourceLineNo">824</span>    }<a name="line.824"></a>
<span class="sourceLineNo">825</span>    if (other.isLast()) {<a name="line.825"></a>
<span class="sourceLineNo">826</span>      return true;<a name="line.826"></a>
<span class="sourceLineNo">827</span>    }<a name="line.827"></a>
<span class="sourceLineNo">828</span>    return Bytes.compareTo(getStartKey(), other.getEndKey()) &lt; 0;<a name="line.828"></a>
<span class="sourceLineNo">829</span>  }<a name="line.829"></a>
<span class="sourceLineNo">830</span><a name="line.830"></a>
<span class="sourceLineNo">831</span>  default int compareTo(RegionInfo other) {<a name="line.831"></a>
<span class="sourceLineNo">832</span>    return RegionInfo.COMPARATOR.compare(this, other);<a name="line.832"></a>
<span class="sourceLineNo">833</span>  }<a name="line.833"></a>
<span class="sourceLineNo">834</span>}<a name="line.834"></a>




























































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