<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
<span class="sourceLineNo">017</span> */<a name="line.17"></a>
<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.normalizer;<a name="line.18"></a>
<span class="sourceLineNo">019</span><a name="line.19"></a>
<span class="sourceLineNo">020</span>import static org.apache.hbase.thirdparty.org.apache.commons.collections4.CollectionUtils.isEmpty;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import java.time.Instant;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.time.Period;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.util.ArrayList;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.util.Collections;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.util.LinkedList;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.util.List;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.util.Objects;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.util.function.BooleanSupplier;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.util.function.Function;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.hadoop.conf.Configuration;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.RegionMetrics;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.ServerName;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.Size;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.TableName;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import org.slf4j.Logger;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import org.slf4j.LoggerFactory;<a name="line.47"></a>
<span class="sourceLineNo">048</span><a name="line.48"></a>
<span class="sourceLineNo">049</span>/**<a name="line.49"></a>
<span class="sourceLineNo">050</span> * Simple implementation of region normalizer. Logic in use:<a name="line.50"></a>
<span class="sourceLineNo">051</span> * &lt;ol&gt;<a name="line.51"></a>
<span class="sourceLineNo">052</span> *   &lt;li&gt;Get all regions of a given table&lt;/li&gt;<a name="line.52"></a>
<span class="sourceLineNo">053</span> *   &lt;li&gt;Get avg size S of the regions in the table (by total size of store files reported in<a name="line.53"></a>
<span class="sourceLineNo">054</span> *     RegionMetrics)&lt;/li&gt;<a name="line.54"></a>
<span class="sourceLineNo">055</span> *   &lt;li&gt;For each region R0, if R0 is bigger than S * 2, it is kindly requested to split.&lt;/li&gt;<a name="line.55"></a>
<span class="sourceLineNo">056</span> *   &lt;li&gt;Otherwise, for the next region in the chain R1, if R0 + R1 is smaller then S, R0 and R1<a name="line.56"></a>
<span class="sourceLineNo">057</span> *     are kindly requested to merge.&lt;/li&gt;<a name="line.57"></a>
<span class="sourceLineNo">058</span> * &lt;/ol&gt;<a name="line.58"></a>
<span class="sourceLineNo">059</span> */<a name="line.59"></a>
<span class="sourceLineNo">060</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.60"></a>
<span class="sourceLineNo">061</span>class SimpleRegionNormalizer implements RegionNormalizer, ConfigurationObserver {<a name="line.61"></a>
<span class="sourceLineNo">062</span>  private static final Logger LOG = LoggerFactory.getLogger(SimpleRegionNormalizer.class);<a name="line.62"></a>
<span class="sourceLineNo">063</span><a name="line.63"></a>
<span class="sourceLineNo">064</span>  static final String SPLIT_ENABLED_KEY = "hbase.normalizer.split.enabled";<a name="line.64"></a>
<span class="sourceLineNo">065</span>  static final boolean DEFAULT_SPLIT_ENABLED = true;<a name="line.65"></a>
<span class="sourceLineNo">066</span>  static final String MERGE_ENABLED_KEY = "hbase.normalizer.merge.enabled";<a name="line.66"></a>
<span class="sourceLineNo">067</span>  static final boolean DEFAULT_MERGE_ENABLED = true;<a name="line.67"></a>
<span class="sourceLineNo">068</span>  // TODO: after HBASE-24416, `min.region.count` only applies to merge plans; should<a name="line.68"></a>
<span class="sourceLineNo">069</span>  //  deprecate/rename the configuration key.<a name="line.69"></a>
<span class="sourceLineNo">070</span>  static final String MIN_REGION_COUNT_KEY = "hbase.normalizer.min.region.count";<a name="line.70"></a>
<span class="sourceLineNo">071</span>  static final int DEFAULT_MIN_REGION_COUNT = 3;<a name="line.71"></a>
<span class="sourceLineNo">072</span>  static final String MERGE_MIN_REGION_AGE_DAYS_KEY = "hbase.normalizer.merge.min_region_age.days";<a name="line.72"></a>
<span class="sourceLineNo">073</span>  static final int DEFAULT_MERGE_MIN_REGION_AGE_DAYS = 3;<a name="line.73"></a>
<span class="sourceLineNo">074</span>  static final String MERGE_MIN_REGION_SIZE_MB_KEY = "hbase.normalizer.merge.min_region_size.mb";<a name="line.74"></a>
<span class="sourceLineNo">075</span>  static final int DEFAULT_MERGE_MIN_REGION_SIZE_MB = 0;<a name="line.75"></a>
<span class="sourceLineNo">076</span><a name="line.76"></a>
<span class="sourceLineNo">077</span>  private MasterServices masterServices;<a name="line.77"></a>
<span class="sourceLineNo">078</span>  private NormalizerConfiguration normalizerConfiguration;<a name="line.78"></a>
<span class="sourceLineNo">079</span><a name="line.79"></a>
<span class="sourceLineNo">080</span>  public SimpleRegionNormalizer() {<a name="line.80"></a>
<span class="sourceLineNo">081</span>    masterServices = null;<a name="line.81"></a>
<span class="sourceLineNo">082</span>    normalizerConfiguration = new NormalizerConfiguration();<a name="line.82"></a>
<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
<span class="sourceLineNo">084</span><a name="line.84"></a>
<span class="sourceLineNo">085</span>  @Override<a name="line.85"></a>
<span class="sourceLineNo">086</span>  public Configuration getConf() {<a name="line.86"></a>
<span class="sourceLineNo">087</span>    return normalizerConfiguration.getConf();<a name="line.87"></a>
<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
<span class="sourceLineNo">089</span><a name="line.89"></a>
<span class="sourceLineNo">090</span>  @Override<a name="line.90"></a>
<span class="sourceLineNo">091</span>  public void setConf(final Configuration conf) {<a name="line.91"></a>
<span class="sourceLineNo">092</span>    if (conf == null) {<a name="line.92"></a>
<span class="sourceLineNo">093</span>      return;<a name="line.93"></a>
<span class="sourceLineNo">094</span>    }<a name="line.94"></a>
<span class="sourceLineNo">095</span>    normalizerConfiguration = new NormalizerConfiguration(conf, normalizerConfiguration);<a name="line.95"></a>
<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
<span class="sourceLineNo">097</span><a name="line.97"></a>
<span class="sourceLineNo">098</span>  @Override<a name="line.98"></a>
<span class="sourceLineNo">099</span>  public void onConfigurationChange(Configuration conf) {<a name="line.99"></a>
<span class="sourceLineNo">100</span>    LOG.debug("Updating configuration parameters according to new configuration instance.");<a name="line.100"></a>
<span class="sourceLineNo">101</span>    setConf(conf);<a name="line.101"></a>
<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
<span class="sourceLineNo">103</span><a name="line.103"></a>
<span class="sourceLineNo">104</span>  private static int parseMinRegionCount(final Configuration conf) {<a name="line.104"></a>
<span class="sourceLineNo">105</span>    final int parsedValue = conf.getInt(MIN_REGION_COUNT_KEY, DEFAULT_MIN_REGION_COUNT);<a name="line.105"></a>
<span class="sourceLineNo">106</span>    final int settledValue = Math.max(1, parsedValue);<a name="line.106"></a>
<span class="sourceLineNo">107</span>    if (parsedValue != settledValue) {<a name="line.107"></a>
<span class="sourceLineNo">108</span>      warnInvalidValue(MIN_REGION_COUNT_KEY, parsedValue, settledValue);<a name="line.108"></a>
<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
<span class="sourceLineNo">110</span>    return settledValue;<a name="line.110"></a>
<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
<span class="sourceLineNo">112</span><a name="line.112"></a>
<span class="sourceLineNo">113</span>  private static Period parseMergeMinRegionAge(final Configuration conf) {<a name="line.113"></a>
<span class="sourceLineNo">114</span>    final int parsedValue =<a name="line.114"></a>
<span class="sourceLineNo">115</span>      conf.getInt(MERGE_MIN_REGION_AGE_DAYS_KEY, DEFAULT_MERGE_MIN_REGION_AGE_DAYS);<a name="line.115"></a>
<span class="sourceLineNo">116</span>    final int settledValue = Math.max(0, parsedValue);<a name="line.116"></a>
<span class="sourceLineNo">117</span>    if (parsedValue != settledValue) {<a name="line.117"></a>
<span class="sourceLineNo">118</span>      warnInvalidValue(MERGE_MIN_REGION_AGE_DAYS_KEY, parsedValue, settledValue);<a name="line.118"></a>
<span class="sourceLineNo">119</span>    }<a name="line.119"></a>
<span class="sourceLineNo">120</span>    return Period.ofDays(settledValue);<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>  private static long parseMergeMinRegionSizeMb(final Configuration conf) {<a name="line.123"></a>
<span class="sourceLineNo">124</span>    final long parsedValue =<a name="line.124"></a>
<span class="sourceLineNo">125</span>      conf.getLong(MERGE_MIN_REGION_SIZE_MB_KEY, DEFAULT_MERGE_MIN_REGION_SIZE_MB);<a name="line.125"></a>
<span class="sourceLineNo">126</span>    final long settledValue = Math.max(0, parsedValue);<a name="line.126"></a>
<span class="sourceLineNo">127</span>    if (parsedValue != settledValue) {<a name="line.127"></a>
<span class="sourceLineNo">128</span>      warnInvalidValue(MERGE_MIN_REGION_SIZE_MB_KEY, parsedValue, settledValue);<a name="line.128"></a>
<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
<span class="sourceLineNo">130</span>    return settledValue;<a name="line.130"></a>
<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
<span class="sourceLineNo">132</span><a name="line.132"></a>
<span class="sourceLineNo">133</span>  private static &lt;T&gt; void warnInvalidValue(final String key, final T parsedValue,<a name="line.133"></a>
<span class="sourceLineNo">134</span>    final T settledValue) {<a name="line.134"></a>
<span class="sourceLineNo">135</span>    LOG.warn("Configured value {}={} is invalid. Setting value to {}.",<a name="line.135"></a>
<span class="sourceLineNo">136</span>      key, parsedValue, settledValue);<a name="line.136"></a>
<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
<span class="sourceLineNo">138</span><a name="line.138"></a>
<span class="sourceLineNo">139</span>  private static &lt;T&gt; void logConfigurationUpdated(final String key, final T oldValue,<a name="line.139"></a>
<span class="sourceLineNo">140</span>    final T newValue) {<a name="line.140"></a>
<span class="sourceLineNo">141</span>    if (!Objects.equals(oldValue, newValue)) {<a name="line.141"></a>
<span class="sourceLineNo">142</span>      LOG.info("Updated configuration for key '{}' from {} to {}", key, oldValue, newValue);<a name="line.142"></a>
<span class="sourceLineNo">143</span>    }<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>  /**<a name="line.146"></a>
<span class="sourceLineNo">147</span>   * Return this instance's configured value for {@value #SPLIT_ENABLED_KEY}.<a name="line.147"></a>
<span class="sourceLineNo">148</span>   */<a name="line.148"></a>
<span class="sourceLineNo">149</span>  public boolean isSplitEnabled() {<a name="line.149"></a>
<span class="sourceLineNo">150</span>    return normalizerConfiguration.isSplitEnabled();<a name="line.150"></a>
<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
<span class="sourceLineNo">152</span><a name="line.152"></a>
<span class="sourceLineNo">153</span>  /**<a name="line.153"></a>
<span class="sourceLineNo">154</span>   * Return this instance's configured value for {@value #MERGE_ENABLED_KEY}.<a name="line.154"></a>
<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
<span class="sourceLineNo">156</span>  public boolean isMergeEnabled() {<a name="line.156"></a>
<span class="sourceLineNo">157</span>    return normalizerConfiguration.isMergeEnabled();<a name="line.157"></a>
<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
<span class="sourceLineNo">159</span><a name="line.159"></a>
<span class="sourceLineNo">160</span>  /**<a name="line.160"></a>
<span class="sourceLineNo">161</span>   * Return this instance's configured value for {@value #MIN_REGION_COUNT_KEY}.<a name="line.161"></a>
<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
<span class="sourceLineNo">163</span>  public int getMinRegionCount() {<a name="line.163"></a>
<span class="sourceLineNo">164</span>    return normalizerConfiguration.getMinRegionCount();<a name="line.164"></a>
<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
<span class="sourceLineNo">166</span><a name="line.166"></a>
<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
<span class="sourceLineNo">168</span>   * Return this instance's configured value for {@value #MERGE_MIN_REGION_AGE_DAYS_KEY}.<a name="line.168"></a>
<span class="sourceLineNo">169</span>   */<a name="line.169"></a>
<span class="sourceLineNo">170</span>  public Period getMergeMinRegionAge() {<a name="line.170"></a>
<span class="sourceLineNo">171</span>    return normalizerConfiguration.getMergeMinRegionAge();<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>  /**<a name="line.174"></a>
<span class="sourceLineNo">175</span>   * Return this instance's configured value for {@value #MERGE_MIN_REGION_SIZE_MB_KEY}.<a name="line.175"></a>
<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
<span class="sourceLineNo">177</span>  public long getMergeMinRegionSizeMb() {<a name="line.177"></a>
<span class="sourceLineNo">178</span>    return normalizerConfiguration.getMergeMinRegionSizeMb();<a name="line.178"></a>
<span class="sourceLineNo">179</span>  }<a name="line.179"></a>
<span class="sourceLineNo">180</span><a name="line.180"></a>
<span class="sourceLineNo">181</span>  @Override<a name="line.181"></a>
<span class="sourceLineNo">182</span>  public void setMasterServices(final MasterServices masterServices) {<a name="line.182"></a>
<span class="sourceLineNo">183</span>    this.masterServices = masterServices;<a name="line.183"></a>
<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
<span class="sourceLineNo">185</span><a name="line.185"></a>
<span class="sourceLineNo">186</span>  @Override<a name="line.186"></a>
<span class="sourceLineNo">187</span>  public List&lt;NormalizationPlan&gt; computePlansForTable(final TableDescriptor tableDescriptor) {<a name="line.187"></a>
<span class="sourceLineNo">188</span>    if (tableDescriptor == null) {<a name="line.188"></a>
<span class="sourceLineNo">189</span>      return Collections.emptyList();<a name="line.189"></a>
<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
<span class="sourceLineNo">191</span>    TableName table = tableDescriptor.getTableName();<a name="line.191"></a>
<span class="sourceLineNo">192</span>    if (table.isSystemTable()) {<a name="line.192"></a>
<span class="sourceLineNo">193</span>      LOG.debug("Normalization of system table {} isn't allowed", table);<a name="line.193"></a>
<span class="sourceLineNo">194</span>      return Collections.emptyList();<a name="line.194"></a>
<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
<span class="sourceLineNo">196</span><a name="line.196"></a>
<span class="sourceLineNo">197</span>    final boolean proceedWithSplitPlanning = proceedWithSplitPlanning(tableDescriptor);<a name="line.197"></a>
<span class="sourceLineNo">198</span>    final boolean proceedWithMergePlanning = proceedWithMergePlanning(tableDescriptor);<a name="line.198"></a>
<span class="sourceLineNo">199</span>    if (!proceedWithMergePlanning &amp;&amp; !proceedWithSplitPlanning) {<a name="line.199"></a>
<span class="sourceLineNo">200</span>      LOG.debug("Both split and merge are disabled. Skipping normalization of table: {}", table);<a name="line.200"></a>
<span class="sourceLineNo">201</span>      return Collections.emptyList();<a name="line.201"></a>
<span class="sourceLineNo">202</span>    }<a name="line.202"></a>
<span class="sourceLineNo">203</span><a name="line.203"></a>
<span class="sourceLineNo">204</span>    final NormalizeContext ctx = new NormalizeContext(tableDescriptor);<a name="line.204"></a>
<span class="sourceLineNo">205</span>    if (isEmpty(ctx.getTableRegions())) {<a name="line.205"></a>
<span class="sourceLineNo">206</span>      return Collections.emptyList();<a name="line.206"></a>
<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
<span class="sourceLineNo">208</span><a name="line.208"></a>
<span class="sourceLineNo">209</span>    LOG.debug("Computing normalization plan for table:  {}, number of regions: {}", table,<a name="line.209"></a>
<span class="sourceLineNo">210</span>      ctx.getTableRegions().size());<a name="line.210"></a>
<span class="sourceLineNo">211</span><a name="line.211"></a>
<span class="sourceLineNo">212</span>    final List&lt;NormalizationPlan&gt; plans = new ArrayList&lt;&gt;();<a name="line.212"></a>
<span class="sourceLineNo">213</span>    int splitPlansCount = 0;<a name="line.213"></a>
<span class="sourceLineNo">214</span>    if (proceedWithSplitPlanning) {<a name="line.214"></a>
<span class="sourceLineNo">215</span>      List&lt;NormalizationPlan&gt; splitPlans = computeSplitNormalizationPlans(ctx);<a name="line.215"></a>
<span class="sourceLineNo">216</span>      splitPlansCount = splitPlans.size();<a name="line.216"></a>
<span class="sourceLineNo">217</span>      plans.addAll(splitPlans);<a name="line.217"></a>
<span class="sourceLineNo">218</span>    }<a name="line.218"></a>
<span class="sourceLineNo">219</span>    int mergePlansCount = 0;<a name="line.219"></a>
<span class="sourceLineNo">220</span>    if (proceedWithMergePlanning) {<a name="line.220"></a>
<span class="sourceLineNo">221</span>      List&lt;NormalizationPlan&gt; mergePlans = computeMergeNormalizationPlans(ctx);<a name="line.221"></a>
<span class="sourceLineNo">222</span>      mergePlansCount = mergePlans.size();<a name="line.222"></a>
<span class="sourceLineNo">223</span>      plans.addAll(mergePlans);<a name="line.223"></a>
<span class="sourceLineNo">224</span>    }<a name="line.224"></a>
<span class="sourceLineNo">225</span><a name="line.225"></a>
<span class="sourceLineNo">226</span>    LOG.debug("Computed normalization plans for table {}. Total plans: {}, split plans: {}, " +<a name="line.226"></a>
<span class="sourceLineNo">227</span>        "merge plans: {}", table, plans.size(), splitPlansCount, mergePlansCount);<a name="line.227"></a>
<span class="sourceLineNo">228</span>    return plans;<a name="line.228"></a>
<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
<span class="sourceLineNo">230</span><a name="line.230"></a>
<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
<span class="sourceLineNo">232</span>   * @return size of region in MB and if region is not found than -1<a name="line.232"></a>
<span class="sourceLineNo">233</span>   */<a name="line.233"></a>
<span class="sourceLineNo">234</span>  private long getRegionSizeMB(RegionInfo hri) {<a name="line.234"></a>
<span class="sourceLineNo">235</span>    ServerName sn =<a name="line.235"></a>
<span class="sourceLineNo">236</span>      masterServices.getAssignmentManager().getRegionStates().getRegionServerOfRegion(hri);<a name="line.236"></a>
<span class="sourceLineNo">237</span>    if (sn == null) {<a name="line.237"></a>
<span class="sourceLineNo">238</span>      LOG.debug("{} region was not found on any Server", hri.getRegionNameAsString());<a name="line.238"></a>
<span class="sourceLineNo">239</span>      return -1;<a name="line.239"></a>
<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
<span class="sourceLineNo">241</span>    ServerMetrics serverMetrics = masterServices.getServerManager().getLoad(sn);<a name="line.241"></a>
<span class="sourceLineNo">242</span>    if (serverMetrics == null) {<a name="line.242"></a>
<span class="sourceLineNo">243</span>      LOG.debug("server {} was not found in ServerManager", sn.getServerName());<a name="line.243"></a>
<span class="sourceLineNo">244</span>      return -1;<a name="line.244"></a>
<span class="sourceLineNo">245</span>    }<a name="line.245"></a>
<span class="sourceLineNo">246</span>    RegionMetrics regionLoad = serverMetrics.getRegionMetrics().get(hri.getRegionName());<a name="line.246"></a>
<span class="sourceLineNo">247</span>    if (regionLoad == null) {<a name="line.247"></a>
<span class="sourceLineNo">248</span>      LOG.debug("{} was not found in RegionsLoad", hri.getRegionNameAsString());<a name="line.248"></a>
<span class="sourceLineNo">249</span>      return -1;<a name="line.249"></a>
<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
<span class="sourceLineNo">251</span>    return (long) regionLoad.getStoreFileSize().get(Size.Unit.MEGABYTE);<a name="line.251"></a>
<span class="sourceLineNo">252</span>  }<a name="line.252"></a>
<span class="sourceLineNo">253</span><a name="line.253"></a>
<span class="sourceLineNo">254</span>  private boolean isMasterSwitchEnabled(final MasterSwitchType masterSwitchType) {<a name="line.254"></a>
<span class="sourceLineNo">255</span>    return masterServices.isSplitOrMergeEnabled(masterSwitchType);<a name="line.255"></a>
<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
<span class="sourceLineNo">257</span><a name="line.257"></a>
<span class="sourceLineNo">258</span>  private boolean proceedWithSplitPlanning(TableDescriptor tableDescriptor) {<a name="line.258"></a>
<span class="sourceLineNo">259</span>    String value = tableDescriptor.getValue(SPLIT_ENABLED_KEY);<a name="line.259"></a>
<span class="sourceLineNo">260</span>    return  (value == null ? isSplitEnabled() : Boolean.parseBoolean(value)) &amp;&amp;<a name="line.260"></a>
<span class="sourceLineNo">261</span>      isMasterSwitchEnabled(MasterSwitchType.SPLIT);<a name="line.261"></a>
<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
<span class="sourceLineNo">263</span><a name="line.263"></a>
<span class="sourceLineNo">264</span>  private boolean proceedWithMergePlanning(TableDescriptor tableDescriptor) {<a name="line.264"></a>
<span class="sourceLineNo">265</span>    String value = tableDescriptor.getValue(MERGE_ENABLED_KEY);<a name="line.265"></a>
<span class="sourceLineNo">266</span>    return (value == null ? isMergeEnabled() : Boolean.parseBoolean(value)) &amp;&amp;<a name="line.266"></a>
<span class="sourceLineNo">267</span>      isMasterSwitchEnabled(MasterSwitchType.MERGE);<a name="line.267"></a>
<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
<span class="sourceLineNo">269</span><a name="line.269"></a>
<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
<span class="sourceLineNo">271</span>   * @param tableRegions regions of table to normalize<a name="line.271"></a>
<span class="sourceLineNo">272</span>   * @param tableDescriptor the TableDescriptor<a name="line.272"></a>
<span class="sourceLineNo">273</span>   * @return average region size depending on<a name="line.273"></a>
<span class="sourceLineNo">274</span>   * @see org.apache.hadoop.hbase.client.TableDescriptor#getNormalizerTargetRegionCount()<a name="line.274"></a>
<span class="sourceLineNo">275</span>   * Also make sure tableRegions contains regions of the same table<a name="line.275"></a>
<span class="sourceLineNo">276</span>   */<a name="line.276"></a>
<span class="sourceLineNo">277</span>  private double getAverageRegionSizeMb(final List&lt;RegionInfo&gt; tableRegions,<a name="line.277"></a>
<span class="sourceLineNo">278</span>    final TableDescriptor tableDescriptor) {<a name="line.278"></a>
<span class="sourceLineNo">279</span>    if (isEmpty(tableRegions)) {<a name="line.279"></a>
<span class="sourceLineNo">280</span>      throw new IllegalStateException(<a name="line.280"></a>
<span class="sourceLineNo">281</span>        "Cannot calculate average size of a table without any regions.");<a name="line.281"></a>
<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
<span class="sourceLineNo">283</span>    TableName table = tableDescriptor.getTableName();<a name="line.283"></a>
<span class="sourceLineNo">284</span>    double avgRegionSize;<a name="line.284"></a>
<span class="sourceLineNo">285</span>    int targetRegionCount = tableDescriptor.getNormalizerTargetRegionCount();<a name="line.285"></a>
<span class="sourceLineNo">286</span>    long targetRegionSize = tableDescriptor.getNormalizerTargetRegionSize();<a name="line.286"></a>
<span class="sourceLineNo">287</span>    LOG.debug("Table {} configured with target region count {}, target region size {} MB", table,<a name="line.287"></a>
<span class="sourceLineNo">288</span>      targetRegionCount, targetRegionSize);<a name="line.288"></a>
<span class="sourceLineNo">289</span><a name="line.289"></a>
<span class="sourceLineNo">290</span>    if (targetRegionSize &gt; 0) {<a name="line.290"></a>
<span class="sourceLineNo">291</span>      avgRegionSize = targetRegionSize;<a name="line.291"></a>
<span class="sourceLineNo">292</span>    } else {<a name="line.292"></a>
<span class="sourceLineNo">293</span>      final int regionCount = tableRegions.size();<a name="line.293"></a>
<span class="sourceLineNo">294</span>      final long totalSizeMb = tableRegions.stream()<a name="line.294"></a>
<span class="sourceLineNo">295</span>        .mapToLong(this::getRegionSizeMB)<a name="line.295"></a>
<span class="sourceLineNo">296</span>        .sum();<a name="line.296"></a>
<span class="sourceLineNo">297</span>      if (targetRegionCount &gt; 0) {<a name="line.297"></a>
<span class="sourceLineNo">298</span>        avgRegionSize = totalSizeMb / (double) targetRegionCount;<a name="line.298"></a>
<span class="sourceLineNo">299</span>      } else {<a name="line.299"></a>
<span class="sourceLineNo">300</span>        avgRegionSize = totalSizeMb / (double) regionCount;<a name="line.300"></a>
<span class="sourceLineNo">301</span>      }<a name="line.301"></a>
<span class="sourceLineNo">302</span>      LOG.debug("Table {}, total aggregated regions size: {} MB and average region size {} MB",<a name="line.302"></a>
<span class="sourceLineNo">303</span>        table, totalSizeMb, String.format("%.3f", avgRegionSize));<a name="line.303"></a>
<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
<span class="sourceLineNo">305</span><a name="line.305"></a>
<span class="sourceLineNo">306</span>    return avgRegionSize;<a name="line.306"></a>
<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
<span class="sourceLineNo">308</span><a name="line.308"></a>
<span class="sourceLineNo">309</span>  /**<a name="line.309"></a>
<span class="sourceLineNo">310</span>   * Determine if a {@link RegionInfo} should be considered for a merge operation.<a name="line.310"></a>
<span class="sourceLineNo">311</span>   * &lt;/p&gt;<a name="line.311"></a>
<span class="sourceLineNo">312</span>   * Callers beware: for safe concurrency, be sure to pass in the local instance of<a name="line.312"></a>
<span class="sourceLineNo">313</span>   * {@link NormalizerConfiguration}, don't use {@code this}'s instance.<a name="line.313"></a>
<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
<span class="sourceLineNo">315</span>  private boolean skipForMerge(<a name="line.315"></a>
<span class="sourceLineNo">316</span>    final NormalizerConfiguration normalizerConfiguration,<a name="line.316"></a>
<span class="sourceLineNo">317</span>    final NormalizeContext ctx,<a name="line.317"></a>
<span class="sourceLineNo">318</span>    final RegionInfo regionInfo<a name="line.318"></a>
<span class="sourceLineNo">319</span>  ) {<a name="line.319"></a>
<span class="sourceLineNo">320</span>    final RegionState state = ctx.getRegionStates().getRegionState(regionInfo);<a name="line.320"></a>
<span class="sourceLineNo">321</span>    final String name = regionInfo.getEncodedName();<a name="line.321"></a>
<span class="sourceLineNo">322</span>    return<a name="line.322"></a>
<span class="sourceLineNo">323</span>      logTraceReason(<a name="line.323"></a>
<span class="sourceLineNo">324</span>        () -&gt; state == null,<a name="line.324"></a>
<span class="sourceLineNo">325</span>        "skipping merge of region {} because no state information is available.", name)<a name="line.325"></a>
<span class="sourceLineNo">326</span>        || logTraceReason(<a name="line.326"></a>
<span class="sourceLineNo">327</span>          () -&gt; !Objects.equals(state.getState(), RegionState.State.OPEN),<a name="line.327"></a>
<span class="sourceLineNo">328</span>          "skipping merge of region {} because it is not open.", name)<a name="line.328"></a>
<span class="sourceLineNo">329</span>        || logTraceReason(<a name="line.329"></a>
<span class="sourceLineNo">330</span>          () -&gt; !isOldEnoughForMerge(normalizerConfiguration, ctx, regionInfo),<a name="line.330"></a>
<span class="sourceLineNo">331</span>          "skipping merge of region {} because it is not old enough.", name)<a name="line.331"></a>
<span class="sourceLineNo">332</span>        || logTraceReason(<a name="line.332"></a>
<span class="sourceLineNo">333</span>          () -&gt; !isLargeEnoughForMerge(normalizerConfiguration, ctx, regionInfo),<a name="line.333"></a>
<span class="sourceLineNo">334</span>          "skipping merge region {} because it is not large enough.", name);<a name="line.334"></a>
<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
<span class="sourceLineNo">336</span><a name="line.336"></a>
<span class="sourceLineNo">337</span>  /**<a name="line.337"></a>
<span class="sourceLineNo">338</span>   * Computes the merge plans that should be executed for this table to converge average region<a name="line.338"></a>
<span class="sourceLineNo">339</span>   * towards target average or target region count.<a name="line.339"></a>
<span class="sourceLineNo">340</span>   */<a name="line.340"></a>
<span class="sourceLineNo">341</span>  private List&lt;NormalizationPlan&gt; computeMergeNormalizationPlans(final NormalizeContext ctx) {<a name="line.341"></a>
<span class="sourceLineNo">342</span>    final NormalizerConfiguration configuration = normalizerConfiguration;<a name="line.342"></a>
<span class="sourceLineNo">343</span>    if (ctx.getTableRegions().size() &lt; configuration.getMinRegionCount(ctx)) {<a name="line.343"></a>
<span class="sourceLineNo">344</span>      LOG.debug("Table {} has {} regions, required min number of regions for normalizer to run"<a name="line.344"></a>
<span class="sourceLineNo">345</span>          + " is {}, not computing merge plans.", ctx.getTableName(),<a name="line.345"></a>
<span class="sourceLineNo">346</span>        ctx.getTableRegions().size(), configuration.getMinRegionCount());<a name="line.346"></a>
<span class="sourceLineNo">347</span>      return Collections.emptyList();<a name="line.347"></a>
<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
<span class="sourceLineNo">349</span><a name="line.349"></a>
<span class="sourceLineNo">350</span>    final long avgRegionSizeMb = (long) ctx.getAverageRegionSizeMb();<a name="line.350"></a>
<span class="sourceLineNo">351</span>    if (avgRegionSizeMb &lt; configuration.getMergeMinRegionSizeMb(ctx)) {<a name="line.351"></a>
<span class="sourceLineNo">352</span>      return Collections.emptyList();<a name="line.352"></a>
<span class="sourceLineNo">353</span>    }<a name="line.353"></a>
<span class="sourceLineNo">354</span>    LOG.debug("Computing normalization plan for table {}. average region size: {} MB, number of"<a name="line.354"></a>
<span class="sourceLineNo">355</span>      + " regions: {}.", ctx.getTableName(), avgRegionSizeMb,<a name="line.355"></a>
<span class="sourceLineNo">356</span>      ctx.getTableRegions().size());<a name="line.356"></a>
<span class="sourceLineNo">357</span><a name="line.357"></a>
<span class="sourceLineNo">358</span>    // this nested loop walks the table's region chain once, looking for contiguous sequences of<a name="line.358"></a>
<span class="sourceLineNo">359</span>    // regions that meet the criteria for merge. The outer loop tracks the starting point of the<a name="line.359"></a>
<span class="sourceLineNo">360</span>    // next sequence, the inner loop looks for the end of that sequence. A single sequence becomes<a name="line.360"></a>
<span class="sourceLineNo">361</span>    // an instance of MergeNormalizationPlan.<a name="line.361"></a>
<span class="sourceLineNo">362</span><a name="line.362"></a>
<span class="sourceLineNo">363</span>    final List&lt;NormalizationPlan&gt; plans = new LinkedList&lt;&gt;();<a name="line.363"></a>
<span class="sourceLineNo">364</span>    final List&lt;NormalizationTarget&gt; rangeMembers = new LinkedList&lt;&gt;();<a name="line.364"></a>
<span class="sourceLineNo">365</span>    long sumRangeMembersSizeMb;<a name="line.365"></a>
<span class="sourceLineNo">366</span>    int current = 0;<a name="line.366"></a>
<span class="sourceLineNo">367</span>    for (int rangeStart = 0;<a name="line.367"></a>
<span class="sourceLineNo">368</span>         rangeStart &lt; ctx.getTableRegions().size() - 1 &amp;&amp; current &lt; ctx.getTableRegions().size();) {<a name="line.368"></a>
<span class="sourceLineNo">369</span>      // walk the region chain looking for contiguous sequences of regions that can be merged.<a name="line.369"></a>
<span class="sourceLineNo">370</span>      rangeMembers.clear();<a name="line.370"></a>
<span class="sourceLineNo">371</span>      sumRangeMembersSizeMb = 0;<a name="line.371"></a>
<span class="sourceLineNo">372</span>      for (current = rangeStart; current &lt; ctx.getTableRegions().size(); current++) {<a name="line.372"></a>
<span class="sourceLineNo">373</span>        final RegionInfo regionInfo = ctx.getTableRegions().get(current);<a name="line.373"></a>
<span class="sourceLineNo">374</span>        final long regionSizeMb = getRegionSizeMB(regionInfo);<a name="line.374"></a>
<span class="sourceLineNo">375</span>        if (skipForMerge(configuration, ctx, regionInfo)) {<a name="line.375"></a>
<span class="sourceLineNo">376</span>          // this region cannot participate in a range. resume the outer loop.<a name="line.376"></a>
<span class="sourceLineNo">377</span>          rangeStart = Math.max(current, rangeStart + 1);<a name="line.377"></a>
<span class="sourceLineNo">378</span>          break;<a name="line.378"></a>
<span class="sourceLineNo">379</span>        }<a name="line.379"></a>
<span class="sourceLineNo">380</span>        if (rangeMembers.isEmpty() // when there are no range members, seed the range with whatever<a name="line.380"></a>
<span class="sourceLineNo">381</span>                                   // we have. this way we're prepared in case the next region is<a name="line.381"></a>
<span class="sourceLineNo">382</span>                                   // 0-size.<a name="line.382"></a>
<span class="sourceLineNo">383</span>          || (rangeMembers.size() == 1 &amp;&amp; sumRangeMembersSizeMb == 0) // when there is only one<a name="line.383"></a>
<span class="sourceLineNo">384</span>                                                                      // region and the size is 0,<a name="line.384"></a>
<span class="sourceLineNo">385</span>                                                                      // seed the range with<a name="line.385"></a>
<span class="sourceLineNo">386</span>                                                                      // whatever we have.<a name="line.386"></a>
<span class="sourceLineNo">387</span>          || regionSizeMb == 0 // always add an empty region to the current range.<a name="line.387"></a>
<span class="sourceLineNo">388</span>          || (regionSizeMb + sumRangeMembersSizeMb &lt;= avgRegionSizeMb)) { // add the current region<a name="line.388"></a>
<span class="sourceLineNo">389</span>                                                                          // to the range when<a name="line.389"></a>
<span class="sourceLineNo">390</span>                                                                          // there's capacity<a name="line.390"></a>
<span class="sourceLineNo">391</span>                                                                          // remaining.<a name="line.391"></a>
<span class="sourceLineNo">392</span>          rangeMembers.add(new NormalizationTarget(regionInfo, regionSizeMb));<a name="line.392"></a>
<span class="sourceLineNo">393</span>          sumRangeMembersSizeMb += regionSizeMb;<a name="line.393"></a>
<span class="sourceLineNo">394</span>          continue;<a name="line.394"></a>
<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
<span class="sourceLineNo">396</span>        // we have accumulated enough regions to fill a range. resume the outer loop.<a name="line.396"></a>
<span class="sourceLineNo">397</span>        rangeStart = Math.max(current, rangeStart + 1);<a name="line.397"></a>
<span class="sourceLineNo">398</span>        break;<a name="line.398"></a>
<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
<span class="sourceLineNo">400</span>      if (rangeMembers.size() &gt; 1) {<a name="line.400"></a>
<span class="sourceLineNo">401</span>        plans.add(new MergeNormalizationPlan.Builder().setTargets(rangeMembers).build());<a name="line.401"></a>
<span class="sourceLineNo">402</span>      }<a name="line.402"></a>
<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
<span class="sourceLineNo">404</span>    return plans;<a name="line.404"></a>
<span class="sourceLineNo">405</span>  }<a name="line.405"></a>
<span class="sourceLineNo">406</span><a name="line.406"></a>
<span class="sourceLineNo">407</span>  /**<a name="line.407"></a>
<span class="sourceLineNo">408</span>   * Determine if a region in {@link RegionState} should be considered for a split operation.<a name="line.408"></a>
<span class="sourceLineNo">409</span>   */<a name="line.409"></a>
<span class="sourceLineNo">410</span>  private static boolean skipForSplit(final RegionState state, final RegionInfo regionInfo) {<a name="line.410"></a>
<span class="sourceLineNo">411</span>    final String name = regionInfo.getEncodedName();<a name="line.411"></a>
<span class="sourceLineNo">412</span>    return<a name="line.412"></a>
<span class="sourceLineNo">413</span>      logTraceReason(<a name="line.413"></a>
<span class="sourceLineNo">414</span>        () -&gt; state == null,<a name="line.414"></a>
<span class="sourceLineNo">415</span>        "skipping split of region {} because no state information is available.", name)<a name="line.415"></a>
<span class="sourceLineNo">416</span>        || logTraceReason(<a name="line.416"></a>
<span class="sourceLineNo">417</span>          () -&gt; !Objects.equals(state.getState(), RegionState.State.OPEN),<a name="line.417"></a>
<span class="sourceLineNo">418</span>          "skipping merge of region {} because it is not open.", name);<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>   * Computes the split plans that should be executed for this table to converge average region size<a name="line.422"></a>
<span class="sourceLineNo">423</span>   * towards target average or target region count.<a name="line.423"></a>
<span class="sourceLineNo">424</span>   * &lt;br /&gt;<a name="line.424"></a>
<span class="sourceLineNo">425</span>   * if the region is &gt; 2 times larger than average, we split it. split<a name="line.425"></a>
<span class="sourceLineNo">426</span>   * is more high priority normalization action than merge.<a name="line.426"></a>
<span class="sourceLineNo">427</span>   */<a name="line.427"></a>
<span class="sourceLineNo">428</span>  private List&lt;NormalizationPlan&gt; computeSplitNormalizationPlans(final NormalizeContext ctx) {<a name="line.428"></a>
<span class="sourceLineNo">429</span>    final double avgRegionSize = ctx.getAverageRegionSizeMb();<a name="line.429"></a>
<span class="sourceLineNo">430</span>    LOG.debug("Table {}, average region size: {} MB", ctx.getTableName(),<a name="line.430"></a>
<span class="sourceLineNo">431</span>      String.format("%.3f", avgRegionSize));<a name="line.431"></a>
<span class="sourceLineNo">432</span><a name="line.432"></a>
<span class="sourceLineNo">433</span>    final List&lt;NormalizationPlan&gt; plans = new ArrayList&lt;&gt;();<a name="line.433"></a>
<span class="sourceLineNo">434</span>    for (final RegionInfo hri : ctx.getTableRegions()) {<a name="line.434"></a>
<span class="sourceLineNo">435</span>      if (skipForSplit(ctx.getRegionStates().getRegionState(hri), hri)) {<a name="line.435"></a>
<span class="sourceLineNo">436</span>        continue;<a name="line.436"></a>
<span class="sourceLineNo">437</span>      }<a name="line.437"></a>
<span class="sourceLineNo">438</span>      final long regionSizeMb = getRegionSizeMB(hri);<a name="line.438"></a>
<span class="sourceLineNo">439</span>      if (regionSizeMb &gt; 2 * avgRegionSize) {<a name="line.439"></a>
<span class="sourceLineNo">440</span>        LOG.info("Table {}, large region {} has size {} MB, more than twice avg size {} MB, "<a name="line.440"></a>
<span class="sourceLineNo">441</span>            + "splitting", ctx.getTableName(), hri.getRegionNameAsString(), regionSizeMb,<a name="line.441"></a>
<span class="sourceLineNo">442</span>          String.format("%.3f", avgRegionSize));<a name="line.442"></a>
<span class="sourceLineNo">443</span>        plans.add(new SplitNormalizationPlan(hri, regionSizeMb));<a name="line.443"></a>
<span class="sourceLineNo">444</span>      }<a name="line.444"></a>
<span class="sourceLineNo">445</span>    }<a name="line.445"></a>
<span class="sourceLineNo">446</span>    return plans;<a name="line.446"></a>
<span class="sourceLineNo">447</span>  }<a name="line.447"></a>
<span class="sourceLineNo">448</span><a name="line.448"></a>
<span class="sourceLineNo">449</span>  /**<a name="line.449"></a>
<span class="sourceLineNo">450</span>   * Return {@code true} when {@code regionInfo} has a creation date that is old<a name="line.450"></a>
<span class="sourceLineNo">451</span>   * enough to be considered for a merge operation, {@code false} otherwise.<a name="line.451"></a>
<span class="sourceLineNo">452</span>   */<a name="line.452"></a>
<span class="sourceLineNo">453</span>  private static boolean isOldEnoughForMerge(<a name="line.453"></a>
<span class="sourceLineNo">454</span>    final NormalizerConfiguration normalizerConfiguration,<a name="line.454"></a>
<span class="sourceLineNo">455</span>    final NormalizeContext ctx,<a name="line.455"></a>
<span class="sourceLineNo">456</span>    final RegionInfo regionInfo<a name="line.456"></a>
<span class="sourceLineNo">457</span>  ) {<a name="line.457"></a>
<span class="sourceLineNo">458</span>    final Instant currentTime = Instant.ofEpochMilli(EnvironmentEdgeManager.currentTime());<a name="line.458"></a>
<span class="sourceLineNo">459</span>    final Instant regionCreateTime = Instant.ofEpochMilli(regionInfo.getRegionId());<a name="line.459"></a>
<span class="sourceLineNo">460</span>    return currentTime.isAfter(<a name="line.460"></a>
<span class="sourceLineNo">461</span>      regionCreateTime.plus(normalizerConfiguration.getMergeMinRegionAge(ctx)));<a name="line.461"></a>
<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
<span class="sourceLineNo">463</span><a name="line.463"></a>
<span class="sourceLineNo">464</span>  /**<a name="line.464"></a>
<span class="sourceLineNo">465</span>   * Return {@code true} when {@code regionInfo} has a size that is sufficient<a name="line.465"></a>
<span class="sourceLineNo">466</span>   * to be considered for a merge operation, {@code false} otherwise.<a name="line.466"></a>
<span class="sourceLineNo">467</span>   * &lt;/p&gt;<a name="line.467"></a>
<span class="sourceLineNo">468</span>   * Callers beware: for safe concurrency, be sure to pass in the local instance of<a name="line.468"></a>
<span class="sourceLineNo">469</span>   * {@link NormalizerConfiguration}, don't use {@code this}'s instance.<a name="line.469"></a>
<span class="sourceLineNo">470</span>   */<a name="line.470"></a>
<span class="sourceLineNo">471</span>  private boolean isLargeEnoughForMerge(<a name="line.471"></a>
<span class="sourceLineNo">472</span>    final NormalizerConfiguration normalizerConfiguration,<a name="line.472"></a>
<span class="sourceLineNo">473</span>    final NormalizeContext ctx,<a name="line.473"></a>
<span class="sourceLineNo">474</span>    final RegionInfo regionInfo<a name="line.474"></a>
<span class="sourceLineNo">475</span>  ) {<a name="line.475"></a>
<span class="sourceLineNo">476</span>    return getRegionSizeMB(regionInfo) &gt;= normalizerConfiguration.getMergeMinRegionSizeMb(ctx);<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>  private static boolean logTraceReason(final BooleanSupplier predicate, final String fmtWhenTrue,<a name="line.479"></a>
<span class="sourceLineNo">480</span>    final Object... args) {<a name="line.480"></a>
<span class="sourceLineNo">481</span>    final boolean value = predicate.getAsBoolean();<a name="line.481"></a>
<span class="sourceLineNo">482</span>    if (value) {<a name="line.482"></a>
<span class="sourceLineNo">483</span>      LOG.trace(fmtWhenTrue, args);<a name="line.483"></a>
<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
<span class="sourceLineNo">485</span>    return value;<a name="line.485"></a>
<span class="sourceLineNo">486</span>  }<a name="line.486"></a>
<span class="sourceLineNo">487</span><a name="line.487"></a>
<span class="sourceLineNo">488</span>  /**<a name="line.488"></a>
<span class="sourceLineNo">489</span>   * Holds the configuration values read from {@link Configuration}. Encapsulation in a POJO<a name="line.489"></a>
<span class="sourceLineNo">490</span>   * enables atomic hot-reloading of configs without locks.<a name="line.490"></a>
<span class="sourceLineNo">491</span>   */<a name="line.491"></a>
<span class="sourceLineNo">492</span>  private static final class NormalizerConfiguration {<a name="line.492"></a>
<span class="sourceLineNo">493</span>    private final Configuration conf;<a name="line.493"></a>
<span class="sourceLineNo">494</span>    private final boolean splitEnabled;<a name="line.494"></a>
<span class="sourceLineNo">495</span>    private final boolean mergeEnabled;<a name="line.495"></a>
<span class="sourceLineNo">496</span>    private final int minRegionCount;<a name="line.496"></a>
<span class="sourceLineNo">497</span>    private final Period mergeMinRegionAge;<a name="line.497"></a>
<span class="sourceLineNo">498</span>    private final long mergeMinRegionSizeMb;<a name="line.498"></a>
<span class="sourceLineNo">499</span><a name="line.499"></a>
<span class="sourceLineNo">500</span>    private NormalizerConfiguration() {<a name="line.500"></a>
<span class="sourceLineNo">501</span>      conf = null;<a name="line.501"></a>
<span class="sourceLineNo">502</span>      splitEnabled = DEFAULT_SPLIT_ENABLED;<a name="line.502"></a>
<span class="sourceLineNo">503</span>      mergeEnabled = DEFAULT_MERGE_ENABLED;<a name="line.503"></a>
<span class="sourceLineNo">504</span>      minRegionCount = DEFAULT_MIN_REGION_COUNT;<a name="line.504"></a>
<span class="sourceLineNo">505</span>      mergeMinRegionAge = Period.ofDays(DEFAULT_MERGE_MIN_REGION_AGE_DAYS);<a name="line.505"></a>
<span class="sourceLineNo">506</span>      mergeMinRegionSizeMb = DEFAULT_MERGE_MIN_REGION_SIZE_MB;<a name="line.506"></a>
<span class="sourceLineNo">507</span>    }<a name="line.507"></a>
<span class="sourceLineNo">508</span><a name="line.508"></a>
<span class="sourceLineNo">509</span>    private NormalizerConfiguration(<a name="line.509"></a>
<span class="sourceLineNo">510</span>      final Configuration conf,<a name="line.510"></a>
<span class="sourceLineNo">511</span>      final NormalizerConfiguration currentConfiguration<a name="line.511"></a>
<span class="sourceLineNo">512</span>    ) {<a name="line.512"></a>
<span class="sourceLineNo">513</span>      this.conf = conf;<a name="line.513"></a>
<span class="sourceLineNo">514</span>      splitEnabled = conf.getBoolean(SPLIT_ENABLED_KEY, DEFAULT_SPLIT_ENABLED);<a name="line.514"></a>
<span class="sourceLineNo">515</span>      mergeEnabled = conf.getBoolean(MERGE_ENABLED_KEY, DEFAULT_MERGE_ENABLED);<a name="line.515"></a>
<span class="sourceLineNo">516</span>      minRegionCount = parseMinRegionCount(conf);<a name="line.516"></a>
<span class="sourceLineNo">517</span>      mergeMinRegionAge = parseMergeMinRegionAge(conf);<a name="line.517"></a>
<span class="sourceLineNo">518</span>      mergeMinRegionSizeMb = parseMergeMinRegionSizeMb(conf);<a name="line.518"></a>
<span class="sourceLineNo">519</span>      logConfigurationUpdated(SPLIT_ENABLED_KEY, currentConfiguration.isSplitEnabled(),<a name="line.519"></a>
<span class="sourceLineNo">520</span>        splitEnabled);<a name="line.520"></a>
<span class="sourceLineNo">521</span>      logConfigurationUpdated(MERGE_ENABLED_KEY, currentConfiguration.isMergeEnabled(),<a name="line.521"></a>
<span class="sourceLineNo">522</span>        mergeEnabled);<a name="line.522"></a>
<span class="sourceLineNo">523</span>      logConfigurationUpdated(MIN_REGION_COUNT_KEY, currentConfiguration.getMinRegionCount(),<a name="line.523"></a>
<span class="sourceLineNo">524</span>        minRegionCount);<a name="line.524"></a>
<span class="sourceLineNo">525</span>      logConfigurationUpdated(MERGE_MIN_REGION_AGE_DAYS_KEY,<a name="line.525"></a>
<span class="sourceLineNo">526</span>        currentConfiguration.getMergeMinRegionAge(), mergeMinRegionAge);<a name="line.526"></a>
<span class="sourceLineNo">527</span>      logConfigurationUpdated(MERGE_MIN_REGION_SIZE_MB_KEY,<a name="line.527"></a>
<span class="sourceLineNo">528</span>        currentConfiguration.getMergeMinRegionSizeMb(), mergeMinRegionSizeMb);<a name="line.528"></a>
<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
<span class="sourceLineNo">530</span><a name="line.530"></a>
<span class="sourceLineNo">531</span>    public Configuration getConf() {<a name="line.531"></a>
<span class="sourceLineNo">532</span>      return conf;<a name="line.532"></a>
<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
<span class="sourceLineNo">534</span><a name="line.534"></a>
<span class="sourceLineNo">535</span>    public boolean isSplitEnabled() {<a name="line.535"></a>
<span class="sourceLineNo">536</span>      return splitEnabled;<a name="line.536"></a>
<span class="sourceLineNo">537</span>    }<a name="line.537"></a>
<span class="sourceLineNo">538</span><a name="line.538"></a>
<span class="sourceLineNo">539</span>    public boolean isMergeEnabled() {<a name="line.539"></a>
<span class="sourceLineNo">540</span>      return mergeEnabled;<a name="line.540"></a>
<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
<span class="sourceLineNo">542</span><a name="line.542"></a>
<span class="sourceLineNo">543</span>    public int getMinRegionCount() {<a name="line.543"></a>
<span class="sourceLineNo">544</span>      return minRegionCount;<a name="line.544"></a>
<span class="sourceLineNo">545</span>    }<a name="line.545"></a>
<span class="sourceLineNo">546</span><a name="line.546"></a>
<span class="sourceLineNo">547</span>    public int getMinRegionCount(NormalizeContext context) {<a name="line.547"></a>
<span class="sourceLineNo">548</span>      int minRegionCount = context.getOrDefault(MIN_REGION_COUNT_KEY, Integer::parseInt, 0);<a name="line.548"></a>
<span class="sourceLineNo">549</span>      if (minRegionCount &lt;= 0) {<a name="line.549"></a>
<span class="sourceLineNo">550</span>        minRegionCount = getMinRegionCount();<a name="line.550"></a>
<span class="sourceLineNo">551</span>      }<a name="line.551"></a>
<span class="sourceLineNo">552</span>      return minRegionCount;<a name="line.552"></a>
<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
<span class="sourceLineNo">554</span><a name="line.554"></a>
<span class="sourceLineNo">555</span>    public Period getMergeMinRegionAge() {<a name="line.555"></a>
<span class="sourceLineNo">556</span>      return mergeMinRegionAge;<a name="line.556"></a>
<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
<span class="sourceLineNo">558</span><a name="line.558"></a>
<span class="sourceLineNo">559</span>    public Period getMergeMinRegionAge(NormalizeContext context) {<a name="line.559"></a>
<span class="sourceLineNo">560</span>      int mergeMinRegionAge = context.getOrDefault(MERGE_MIN_REGION_AGE_DAYS_KEY,<a name="line.560"></a>
<span class="sourceLineNo">561</span>        Integer::parseInt, -1);<a name="line.561"></a>
<span class="sourceLineNo">562</span>      if (mergeMinRegionAge &lt; 0) {<a name="line.562"></a>
<span class="sourceLineNo">563</span>        return getMergeMinRegionAge();<a name="line.563"></a>
<span class="sourceLineNo">564</span>      }<a name="line.564"></a>
<span class="sourceLineNo">565</span>      return Period.ofDays(mergeMinRegionAge);<a name="line.565"></a>
<span class="sourceLineNo">566</span>    }<a name="line.566"></a>
<span class="sourceLineNo">567</span><a name="line.567"></a>
<span class="sourceLineNo">568</span>    public long getMergeMinRegionSizeMb() {<a name="line.568"></a>
<span class="sourceLineNo">569</span>      return mergeMinRegionSizeMb;<a name="line.569"></a>
<span class="sourceLineNo">570</span>    }<a name="line.570"></a>
<span class="sourceLineNo">571</span><a name="line.571"></a>
<span class="sourceLineNo">572</span>    public long getMergeMinRegionSizeMb(NormalizeContext context) {<a name="line.572"></a>
<span class="sourceLineNo">573</span>      long mergeMinRegionSizeMb = context.getOrDefault(MERGE_MIN_REGION_SIZE_MB_KEY,<a name="line.573"></a>
<span class="sourceLineNo">574</span>        Long::parseLong, (long)-1);<a name="line.574"></a>
<span class="sourceLineNo">575</span>      if (mergeMinRegionSizeMb &lt; 0) {<a name="line.575"></a>
<span class="sourceLineNo">576</span>        mergeMinRegionSizeMb = getMergeMinRegionSizeMb();<a name="line.576"></a>
<span class="sourceLineNo">577</span>      }<a name="line.577"></a>
<span class="sourceLineNo">578</span>      return mergeMinRegionSizeMb;<a name="line.578"></a>
<span class="sourceLineNo">579</span>    }<a name="line.579"></a>
<span class="sourceLineNo">580</span>  }<a name="line.580"></a>
<span class="sourceLineNo">581</span><a name="line.581"></a>
<span class="sourceLineNo">582</span>  /**<a name="line.582"></a>
<span class="sourceLineNo">583</span>   * Inner class caries the state necessary to perform a single invocation of<a name="line.583"></a>
<span class="sourceLineNo">584</span>   * {@link #computePlansForTable(TableDescriptor)}. Grabbing this data from the assignment manager<a name="line.584"></a>
<span class="sourceLineNo">585</span>   * up-front allows any computed values to be realized just once.<a name="line.585"></a>
<span class="sourceLineNo">586</span>   */<a name="line.586"></a>
<span class="sourceLineNo">587</span>  private class NormalizeContext {<a name="line.587"></a>
<span class="sourceLineNo">588</span>    private final TableName tableName;<a name="line.588"></a>
<span class="sourceLineNo">589</span>    private final RegionStates regionStates;<a name="line.589"></a>
<span class="sourceLineNo">590</span>    private final List&lt;RegionInfo&gt; tableRegions;<a name="line.590"></a>
<span class="sourceLineNo">591</span>    private final double averageRegionSizeMb;<a name="line.591"></a>
<span class="sourceLineNo">592</span>    private final TableDescriptor tableDescriptor;<a name="line.592"></a>
<span class="sourceLineNo">593</span><a name="line.593"></a>
<span class="sourceLineNo">594</span>    public NormalizeContext(final TableDescriptor tableDescriptor) {<a name="line.594"></a>
<span class="sourceLineNo">595</span>      this.tableDescriptor = tableDescriptor;<a name="line.595"></a>
<span class="sourceLineNo">596</span>      tableName = tableDescriptor.getTableName();<a name="line.596"></a>
<span class="sourceLineNo">597</span>      regionStates = SimpleRegionNormalizer.this.masterServices<a name="line.597"></a>
<span class="sourceLineNo">598</span>        .getAssignmentManager()<a name="line.598"></a>
<span class="sourceLineNo">599</span>        .getRegionStates();<a name="line.599"></a>
<span class="sourceLineNo">600</span>      tableRegions = regionStates.getRegionsOfTable(tableName);<a name="line.600"></a>
<span class="sourceLineNo">601</span>      // The list of regionInfo from getRegionsOfTable() is ordered by regionName.<a name="line.601"></a>
<span class="sourceLineNo">602</span>      // regionName does not necessary guarantee the order by STARTKEY (let's say 'aa1', 'aa1!',<a name="line.602"></a>
<span class="sourceLineNo">603</span>      // in order by regionName, it will be 'aa1!' followed by 'aa1').<a name="line.603"></a>
<span class="sourceLineNo">604</span>      // This could result in normalizer merging non-adjacent regions into one and creates overlaps.<a name="line.604"></a>
<span class="sourceLineNo">605</span>      // In order to avoid that, sort the list by RegionInfo.COMPARATOR.<a name="line.605"></a>
<span class="sourceLineNo">606</span>      // See HBASE-24376<a name="line.606"></a>
<span class="sourceLineNo">607</span>      tableRegions.sort(RegionInfo.COMPARATOR);<a name="line.607"></a>
<span class="sourceLineNo">608</span>      averageRegionSizeMb = SimpleRegionNormalizer.this.getAverageRegionSizeMb(this.tableRegions,<a name="line.608"></a>
<span class="sourceLineNo">609</span>        this.tableDescriptor);<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>    public TableName getTableName() {<a name="line.612"></a>
<span class="sourceLineNo">613</span>      return tableName;<a name="line.613"></a>
<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
<span class="sourceLineNo">615</span><a name="line.615"></a>
<span class="sourceLineNo">616</span>    public RegionStates getRegionStates() {<a name="line.616"></a>
<span class="sourceLineNo">617</span>      return regionStates;<a name="line.617"></a>
<span class="sourceLineNo">618</span>    }<a name="line.618"></a>
<span class="sourceLineNo">619</span><a name="line.619"></a>
<span class="sourceLineNo">620</span>    public List&lt;RegionInfo&gt; getTableRegions() {<a name="line.620"></a>
<span class="sourceLineNo">621</span>      return tableRegions;<a name="line.621"></a>
<span class="sourceLineNo">622</span>    }<a name="line.622"></a>
<span class="sourceLineNo">623</span><a name="line.623"></a>
<span class="sourceLineNo">624</span>    public double getAverageRegionSizeMb() {<a name="line.624"></a>
<span class="sourceLineNo">625</span>      return averageRegionSizeMb;<a name="line.625"></a>
<span class="sourceLineNo">626</span>    }<a name="line.626"></a>
<span class="sourceLineNo">627</span><a name="line.627"></a>
<span class="sourceLineNo">628</span>    public &lt;T&gt; T getOrDefault(String key, Function&lt;String, T&gt; function, T defaultValue) {<a name="line.628"></a>
<span class="sourceLineNo">629</span>      String value = tableDescriptor.getValue(key);<a name="line.629"></a>
<span class="sourceLineNo">630</span>      if (value == null) {<a name="line.630"></a>
<span class="sourceLineNo">631</span>        return defaultValue;<a name="line.631"></a>
<span class="sourceLineNo">632</span>      } else {<a name="line.632"></a>
<span class="sourceLineNo">633</span>        return function.apply(value);<a name="line.633"></a>
<span class="sourceLineNo">634</span>      }<a name="line.634"></a>
<span class="sourceLineNo">635</span>    }<a name="line.635"></a>
<span class="sourceLineNo">636</span>  }<a name="line.636"></a>
<span class="sourceLineNo">637</span>}<a name="line.637"></a>




























































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