blob: dbb4e2394ee3b0c88bec1cb22ab317e8045f4c8a [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) -->
<title>Source code</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="source: package: org.apache.hadoop.hbase.client, class: MutableRegionInfo">
<meta name="generator" content="javadoc/SourceToHTMLConverter">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body class="source-page">
<main role="main">
<div class="source-container">
<pre><span class="source-line-no">001</span><span id="line-1">/*</span>
<span class="source-line-no">002</span><span id="line-2"> * Licensed to the Apache Software Foundation (ASF) under one</span>
<span class="source-line-no">003</span><span id="line-3"> * or more contributor license agreements. See the NOTICE file</span>
<span class="source-line-no">004</span><span id="line-4"> * distributed with this work for additional information</span>
<span class="source-line-no">005</span><span id="line-5"> * regarding copyright ownership. The ASF licenses this file</span>
<span class="source-line-no">006</span><span id="line-6"> * to you under the Apache License, Version 2.0 (the</span>
<span class="source-line-no">007</span><span id="line-7"> * "License"); you may not use this file except in compliance</span>
<span class="source-line-no">008</span><span id="line-8"> * with the License. You may obtain a copy of the License at</span>
<span class="source-line-no">009</span><span id="line-9"> *</span>
<span class="source-line-no">010</span><span id="line-10"> * http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="source-line-no">011</span><span id="line-11"> *</span>
<span class="source-line-no">012</span><span id="line-12"> * Unless required by applicable law or agreed to in writing, software</span>
<span class="source-line-no">013</span><span id="line-13"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
<span class="source-line-no">014</span><span id="line-14"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
<span class="source-line-no">015</span><span id="line-15"> * See the License for the specific language governing permissions and</span>
<span class="source-line-no">016</span><span id="line-16"> * limitations under the License.</span>
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.client;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
<span class="source-line-no">020</span><span id="line-20">import java.util.Arrays;</span>
<span class="source-line-no">021</span><span id="line-21">import org.apache.hadoop.hbase.CellComparator;</span>
<span class="source-line-no">022</span><span id="line-22">import org.apache.hadoop.hbase.CellComparatorImpl;</span>
<span class="source-line-no">023</span><span id="line-23">import org.apache.hadoop.hbase.HConstants;</span>
<span class="source-line-no">024</span><span id="line-24">import org.apache.hadoop.hbase.TableName;</span>
<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.util.Bytes;</span>
<span class="source-line-no">026</span><span id="line-26">import org.apache.yetus.audience.InterfaceAudience;</span>
<span class="source-line-no">027</span><span id="line-27">import org.slf4j.Logger;</span>
<span class="source-line-no">028</span><span id="line-28">import org.slf4j.LoggerFactory;</span>
<span class="source-line-no">029</span><span id="line-29"></span>
<span class="source-line-no">030</span><span id="line-30">/**</span>
<span class="source-line-no">031</span><span id="line-31"> * An implementation of RegionInfo that adds mutable methods so can build a RegionInfo instance.</span>
<span class="source-line-no">032</span><span id="line-32"> * Package private. Use {@link RegionInfoBuilder} creating instances of {@link RegionInfo}s.</span>
<span class="source-line-no">033</span><span id="line-33"> */</span>
<span class="source-line-no">034</span><span id="line-34">@InterfaceAudience.Private</span>
<span class="source-line-no">035</span><span id="line-35">class MutableRegionInfo implements RegionInfo {</span>
<span class="source-line-no">036</span><span id="line-36"> private static final Logger LOG = LoggerFactory.getLogger(MutableRegionInfo.class);</span>
<span class="source-line-no">037</span><span id="line-37"> private static final int MAX_REPLICA_ID = 0xFFFF;</span>
<span class="source-line-no">038</span><span id="line-38"></span>
<span class="source-line-no">039</span><span id="line-39"> /**</span>
<span class="source-line-no">040</span><span id="line-40"> * The new format for a region name contains its encodedName at the end. The encoded name also</span>
<span class="source-line-no">041</span><span id="line-41"> * serves as the directory name for the region in the filesystem. New region name format:</span>
<span class="source-line-no">042</span><span id="line-42"> * &amp;lt;tablename&gt;,,&amp;lt;startkey&gt;,&amp;lt;regionIdTimestamp&gt;.&amp;lt;encodedName&gt;. where, &amp;lt;encodedName&gt;</span>
<span class="source-line-no">043</span><span id="line-43"> * is a hex version of the MD5 hash of &amp;lt;tablename&gt;,&amp;lt;startkey&gt;,&amp;lt;regionIdTimestamp&gt; The old</span>
<span class="source-line-no">044</span><span id="line-44"> * region name format: &amp;lt;tablename&gt;,&amp;lt;startkey&gt;,&amp;lt;regionIdTimestamp&gt; For region names in the</span>
<span class="source-line-no">045</span><span id="line-45"> * old format, the encoded name is a 32-bit JenkinsHash integer value (in its decimal notation,</span>
<span class="source-line-no">046</span><span id="line-46"> * string form).</span>
<span class="source-line-no">047</span><span id="line-47"> * &lt;p&gt;</span>
<span class="source-line-no">048</span><span id="line-48"> * **NOTE** The first hbase:meta region, and regions created by an older version of HBase (0.20 or</span>
<span class="source-line-no">049</span><span id="line-49"> * prior) will continue to use the old region name format.</span>
<span class="source-line-no">050</span><span id="line-50"> */</span>
<span class="source-line-no">051</span><span id="line-51"></span>
<span class="source-line-no">052</span><span id="line-52"> // This flag is in the parent of a split while the parent is still referenced by daughter</span>
<span class="source-line-no">053</span><span id="line-53"> // regions. We USED to set this flag when we disabled a table but now table state is kept up in</span>
<span class="source-line-no">054</span><span id="line-54"> // zookeeper as of 0.90.0 HBase. And now in DisableTableProcedure, finally we will create bunch</span>
<span class="source-line-no">055</span><span id="line-55"> // of UnassignProcedures and at the last of the procedure we will set the region state to</span>
<span class="source-line-no">056</span><span id="line-56"> // CLOSED, and will not change the offLine flag.</span>
<span class="source-line-no">057</span><span id="line-57"> private boolean offLine;</span>
<span class="source-line-no">058</span><span id="line-58"> private boolean split;</span>
<span class="source-line-no">059</span><span id="line-59"> private final long regionId;</span>
<span class="source-line-no">060</span><span id="line-60"> private final int replicaId;</span>
<span class="source-line-no">061</span><span id="line-61"> private final byte[] regionName;</span>
<span class="source-line-no">062</span><span id="line-62"> private final byte[] startKey;</span>
<span class="source-line-no">063</span><span id="line-63"> private final byte[] endKey;</span>
<span class="source-line-no">064</span><span id="line-64"> private final int hashCode;</span>
<span class="source-line-no">065</span><span id="line-65"> private final String encodedName;</span>
<span class="source-line-no">066</span><span id="line-66"> private final byte[] encodedNameAsBytes;</span>
<span class="source-line-no">067</span><span id="line-67"> private final TableName tableName;</span>
<span class="source-line-no">068</span><span id="line-68"></span>
<span class="source-line-no">069</span><span id="line-69"> private static int generateHashCode(final TableName tableName, final byte[] startKey,</span>
<span class="source-line-no">070</span><span id="line-70"> final byte[] endKey, final long regionId, final int replicaId, boolean offLine,</span>
<span class="source-line-no">071</span><span id="line-71"> byte[] regionName) {</span>
<span class="source-line-no">072</span><span id="line-72"> int result = Arrays.hashCode(regionName);</span>
<span class="source-line-no">073</span><span id="line-73"> result = (int) (result ^ regionId);</span>
<span class="source-line-no">074</span><span id="line-74"> result ^= Arrays.hashCode(checkStartKey(startKey));</span>
<span class="source-line-no">075</span><span id="line-75"> result ^= Arrays.hashCode(checkEndKey(endKey));</span>
<span class="source-line-no">076</span><span id="line-76"> result ^= Boolean.valueOf(offLine).hashCode();</span>
<span class="source-line-no">077</span><span id="line-77"> result ^= Arrays.hashCode(tableName.getName());</span>
<span class="source-line-no">078</span><span id="line-78"> result ^= replicaId;</span>
<span class="source-line-no">079</span><span id="line-79"> return result;</span>
<span class="source-line-no">080</span><span id="line-80"> }</span>
<span class="source-line-no">081</span><span id="line-81"></span>
<span class="source-line-no">082</span><span id="line-82"> private static byte[] checkStartKey(byte[] startKey) {</span>
<span class="source-line-no">083</span><span id="line-83"> return startKey == null ? HConstants.EMPTY_START_ROW : startKey;</span>
<span class="source-line-no">084</span><span id="line-84"> }</span>
<span class="source-line-no">085</span><span id="line-85"></span>
<span class="source-line-no">086</span><span id="line-86"> private static byte[] checkEndKey(byte[] endKey) {</span>
<span class="source-line-no">087</span><span id="line-87"> return endKey == null ? HConstants.EMPTY_END_ROW : endKey;</span>
<span class="source-line-no">088</span><span id="line-88"> }</span>
<span class="source-line-no">089</span><span id="line-89"></span>
<span class="source-line-no">090</span><span id="line-90"> private static TableName checkTableName(TableName tableName) {</span>
<span class="source-line-no">091</span><span id="line-91"> if (tableName == null) {</span>
<span class="source-line-no">092</span><span id="line-92"> throw new IllegalArgumentException("TableName cannot be null");</span>
<span class="source-line-no">093</span><span id="line-93"> }</span>
<span class="source-line-no">094</span><span id="line-94"> return tableName;</span>
<span class="source-line-no">095</span><span id="line-95"> }</span>
<span class="source-line-no">096</span><span id="line-96"></span>
<span class="source-line-no">097</span><span id="line-97"> private static int checkReplicaId(int regionId) {</span>
<span class="source-line-no">098</span><span id="line-98"> if (regionId &gt; MAX_REPLICA_ID) {</span>
<span class="source-line-no">099</span><span id="line-99"> throw new IllegalArgumentException("ReplicaId cannot be greater than " + MAX_REPLICA_ID);</span>
<span class="source-line-no">100</span><span id="line-100"> }</span>
<span class="source-line-no">101</span><span id="line-101"> return regionId;</span>
<span class="source-line-no">102</span><span id="line-102"> }</span>
<span class="source-line-no">103</span><span id="line-103"></span>
<span class="source-line-no">104</span><span id="line-104"> /**</span>
<span class="source-line-no">105</span><span id="line-105"> * Package private constructor used constructing MutableRegionInfo for the first meta regions</span>
<span class="source-line-no">106</span><span id="line-106"> */</span>
<span class="source-line-no">107</span><span id="line-107"> MutableRegionInfo(long regionId, TableName tableName, int replicaId) {</span>
<span class="source-line-no">108</span><span id="line-108"> this(tableName, HConstants.EMPTY_START_ROW, HConstants.EMPTY_END_ROW, false, regionId,</span>
<span class="source-line-no">109</span><span id="line-109"> replicaId, false);</span>
<span class="source-line-no">110</span><span id="line-110"> }</span>
<span class="source-line-no">111</span><span id="line-111"></span>
<span class="source-line-no">112</span><span id="line-112"> MutableRegionInfo(final TableName tableName, final byte[] startKey, final byte[] endKey,</span>
<span class="source-line-no">113</span><span id="line-113"> final boolean split, final long regionId, final int replicaId, boolean offLine) {</span>
<span class="source-line-no">114</span><span id="line-114"> this.tableName = checkTableName(tableName);</span>
<span class="source-line-no">115</span><span id="line-115"> this.startKey = checkStartKey(startKey);</span>
<span class="source-line-no">116</span><span id="line-116"> this.endKey = checkEndKey(endKey);</span>
<span class="source-line-no">117</span><span id="line-117"> this.split = split;</span>
<span class="source-line-no">118</span><span id="line-118"> this.regionId = regionId;</span>
<span class="source-line-no">119</span><span id="line-119"> this.replicaId = checkReplicaId(replicaId);</span>
<span class="source-line-no">120</span><span id="line-120"> this.offLine = offLine;</span>
<span class="source-line-no">121</span><span id="line-121"> this.regionName = RegionInfo.createRegionName(this.tableName, this.startKey, this.regionId,</span>
<span class="source-line-no">122</span><span id="line-122"> this.replicaId, !this.tableName.equals(TableName.META_TABLE_NAME));</span>
<span class="source-line-no">123</span><span id="line-123"> this.encodedName = RegionInfo.encodeRegionName(this.regionName);</span>
<span class="source-line-no">124</span><span id="line-124"> this.hashCode = generateHashCode(this.tableName, this.startKey, this.endKey, this.regionId,</span>
<span class="source-line-no">125</span><span id="line-125"> this.replicaId, this.offLine, this.regionName);</span>
<span class="source-line-no">126</span><span id="line-126"> this.encodedNameAsBytes = Bytes.toBytes(this.encodedName);</span>
<span class="source-line-no">127</span><span id="line-127"> }</span>
<span class="source-line-no">128</span><span id="line-128"></span>
<span class="source-line-no">129</span><span id="line-129"> /**</span>
<span class="source-line-no">130</span><span id="line-130"> * Returns Return a short, printable name for this region (usually encoded name) for us logging.</span>
<span class="source-line-no">131</span><span id="line-131"> */</span>
<span class="source-line-no">132</span><span id="line-132"> @Override</span>
<span class="source-line-no">133</span><span id="line-133"> public String getShortNameToLog() {</span>
<span class="source-line-no">134</span><span id="line-134"> return RegionInfo.prettyPrint(this.getEncodedName());</span>
<span class="source-line-no">135</span><span id="line-135"> }</span>
<span class="source-line-no">136</span><span id="line-136"></span>
<span class="source-line-no">137</span><span id="line-137"> /** Returns the regionId */</span>
<span class="source-line-no">138</span><span id="line-138"> @Override</span>
<span class="source-line-no">139</span><span id="line-139"> public long getRegionId() {</span>
<span class="source-line-no">140</span><span id="line-140"> return regionId;</span>
<span class="source-line-no">141</span><span id="line-141"> }</span>
<span class="source-line-no">142</span><span id="line-142"></span>
<span class="source-line-no">143</span><span id="line-143"> /**</span>
<span class="source-line-no">144</span><span id="line-144"> * @return the regionName as an array of bytes.</span>
<span class="source-line-no">145</span><span id="line-145"> * @see #getRegionNameAsString()</span>
<span class="source-line-no">146</span><span id="line-146"> */</span>
<span class="source-line-no">147</span><span id="line-147"> @Override</span>
<span class="source-line-no">148</span><span id="line-148"> public byte[] getRegionName() {</span>
<span class="source-line-no">149</span><span id="line-149"> return regionName;</span>
<span class="source-line-no">150</span><span id="line-150"> }</span>
<span class="source-line-no">151</span><span id="line-151"></span>
<span class="source-line-no">152</span><span id="line-152"> /** Returns Region name as a String for use in logging, etc. */</span>
<span class="source-line-no">153</span><span id="line-153"> @Override</span>
<span class="source-line-no">154</span><span id="line-154"> public String getRegionNameAsString() {</span>
<span class="source-line-no">155</span><span id="line-155"> return RegionInfo.getRegionNameAsString(this, this.regionName);</span>
<span class="source-line-no">156</span><span id="line-156"> }</span>
<span class="source-line-no">157</span><span id="line-157"></span>
<span class="source-line-no">158</span><span id="line-158"> /** Returns the encoded region name */</span>
<span class="source-line-no">159</span><span id="line-159"> @Override</span>
<span class="source-line-no">160</span><span id="line-160"> public String getEncodedName() {</span>
<span class="source-line-no">161</span><span id="line-161"> return this.encodedName;</span>
<span class="source-line-no">162</span><span id="line-162"> }</span>
<span class="source-line-no">163</span><span id="line-163"></span>
<span class="source-line-no">164</span><span id="line-164"> @Override</span>
<span class="source-line-no">165</span><span id="line-165"> public byte[] getEncodedNameAsBytes() {</span>
<span class="source-line-no">166</span><span id="line-166"> return this.encodedNameAsBytes;</span>
<span class="source-line-no">167</span><span id="line-167"> }</span>
<span class="source-line-no">168</span><span id="line-168"></span>
<span class="source-line-no">169</span><span id="line-169"> /** Returns the startKey */</span>
<span class="source-line-no">170</span><span id="line-170"> @Override</span>
<span class="source-line-no">171</span><span id="line-171"> public byte[] getStartKey() {</span>
<span class="source-line-no">172</span><span id="line-172"> return startKey;</span>
<span class="source-line-no">173</span><span id="line-173"> }</span>
<span class="source-line-no">174</span><span id="line-174"></span>
<span class="source-line-no">175</span><span id="line-175"> /** Returns the endKey */</span>
<span class="source-line-no">176</span><span id="line-176"> @Override</span>
<span class="source-line-no">177</span><span id="line-177"> public byte[] getEndKey() {</span>
<span class="source-line-no">178</span><span id="line-178"> return endKey;</span>
<span class="source-line-no">179</span><span id="line-179"> }</span>
<span class="source-line-no">180</span><span id="line-180"></span>
<span class="source-line-no">181</span><span id="line-181"> /**</span>
<span class="source-line-no">182</span><span id="line-182"> * Get current table name of the region</span>
<span class="source-line-no">183</span><span id="line-183"> */</span>
<span class="source-line-no">184</span><span id="line-184"> @Override</span>
<span class="source-line-no">185</span><span id="line-185"> public TableName getTable() {</span>
<span class="source-line-no">186</span><span id="line-186"> return this.tableName;</span>
<span class="source-line-no">187</span><span id="line-187"> }</span>
<span class="source-line-no">188</span><span id="line-188"></span>
<span class="source-line-no">189</span><span id="line-189"> /**</span>
<span class="source-line-no">190</span><span id="line-190"> * Returns true if the given inclusive range of rows is fully contained by this region. For</span>
<span class="source-line-no">191</span><span id="line-191"> * example, if the region is foo,a,g and this is passed ["b","c"] or ["a","c"] it will return</span>
<span class="source-line-no">192</span><span id="line-192"> * true, but if this is passed ["b","z"] it will return false.</span>
<span class="source-line-no">193</span><span id="line-193"> * @throws IllegalArgumentException if the range passed is invalid (ie. end &amp;lt; start)</span>
<span class="source-line-no">194</span><span id="line-194"> */</span>
<span class="source-line-no">195</span><span id="line-195"> @Override</span>
<span class="source-line-no">196</span><span id="line-196"> public boolean containsRange(byte[] rangeStartKey, byte[] rangeEndKey) {</span>
<span class="source-line-no">197</span><span id="line-197"> CellComparator cellComparator = CellComparatorImpl.getCellComparator(tableName);</span>
<span class="source-line-no">198</span><span id="line-198"> if (cellComparator.compareRows(rangeStartKey, rangeEndKey) &gt; 0) {</span>
<span class="source-line-no">199</span><span id="line-199"> throw new IllegalArgumentException("Invalid range: " + Bytes.toStringBinary(rangeStartKey)</span>
<span class="source-line-no">200</span><span id="line-200"> + " &gt; " + Bytes.toStringBinary(rangeEndKey));</span>
<span class="source-line-no">201</span><span id="line-201"> }</span>
<span class="source-line-no">202</span><span id="line-202"></span>
<span class="source-line-no">203</span><span id="line-203"> boolean firstKeyInRange = cellComparator.compareRows(rangeStartKey, startKey) &gt;= 0;</span>
<span class="source-line-no">204</span><span id="line-204"> boolean lastKeyInRange = cellComparator.compareRows(rangeEndKey, endKey) &lt; 0</span>
<span class="source-line-no">205</span><span id="line-205"> || Bytes.equals(endKey, HConstants.EMPTY_BYTE_ARRAY);</span>
<span class="source-line-no">206</span><span id="line-206"> return firstKeyInRange &amp;&amp; lastKeyInRange;</span>
<span class="source-line-no">207</span><span id="line-207"> }</span>
<span class="source-line-no">208</span><span id="line-208"></span>
<span class="source-line-no">209</span><span id="line-209"> /**</span>
<span class="source-line-no">210</span><span id="line-210"> * Return true if the given row falls in this region.</span>
<span class="source-line-no">211</span><span id="line-211"> */</span>
<span class="source-line-no">212</span><span id="line-212"> @Override</span>
<span class="source-line-no">213</span><span id="line-213"> public boolean containsRow(byte[] row) {</span>
<span class="source-line-no">214</span><span id="line-214"> CellComparator cellComparator = CellComparatorImpl.getCellComparator(tableName);</span>
<span class="source-line-no">215</span><span id="line-215"> return cellComparator.compareRows(row, startKey) &gt;= 0</span>
<span class="source-line-no">216</span><span id="line-216"> &amp;&amp; (cellComparator.compareRows(row, endKey) &lt; 0</span>
<span class="source-line-no">217</span><span id="line-217"> || Bytes.equals(endKey, HConstants.EMPTY_BYTE_ARRAY));</span>
<span class="source-line-no">218</span><span id="line-218"> }</span>
<span class="source-line-no">219</span><span id="line-219"></span>
<span class="source-line-no">220</span><span id="line-220"> /** Returns true if this region is a meta region */</span>
<span class="source-line-no">221</span><span id="line-221"> @Override</span>
<span class="source-line-no">222</span><span id="line-222"> public boolean isMetaRegion() {</span>
<span class="source-line-no">223</span><span id="line-223"> return tableName.equals(TableName.META_TABLE_NAME);</span>
<span class="source-line-no">224</span><span id="line-224"> }</span>
<span class="source-line-no">225</span><span id="line-225"></span>
<span class="source-line-no">226</span><span id="line-226"> /** Returns True if has been split and has daughters. */</span>
<span class="source-line-no">227</span><span id="line-227"> @Override</span>
<span class="source-line-no">228</span><span id="line-228"> public boolean isSplit() {</span>
<span class="source-line-no">229</span><span id="line-229"> return this.split;</span>
<span class="source-line-no">230</span><span id="line-230"> }</span>
<span class="source-line-no">231</span><span id="line-231"></span>
<span class="source-line-no">232</span><span id="line-232"> /**</span>
<span class="source-line-no">233</span><span id="line-233"> * Change the split status flag.</span>
<span class="source-line-no">234</span><span id="line-234"> * @param split set split status</span>
<span class="source-line-no">235</span><span id="line-235"> */</span>
<span class="source-line-no">236</span><span id="line-236"> public MutableRegionInfo setSplit(boolean split) {</span>
<span class="source-line-no">237</span><span id="line-237"> this.split = split;</span>
<span class="source-line-no">238</span><span id="line-238"> return this;</span>
<span class="source-line-no">239</span><span id="line-239"> }</span>
<span class="source-line-no">240</span><span id="line-240"></span>
<span class="source-line-no">241</span><span id="line-241"> /**</span>
<span class="source-line-no">242</span><span id="line-242"> * @return True if this region is offline.</span>
<span class="source-line-no">243</span><span id="line-243"> * @deprecated since 3.0.0 and will be removed in 4.0.0</span>
<span class="source-line-no">244</span><span id="line-244"> * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-25210"&gt;HBASE-25210&lt;/a&gt;</span>
<span class="source-line-no">245</span><span id="line-245"> */</span>
<span class="source-line-no">246</span><span id="line-246"> @Override</span>
<span class="source-line-no">247</span><span id="line-247"> @Deprecated</span>
<span class="source-line-no">248</span><span id="line-248"> public boolean isOffline() {</span>
<span class="source-line-no">249</span><span id="line-249"> return this.offLine;</span>
<span class="source-line-no">250</span><span id="line-250"> }</span>
<span class="source-line-no">251</span><span id="line-251"></span>
<span class="source-line-no">252</span><span id="line-252"> /**</span>
<span class="source-line-no">253</span><span id="line-253"> * The parent of a region split is offline while split daughters hold references to the parent.</span>
<span class="source-line-no">254</span><span id="line-254"> * Offlined regions are closed.</span>
<span class="source-line-no">255</span><span id="line-255"> * @param offLine Set online/offline status.</span>
<span class="source-line-no">256</span><span id="line-256"> */</span>
<span class="source-line-no">257</span><span id="line-257"> public MutableRegionInfo setOffline(boolean offLine) {</span>
<span class="source-line-no">258</span><span id="line-258"> this.offLine = offLine;</span>
<span class="source-line-no">259</span><span id="line-259"> return this;</span>
<span class="source-line-no">260</span><span id="line-260"> }</span>
<span class="source-line-no">261</span><span id="line-261"></span>
<span class="source-line-no">262</span><span id="line-262"> /**</span>
<span class="source-line-no">263</span><span id="line-263"> * @return True if this is a split parent region.</span>
<span class="source-line-no">264</span><span id="line-264"> * @deprecated since 3.0.0 and will be removed in 4.0.0, Use {@link #isSplit()} instead.</span>
<span class="source-line-no">265</span><span id="line-265"> * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-25210"&gt;HBASE-25210&lt;/a&gt;</span>
<span class="source-line-no">266</span><span id="line-266"> */</span>
<span class="source-line-no">267</span><span id="line-267"> @Override</span>
<span class="source-line-no">268</span><span id="line-268"> @Deprecated</span>
<span class="source-line-no">269</span><span id="line-269"> public boolean isSplitParent() {</span>
<span class="source-line-no">270</span><span id="line-270"> if (!isSplit()) {</span>
<span class="source-line-no">271</span><span id="line-271"> return false;</span>
<span class="source-line-no">272</span><span id="line-272"> }</span>
<span class="source-line-no">273</span><span id="line-273"> if (!isOffline()) {</span>
<span class="source-line-no">274</span><span id="line-274"> LOG.warn("Region is split but NOT offline: " + getRegionNameAsString());</span>
<span class="source-line-no">275</span><span id="line-275"> }</span>
<span class="source-line-no">276</span><span id="line-276"> return true;</span>
<span class="source-line-no">277</span><span id="line-277"> }</span>
<span class="source-line-no">278</span><span id="line-278"></span>
<span class="source-line-no">279</span><span id="line-279"> /**</span>
<span class="source-line-no">280</span><span id="line-280"> * Returns the region replica id</span>
<span class="source-line-no">281</span><span id="line-281"> * @return returns region replica id</span>
<span class="source-line-no">282</span><span id="line-282"> */</span>
<span class="source-line-no">283</span><span id="line-283"> @Override</span>
<span class="source-line-no">284</span><span id="line-284"> public int getReplicaId() {</span>
<span class="source-line-no">285</span><span id="line-285"> return replicaId;</span>
<span class="source-line-no">286</span><span id="line-286"> }</span>
<span class="source-line-no">287</span><span id="line-287"></span>
<span class="source-line-no">288</span><span id="line-288"> /**</span>
<span class="source-line-no">289</span><span id="line-289"> * @see Object#toString()</span>
<span class="source-line-no">290</span><span id="line-290"> */</span>
<span class="source-line-no">291</span><span id="line-291"> @Override</span>
<span class="source-line-no">292</span><span id="line-292"> public String toString() {</span>
<span class="source-line-no">293</span><span id="line-293"> return "{ENCODED =&gt; " + getEncodedName() + ", " + HConstants.NAME + " =&gt; '"</span>
<span class="source-line-no">294</span><span id="line-294"> + Bytes.toStringBinary(this.regionName) + "', STARTKEY =&gt; '"</span>
<span class="source-line-no">295</span><span id="line-295"> + Bytes.toStringBinary(this.startKey) + "', ENDKEY =&gt; '" + Bytes.toStringBinary(this.endKey)</span>
<span class="source-line-no">296</span><span id="line-296"> + "'" + (isOffline() ? ", OFFLINE =&gt; true" : "") + (isSplit() ? ", SPLIT =&gt; true" : "")</span>
<span class="source-line-no">297</span><span id="line-297"> + ((replicaId &gt; 0) ? ", REPLICA_ID =&gt; " + replicaId : "") + "}";</span>
<span class="source-line-no">298</span><span id="line-298"> }</span>
<span class="source-line-no">299</span><span id="line-299"></span>
<span class="source-line-no">300</span><span id="line-300"> /**</span>
<span class="source-line-no">301</span><span id="line-301"> * @see Object#equals(Object)</span>
<span class="source-line-no">302</span><span id="line-302"> */</span>
<span class="source-line-no">303</span><span id="line-303"> @Override</span>
<span class="source-line-no">304</span><span id="line-304"> public boolean equals(Object o) {</span>
<span class="source-line-no">305</span><span id="line-305"> if (this == o) {</span>
<span class="source-line-no">306</span><span id="line-306"> return true;</span>
<span class="source-line-no">307</span><span id="line-307"> }</span>
<span class="source-line-no">308</span><span id="line-308"> if (o == null) {</span>
<span class="source-line-no">309</span><span id="line-309"> return false;</span>
<span class="source-line-no">310</span><span id="line-310"> }</span>
<span class="source-line-no">311</span><span id="line-311"> if (!(o instanceof RegionInfo)) {</span>
<span class="source-line-no">312</span><span id="line-312"> return false;</span>
<span class="source-line-no">313</span><span id="line-313"> }</span>
<span class="source-line-no">314</span><span id="line-314"> return compareTo((RegionInfo) o) == 0;</span>
<span class="source-line-no">315</span><span id="line-315"> }</span>
<span class="source-line-no">316</span><span id="line-316"></span>
<span class="source-line-no">317</span><span id="line-317"> /**</span>
<span class="source-line-no">318</span><span id="line-318"> * @see Object#hashCode()</span>
<span class="source-line-no">319</span><span id="line-319"> */</span>
<span class="source-line-no">320</span><span id="line-320"> @Override</span>
<span class="source-line-no">321</span><span id="line-321"> public int hashCode() {</span>
<span class="source-line-no">322</span><span id="line-322"> return this.hashCode;</span>
<span class="source-line-no">323</span><span id="line-323"> }</span>
<span class="source-line-no">324</span><span id="line-324">}</span>
</pre>
</div>
</main>
</body>
</html>