<!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.balancer;<a name="line.18"></a>
<span class="sourceLineNo">019</span><a name="line.19"></a>
<span class="sourceLineNo">020</span>import java.util.ArrayDeque;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import java.util.ArrayList;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.util.Arrays;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.util.Collection;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.util.Deque;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.util.HashMap;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.util.LinkedList;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.util.List;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.util.Map;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.util.Objects;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.util.Random;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import java.util.stream.Collectors;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.RegionMetrics;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.ServerName;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.TableName;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.BalancerDecision;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.RegionInfo;<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.RegionPlan;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.AssignRegionAction;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.LocalityType;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.MoveRegionAction;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.SwapRegionsAction;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.namequeues.BalancerDecisionDetails;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.namequeues.NamedQueueRecorder;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.regionserver.compactions.OffPeakHours;<a name="line.51"></a>
<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.52"></a>
<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.53"></a>
<span class="sourceLineNo">054</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.54"></a>
<span class="sourceLineNo">055</span>import org.slf4j.Logger;<a name="line.55"></a>
<span class="sourceLineNo">056</span>import org.slf4j.LoggerFactory;<a name="line.56"></a>
<span class="sourceLineNo">057</span><a name="line.57"></a>
<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.58"></a>
<span class="sourceLineNo">059</span><a name="line.59"></a>
<span class="sourceLineNo">060</span>/**<a name="line.60"></a>
<span class="sourceLineNo">061</span> * &lt;p&gt;This is a best effort load balancer. Given a Cost function F(C) =&amp;gt; x It will<a name="line.61"></a>
<span class="sourceLineNo">062</span> * randomly try and mutate the cluster to Cprime. If F(Cprime) &amp;lt; F(C) then the<a name="line.62"></a>
<span class="sourceLineNo">063</span> * new cluster state becomes the plan. It includes costs functions to compute the cost of:&lt;/p&gt;<a name="line.63"></a>
<span class="sourceLineNo">064</span> * &lt;ul&gt;<a name="line.64"></a>
<span class="sourceLineNo">065</span> * &lt;li&gt;Region Load&lt;/li&gt;<a name="line.65"></a>
<span class="sourceLineNo">066</span> * &lt;li&gt;Table Load&lt;/li&gt;<a name="line.66"></a>
<span class="sourceLineNo">067</span> * &lt;li&gt;Data Locality&lt;/li&gt;<a name="line.67"></a>
<span class="sourceLineNo">068</span> * &lt;li&gt;Memstore Sizes&lt;/li&gt;<a name="line.68"></a>
<span class="sourceLineNo">069</span> * &lt;li&gt;Storefile Sizes&lt;/li&gt;<a name="line.69"></a>
<span class="sourceLineNo">070</span> * &lt;/ul&gt;<a name="line.70"></a>
<span class="sourceLineNo">071</span> *<a name="line.71"></a>
<span class="sourceLineNo">072</span> *<a name="line.72"></a>
<span class="sourceLineNo">073</span> * &lt;p&gt;Every cost function returns a number between 0 and 1 inclusive; where 0 is the lowest cost<a name="line.73"></a>
<span class="sourceLineNo">074</span> * best solution, and 1 is the highest possible cost and the worst solution.  The computed costs are<a name="line.74"></a>
<span class="sourceLineNo">075</span> * scaled by their respective multipliers:&lt;/p&gt;<a name="line.75"></a>
<span class="sourceLineNo">076</span> *<a name="line.76"></a>
<span class="sourceLineNo">077</span> * &lt;ul&gt;<a name="line.77"></a>
<span class="sourceLineNo">078</span> *   &lt;li&gt;hbase.master.balancer.stochastic.regionLoadCost&lt;/li&gt;<a name="line.78"></a>
<span class="sourceLineNo">079</span> *   &lt;li&gt;hbase.master.balancer.stochastic.moveCost&lt;/li&gt;<a name="line.79"></a>
<span class="sourceLineNo">080</span> *   &lt;li&gt;hbase.master.balancer.stochastic.tableLoadCost&lt;/li&gt;<a name="line.80"></a>
<span class="sourceLineNo">081</span> *   &lt;li&gt;hbase.master.balancer.stochastic.localityCost&lt;/li&gt;<a name="line.81"></a>
<span class="sourceLineNo">082</span> *   &lt;li&gt;hbase.master.balancer.stochastic.memstoreSizeCost&lt;/li&gt;<a name="line.82"></a>
<span class="sourceLineNo">083</span> *   &lt;li&gt;hbase.master.balancer.stochastic.storefileSizeCost&lt;/li&gt;<a name="line.83"></a>
<span class="sourceLineNo">084</span> * &lt;/ul&gt;<a name="line.84"></a>
<span class="sourceLineNo">085</span> *<a name="line.85"></a>
<span class="sourceLineNo">086</span> * &lt;p&gt;You can also add custom Cost function by setting the the following configuration value:&lt;/p&gt;<a name="line.86"></a>
<span class="sourceLineNo">087</span> * &lt;ul&gt;<a name="line.87"></a>
<span class="sourceLineNo">088</span> *     &lt;li&gt;hbase.master.balancer.stochastic.additionalCostFunctions&lt;/li&gt;<a name="line.88"></a>
<span class="sourceLineNo">089</span> * &lt;/ul&gt;<a name="line.89"></a>
<span class="sourceLineNo">090</span> *<a name="line.90"></a>
<span class="sourceLineNo">091</span> * &lt;p&gt;All custom Cost Functions needs to extends {@link StochasticLoadBalancer.CostFunction}&lt;/p&gt;<a name="line.91"></a>
<span class="sourceLineNo">092</span> *<a name="line.92"></a>
<span class="sourceLineNo">093</span> * &lt;p&gt;In addition to the above configurations, the balancer can be tuned by the following<a name="line.93"></a>
<span class="sourceLineNo">094</span> * configuration values:&lt;/p&gt;<a name="line.94"></a>
<span class="sourceLineNo">095</span> * &lt;ul&gt;<a name="line.95"></a>
<span class="sourceLineNo">096</span> *   &lt;li&gt;hbase.master.balancer.stochastic.maxMoveRegions which<a name="line.96"></a>
<span class="sourceLineNo">097</span> *   controls what the max number of regions that can be moved in a single invocation of this<a name="line.97"></a>
<span class="sourceLineNo">098</span> *   balancer.&lt;/li&gt;<a name="line.98"></a>
<span class="sourceLineNo">099</span> *   &lt;li&gt;hbase.master.balancer.stochastic.stepsPerRegion is the coefficient by which the number of<a name="line.99"></a>
<span class="sourceLineNo">100</span> *   regions is multiplied to try and get the number of times the balancer will<a name="line.100"></a>
<span class="sourceLineNo">101</span> *   mutate all servers.&lt;/li&gt;<a name="line.101"></a>
<span class="sourceLineNo">102</span> *   &lt;li&gt;hbase.master.balancer.stochastic.maxSteps which controls the maximum number of times that<a name="line.102"></a>
<span class="sourceLineNo">103</span> *   the balancer will try and mutate all the servers. The balancer will use the minimum of this<a name="line.103"></a>
<span class="sourceLineNo">104</span> *   value and the above computation.&lt;/li&gt;<a name="line.104"></a>
<span class="sourceLineNo">105</span> * &lt;/ul&gt;<a name="line.105"></a>
<span class="sourceLineNo">106</span> *<a name="line.106"></a>
<span class="sourceLineNo">107</span> * &lt;p&gt;This balancer is best used with hbase.master.loadbalance.bytable set to false<a name="line.107"></a>
<span class="sourceLineNo">108</span> * so that the balancer gets the full picture of all loads on the cluster.&lt;/p&gt;<a name="line.108"></a>
<span class="sourceLineNo">109</span> */<a name="line.109"></a>
<span class="sourceLineNo">110</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.110"></a>
<span class="sourceLineNo">111</span>@edu.umd.cs.findbugs.annotations.SuppressWarnings(value="IS2_INCONSISTENT_SYNC",<a name="line.111"></a>
<span class="sourceLineNo">112</span>  justification="Complaint is about costFunctions not being synchronized; not end of the world")<a name="line.112"></a>
<span class="sourceLineNo">113</span>public class StochasticLoadBalancer extends BaseLoadBalancer {<a name="line.113"></a>
<span class="sourceLineNo">114</span><a name="line.114"></a>
<span class="sourceLineNo">115</span>  protected static final String STEPS_PER_REGION_KEY =<a name="line.115"></a>
<span class="sourceLineNo">116</span>      "hbase.master.balancer.stochastic.stepsPerRegion";<a name="line.116"></a>
<span class="sourceLineNo">117</span>  protected static final String MAX_STEPS_KEY =<a name="line.117"></a>
<span class="sourceLineNo">118</span>      "hbase.master.balancer.stochastic.maxSteps";<a name="line.118"></a>
<span class="sourceLineNo">119</span>  protected static final String RUN_MAX_STEPS_KEY =<a name="line.119"></a>
<span class="sourceLineNo">120</span>      "hbase.master.balancer.stochastic.runMaxSteps";<a name="line.120"></a>
<span class="sourceLineNo">121</span>  protected static final String MAX_RUNNING_TIME_KEY =<a name="line.121"></a>
<span class="sourceLineNo">122</span>      "hbase.master.balancer.stochastic.maxRunningTime";<a name="line.122"></a>
<span class="sourceLineNo">123</span>  protected static final String KEEP_REGION_LOADS =<a name="line.123"></a>
<span class="sourceLineNo">124</span>      "hbase.master.balancer.stochastic.numRegionLoadsToRemember";<a name="line.124"></a>
<span class="sourceLineNo">125</span>  private static final String TABLE_FUNCTION_SEP = "_";<a name="line.125"></a>
<span class="sourceLineNo">126</span>  protected static final String MIN_COST_NEED_BALANCE_KEY =<a name="line.126"></a>
<span class="sourceLineNo">127</span>      "hbase.master.balancer.stochastic.minCostNeedBalance";<a name="line.127"></a>
<span class="sourceLineNo">128</span>  protected static final String COST_FUNCTIONS_COST_FUNCTIONS_KEY =<a name="line.128"></a>
<span class="sourceLineNo">129</span>          "hbase.master.balancer.stochastic.additionalCostFunctions";<a name="line.129"></a>
<span class="sourceLineNo">130</span><a name="line.130"></a>
<span class="sourceLineNo">131</span>  protected static final Random RANDOM = new Random(System.currentTimeMillis());<a name="line.131"></a>
<span class="sourceLineNo">132</span>  private static final Logger LOG = LoggerFactory.getLogger(StochasticLoadBalancer.class);<a name="line.132"></a>
<span class="sourceLineNo">133</span><a name="line.133"></a>
<span class="sourceLineNo">134</span>  Map&lt;String, Deque&lt;BalancerRegionLoad&gt;&gt; loads = new HashMap&lt;&gt;();<a name="line.134"></a>
<span class="sourceLineNo">135</span><a name="line.135"></a>
<span class="sourceLineNo">136</span>  // values are defaults<a name="line.136"></a>
<span class="sourceLineNo">137</span>  private int maxSteps = 1000000;<a name="line.137"></a>
<span class="sourceLineNo">138</span>  private boolean runMaxSteps = false;<a name="line.138"></a>
<span class="sourceLineNo">139</span>  private int stepsPerRegion = 800;<a name="line.139"></a>
<span class="sourceLineNo">140</span>  private long maxRunningTime = 30 * 1000 * 1; // 30 seconds.<a name="line.140"></a>
<span class="sourceLineNo">141</span>  private int numRegionLoadsToRemember = 15;<a name="line.141"></a>
<span class="sourceLineNo">142</span>  private float minCostNeedBalance = 0.05f;<a name="line.142"></a>
<span class="sourceLineNo">143</span><a name="line.143"></a>
<span class="sourceLineNo">144</span>  private List&lt;CandidateGenerator&gt; candidateGenerators;<a name="line.144"></a>
<span class="sourceLineNo">145</span>  private CostFromRegionLoadFunction[] regionLoadFunctions;<a name="line.145"></a>
<span class="sourceLineNo">146</span>  private List&lt;CostFunction&gt; costFunctions; // FindBugs: Wants this protected; IS2_INCONSISTENT_SYNC<a name="line.146"></a>
<span class="sourceLineNo">147</span><a name="line.147"></a>
<span class="sourceLineNo">148</span>  // to save and report costs to JMX<a name="line.148"></a>
<span class="sourceLineNo">149</span>  private Double curOverallCost = 0d;<a name="line.149"></a>
<span class="sourceLineNo">150</span>  private Double[] tempFunctionCosts;<a name="line.150"></a>
<span class="sourceLineNo">151</span>  private Double[] curFunctionCosts;<a name="line.151"></a>
<span class="sourceLineNo">152</span><a name="line.152"></a>
<span class="sourceLineNo">153</span>  // Keep locality based picker and cost function to alert them<a name="line.153"></a>
<span class="sourceLineNo">154</span>  // when new services are offered<a name="line.154"></a>
<span class="sourceLineNo">155</span>  private LocalityBasedCandidateGenerator localityCandidateGenerator;<a name="line.155"></a>
<span class="sourceLineNo">156</span>  private ServerLocalityCostFunction localityCost;<a name="line.156"></a>
<span class="sourceLineNo">157</span>  private RackLocalityCostFunction rackLocalityCost;<a name="line.157"></a>
<span class="sourceLineNo">158</span>  private RegionReplicaHostCostFunction regionReplicaHostCostFunction;<a name="line.158"></a>
<span class="sourceLineNo">159</span>  private RegionReplicaRackCostFunction regionReplicaRackCostFunction;<a name="line.159"></a>
<span class="sourceLineNo">160</span><a name="line.160"></a>
<span class="sourceLineNo">161</span>  /**<a name="line.161"></a>
<span class="sourceLineNo">162</span>   * Use to add balancer decision history to ring-buffer<a name="line.162"></a>
<span class="sourceLineNo">163</span>   */<a name="line.163"></a>
<span class="sourceLineNo">164</span>  NamedQueueRecorder namedQueueRecorder;<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>   * The constructor that pass a MetricsStochasticBalancer to BaseLoadBalancer to replace its<a name="line.167"></a>
<span class="sourceLineNo">168</span>   * default MetricsBalancer<a name="line.168"></a>
<span class="sourceLineNo">169</span>   */<a name="line.169"></a>
<span class="sourceLineNo">170</span>  public StochasticLoadBalancer() {<a name="line.170"></a>
<span class="sourceLineNo">171</span>    super(new MetricsStochasticBalancer());<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>  @Override<a name="line.174"></a>
<span class="sourceLineNo">175</span>  public void onConfigurationChange(Configuration conf) {<a name="line.175"></a>
<span class="sourceLineNo">176</span>    setConf(conf);<a name="line.176"></a>
<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
<span class="sourceLineNo">178</span><a name="line.178"></a>
<span class="sourceLineNo">179</span>  @Override<a name="line.179"></a>
<span class="sourceLineNo">180</span>  public synchronized void setConf(Configuration conf) {<a name="line.180"></a>
<span class="sourceLineNo">181</span>    super.setConf(conf);<a name="line.181"></a>
<span class="sourceLineNo">182</span>    maxSteps = conf.getInt(MAX_STEPS_KEY, maxSteps);<a name="line.182"></a>
<span class="sourceLineNo">183</span>    stepsPerRegion = conf.getInt(STEPS_PER_REGION_KEY, stepsPerRegion);<a name="line.183"></a>
<span class="sourceLineNo">184</span>    maxRunningTime = conf.getLong(MAX_RUNNING_TIME_KEY, maxRunningTime);<a name="line.184"></a>
<span class="sourceLineNo">185</span>    runMaxSteps = conf.getBoolean(RUN_MAX_STEPS_KEY, runMaxSteps);<a name="line.185"></a>
<span class="sourceLineNo">186</span><a name="line.186"></a>
<span class="sourceLineNo">187</span>    numRegionLoadsToRemember = conf.getInt(KEEP_REGION_LOADS, numRegionLoadsToRemember);<a name="line.187"></a>
<span class="sourceLineNo">188</span>    minCostNeedBalance = conf.getFloat(MIN_COST_NEED_BALANCE_KEY, minCostNeedBalance);<a name="line.188"></a>
<span class="sourceLineNo">189</span>    if (localityCandidateGenerator == null) {<a name="line.189"></a>
<span class="sourceLineNo">190</span>      localityCandidateGenerator = new LocalityBasedCandidateGenerator(services);<a name="line.190"></a>
<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
<span class="sourceLineNo">192</span>    localityCost = new ServerLocalityCostFunction(conf);<a name="line.192"></a>
<span class="sourceLineNo">193</span>    rackLocalityCost = new RackLocalityCostFunction(conf);<a name="line.193"></a>
<span class="sourceLineNo">194</span><a name="line.194"></a>
<span class="sourceLineNo">195</span>    if (this.candidateGenerators == null) {<a name="line.195"></a>
<span class="sourceLineNo">196</span>      candidateGenerators = Lists.newArrayList();<a name="line.196"></a>
<span class="sourceLineNo">197</span>      candidateGenerators.add(new RandomCandidateGenerator());<a name="line.197"></a>
<span class="sourceLineNo">198</span>      candidateGenerators.add(new LoadCandidateGenerator());<a name="line.198"></a>
<span class="sourceLineNo">199</span>      candidateGenerators.add(localityCandidateGenerator);<a name="line.199"></a>
<span class="sourceLineNo">200</span>      candidateGenerators.add(new RegionReplicaRackCandidateGenerator());<a name="line.200"></a>
<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
<span class="sourceLineNo">202</span>    regionLoadFunctions = new CostFromRegionLoadFunction[] {<a name="line.202"></a>
<span class="sourceLineNo">203</span>      new ReadRequestCostFunction(conf),<a name="line.203"></a>
<span class="sourceLineNo">204</span>      new CPRequestCostFunction(conf),<a name="line.204"></a>
<span class="sourceLineNo">205</span>      new WriteRequestCostFunction(conf),<a name="line.205"></a>
<span class="sourceLineNo">206</span>      new MemStoreSizeCostFunction(conf),<a name="line.206"></a>
<span class="sourceLineNo">207</span>      new StoreFileCostFunction(conf)<a name="line.207"></a>
<span class="sourceLineNo">208</span>    };<a name="line.208"></a>
<span class="sourceLineNo">209</span>    regionReplicaHostCostFunction = new RegionReplicaHostCostFunction(conf);<a name="line.209"></a>
<span class="sourceLineNo">210</span>    regionReplicaRackCostFunction = new RegionReplicaRackCostFunction(conf);<a name="line.210"></a>
<span class="sourceLineNo">211</span><a name="line.211"></a>
<span class="sourceLineNo">212</span>    costFunctions = new ArrayList&lt;&gt;();<a name="line.212"></a>
<span class="sourceLineNo">213</span>    addCostFunction(new RegionCountSkewCostFunction(conf));<a name="line.213"></a>
<span class="sourceLineNo">214</span>    addCostFunction(new PrimaryRegionCountSkewCostFunction(conf));<a name="line.214"></a>
<span class="sourceLineNo">215</span>    addCostFunction(new MoveCostFunction(conf));<a name="line.215"></a>
<span class="sourceLineNo">216</span>    addCostFunction(localityCost);<a name="line.216"></a>
<span class="sourceLineNo">217</span>    addCostFunction(rackLocalityCost);<a name="line.217"></a>
<span class="sourceLineNo">218</span>    addCostFunction(new TableSkewCostFunction(conf));<a name="line.218"></a>
<span class="sourceLineNo">219</span>    addCostFunction(regionReplicaHostCostFunction);<a name="line.219"></a>
<span class="sourceLineNo">220</span>    addCostFunction(regionReplicaRackCostFunction);<a name="line.220"></a>
<span class="sourceLineNo">221</span>    addCostFunction(regionLoadFunctions[0]);<a name="line.221"></a>
<span class="sourceLineNo">222</span>    addCostFunction(regionLoadFunctions[1]);<a name="line.222"></a>
<span class="sourceLineNo">223</span>    addCostFunction(regionLoadFunctions[2]);<a name="line.223"></a>
<span class="sourceLineNo">224</span>    addCostFunction(regionLoadFunctions[3]);<a name="line.224"></a>
<span class="sourceLineNo">225</span>    addCostFunction(regionLoadFunctions[4]);<a name="line.225"></a>
<span class="sourceLineNo">226</span>    loadCustomCostFunctions(conf);<a name="line.226"></a>
<span class="sourceLineNo">227</span><a name="line.227"></a>
<span class="sourceLineNo">228</span>    curFunctionCosts= new Double[costFunctions.size()];<a name="line.228"></a>
<span class="sourceLineNo">229</span>    tempFunctionCosts= new Double[costFunctions.size()];<a name="line.229"></a>
<span class="sourceLineNo">230</span><a name="line.230"></a>
<span class="sourceLineNo">231</span>    boolean isBalancerDecisionRecording = getConf()<a name="line.231"></a>
<span class="sourceLineNo">232</span>      .getBoolean(BaseLoadBalancer.BALANCER_DECISION_BUFFER_ENABLED,<a name="line.232"></a>
<span class="sourceLineNo">233</span>        BaseLoadBalancer.DEFAULT_BALANCER_DECISION_BUFFER_ENABLED);<a name="line.233"></a>
<span class="sourceLineNo">234</span>    if (this.namedQueueRecorder == null &amp;&amp; isBalancerDecisionRecording) {<a name="line.234"></a>
<span class="sourceLineNo">235</span>      this.namedQueueRecorder = NamedQueueRecorder.getInstance(getConf());<a name="line.235"></a>
<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
<span class="sourceLineNo">237</span><a name="line.237"></a>
<span class="sourceLineNo">238</span>    LOG.info("Loaded config; maxSteps=" + maxSteps + ", stepsPerRegion=" + stepsPerRegion +<a name="line.238"></a>
<span class="sourceLineNo">239</span>            ", maxRunningTime=" + maxRunningTime + ", isByTable=" + isByTable + ", CostFunctions=" +<a name="line.239"></a>
<span class="sourceLineNo">240</span>            Arrays.toString(getCostFunctionNames()) + " etc.");<a name="line.240"></a>
<span class="sourceLineNo">241</span>  }<a name="line.241"></a>
<span class="sourceLineNo">242</span><a name="line.242"></a>
<span class="sourceLineNo">243</span>  private void loadCustomCostFunctions(Configuration conf) {<a name="line.243"></a>
<span class="sourceLineNo">244</span>    String[] functionsNames = conf.getStrings(COST_FUNCTIONS_COST_FUNCTIONS_KEY);<a name="line.244"></a>
<span class="sourceLineNo">245</span><a name="line.245"></a>
<span class="sourceLineNo">246</span>    if (null == functionsNames) {<a name="line.246"></a>
<span class="sourceLineNo">247</span>      return;<a name="line.247"></a>
<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
<span class="sourceLineNo">249</span><a name="line.249"></a>
<span class="sourceLineNo">250</span>    costFunctions.addAll(Arrays.stream(functionsNames).map(c -&gt; {<a name="line.250"></a>
<span class="sourceLineNo">251</span>      Class&lt;? extends CostFunction&gt; klass = null;<a name="line.251"></a>
<span class="sourceLineNo">252</span>      try {<a name="line.252"></a>
<span class="sourceLineNo">253</span>        klass = (Class&lt;? extends CostFunction&gt;) Class.forName(c);<a name="line.253"></a>
<span class="sourceLineNo">254</span>      } catch (ClassNotFoundException e) {<a name="line.254"></a>
<span class="sourceLineNo">255</span>        LOG.warn("Cannot load class " + c + "': " + e.getMessage());<a name="line.255"></a>
<span class="sourceLineNo">256</span>      }<a name="line.256"></a>
<span class="sourceLineNo">257</span>      if (null == klass) {<a name="line.257"></a>
<span class="sourceLineNo">258</span>        return null;<a name="line.258"></a>
<span class="sourceLineNo">259</span>      }<a name="line.259"></a>
<span class="sourceLineNo">260</span>      CostFunction reflected = ReflectionUtils.newInstance(klass, conf);<a name="line.260"></a>
<span class="sourceLineNo">261</span>      LOG.info(<a name="line.261"></a>
<span class="sourceLineNo">262</span>        "Successfully loaded custom CostFunction '" + reflected.getClass().getSimpleName() + "'");<a name="line.262"></a>
<span class="sourceLineNo">263</span>      return reflected;<a name="line.263"></a>
<span class="sourceLineNo">264</span>    }).filter(Objects::nonNull).collect(Collectors.toList()));<a name="line.264"></a>
<span class="sourceLineNo">265</span>  }<a name="line.265"></a>
<span class="sourceLineNo">266</span><a name="line.266"></a>
<span class="sourceLineNo">267</span>  protected void setCandidateGenerators(List&lt;CandidateGenerator&gt; customCandidateGenerators) {<a name="line.267"></a>
<span class="sourceLineNo">268</span>    this.candidateGenerators = customCandidateGenerators;<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>  /**<a name="line.271"></a>
<span class="sourceLineNo">272</span>   * Exposed for Testing!<a name="line.272"></a>
<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
<span class="sourceLineNo">274</span>  public List&lt;CandidateGenerator&gt; getCandidateGenerators() {<a name="line.274"></a>
<span class="sourceLineNo">275</span>    return this.candidateGenerators;<a name="line.275"></a>
<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
<span class="sourceLineNo">277</span><a name="line.277"></a>
<span class="sourceLineNo">278</span>  @Override<a name="line.278"></a>
<span class="sourceLineNo">279</span>  protected void setSlop(Configuration conf) {<a name="line.279"></a>
<span class="sourceLineNo">280</span>    this.slop = conf.getFloat("hbase.regions.slop", 0.001F);<a name="line.280"></a>
<span class="sourceLineNo">281</span>  }<a name="line.281"></a>
<span class="sourceLineNo">282</span><a name="line.282"></a>
<span class="sourceLineNo">283</span>  @Override<a name="line.283"></a>
<span class="sourceLineNo">284</span>  public synchronized void setClusterMetrics(ClusterMetrics st) {<a name="line.284"></a>
<span class="sourceLineNo">285</span>    super.setClusterMetrics(st);<a name="line.285"></a>
<span class="sourceLineNo">286</span>    updateRegionLoad();<a name="line.286"></a>
<span class="sourceLineNo">287</span>    for(CostFromRegionLoadFunction cost : regionLoadFunctions) {<a name="line.287"></a>
<span class="sourceLineNo">288</span>      cost.setClusterMetrics(st);<a name="line.288"></a>
<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
<span class="sourceLineNo">290</span><a name="line.290"></a>
<span class="sourceLineNo">291</span>    // update metrics size<a name="line.291"></a>
<span class="sourceLineNo">292</span>    try {<a name="line.292"></a>
<span class="sourceLineNo">293</span>      // by-table or ensemble mode<a name="line.293"></a>
<span class="sourceLineNo">294</span>      int tablesCount = isByTable ? services.getTableDescriptors().getAll().size() : 1;<a name="line.294"></a>
<span class="sourceLineNo">295</span>      int functionsCount = getCostFunctionNames().length;<a name="line.295"></a>
<span class="sourceLineNo">296</span><a name="line.296"></a>
<span class="sourceLineNo">297</span>      updateMetricsSize(tablesCount * (functionsCount + 1)); // +1 for overall<a name="line.297"></a>
<span class="sourceLineNo">298</span>    } catch (Exception e) {<a name="line.298"></a>
<span class="sourceLineNo">299</span>      LOG.error("failed to get the size of all tables", e);<a name="line.299"></a>
<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
<span class="sourceLineNo">302</span><a name="line.302"></a>
<span class="sourceLineNo">303</span>  /**<a name="line.303"></a>
<span class="sourceLineNo">304</span>   * Update the number of metrics that are reported to JMX<a name="line.304"></a>
<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
<span class="sourceLineNo">306</span>  public void updateMetricsSize(int size) {<a name="line.306"></a>
<span class="sourceLineNo">307</span>    if (metricsBalancer instanceof MetricsStochasticBalancer) {<a name="line.307"></a>
<span class="sourceLineNo">308</span>        ((MetricsStochasticBalancer) metricsBalancer).updateMetricsSize(size);<a name="line.308"></a>
<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
<span class="sourceLineNo">310</span>  }<a name="line.310"></a>
<span class="sourceLineNo">311</span><a name="line.311"></a>
<span class="sourceLineNo">312</span>  @Override<a name="line.312"></a>
<span class="sourceLineNo">313</span>  public synchronized void setMasterServices(MasterServices masterServices) {<a name="line.313"></a>
<span class="sourceLineNo">314</span>    super.setMasterServices(masterServices);<a name="line.314"></a>
<span class="sourceLineNo">315</span>    this.localityCandidateGenerator.setServices(masterServices);<a name="line.315"></a>
<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
<span class="sourceLineNo">317</span><a name="line.317"></a>
<span class="sourceLineNo">318</span>  @Override<a name="line.318"></a>
<span class="sourceLineNo">319</span>  protected synchronized boolean areSomeRegionReplicasColocated(Cluster c) {<a name="line.319"></a>
<span class="sourceLineNo">320</span>    regionReplicaHostCostFunction.init(c);<a name="line.320"></a>
<span class="sourceLineNo">321</span>    if (regionReplicaHostCostFunction.cost() &gt; 0) return true;<a name="line.321"></a>
<span class="sourceLineNo">322</span>    regionReplicaRackCostFunction.init(c);<a name="line.322"></a>
<span class="sourceLineNo">323</span>    if (regionReplicaRackCostFunction.cost() &gt; 0) return true;<a name="line.323"></a>
<span class="sourceLineNo">324</span>    return false;<a name="line.324"></a>
<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
<span class="sourceLineNo">326</span><a name="line.326"></a>
<span class="sourceLineNo">327</span>  @Override<a name="line.327"></a>
<span class="sourceLineNo">328</span>  protected boolean needsBalance(TableName tableName, Cluster cluster) {<a name="line.328"></a>
<span class="sourceLineNo">329</span>    ClusterLoadState cs = new ClusterLoadState(cluster.clusterState);<a name="line.329"></a>
<span class="sourceLineNo">330</span>    if (cs.getNumServers() &lt; MIN_SERVER_BALANCE) {<a name="line.330"></a>
<span class="sourceLineNo">331</span>      if (LOG.isDebugEnabled()) {<a name="line.331"></a>
<span class="sourceLineNo">332</span>        LOG.debug("Not running balancer because only " + cs.getNumServers()<a name="line.332"></a>
<span class="sourceLineNo">333</span>            + " active regionserver(s)");<a name="line.333"></a>
<span class="sourceLineNo">334</span>      }<a name="line.334"></a>
<span class="sourceLineNo">335</span>      return false;<a name="line.335"></a>
<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
<span class="sourceLineNo">337</span>    if (areSomeRegionReplicasColocated(cluster)) {<a name="line.337"></a>
<span class="sourceLineNo">338</span>      return true;<a name="line.338"></a>
<span class="sourceLineNo">339</span>    }<a name="line.339"></a>
<span class="sourceLineNo">340</span><a name="line.340"></a>
<span class="sourceLineNo">341</span>    if (idleRegionServerExist(cluster)){<a name="line.341"></a>
<span class="sourceLineNo">342</span>      return true;<a name="line.342"></a>
<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
<span class="sourceLineNo">344</span><a name="line.344"></a>
<span class="sourceLineNo">345</span>    double total = 0.0;<a name="line.345"></a>
<span class="sourceLineNo">346</span>    float sumMultiplier = 0.0f;<a name="line.346"></a>
<span class="sourceLineNo">347</span>    for (CostFunction c : costFunctions) {<a name="line.347"></a>
<span class="sourceLineNo">348</span>      float multiplier = c.getMultiplier();<a name="line.348"></a>
<span class="sourceLineNo">349</span>      if (multiplier &lt;= 0) {<a name="line.349"></a>
<span class="sourceLineNo">350</span>        LOG.trace("{} not needed because multiplier is &lt;= 0", c.getClass().getSimpleName());<a name="line.350"></a>
<span class="sourceLineNo">351</span>        continue;<a name="line.351"></a>
<span class="sourceLineNo">352</span>      }<a name="line.352"></a>
<span class="sourceLineNo">353</span>      if (!c.isNeeded()) {<a name="line.353"></a>
<span class="sourceLineNo">354</span>        LOG.trace("{} not needed", c.getClass().getSimpleName());<a name="line.354"></a>
<span class="sourceLineNo">355</span>        continue;<a name="line.355"></a>
<span class="sourceLineNo">356</span>      }<a name="line.356"></a>
<span class="sourceLineNo">357</span>      sumMultiplier += multiplier;<a name="line.357"></a>
<span class="sourceLineNo">358</span>      total += c.cost() * multiplier;<a name="line.358"></a>
<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
<span class="sourceLineNo">360</span><a name="line.360"></a>
<span class="sourceLineNo">361</span>    boolean balanced = total &lt;= 0 || sumMultiplier &lt;= 0 ||<a name="line.361"></a>
<span class="sourceLineNo">362</span>        (sumMultiplier &gt; 0 &amp;&amp; (total / sumMultiplier) &lt; minCostNeedBalance);<a name="line.362"></a>
<span class="sourceLineNo">363</span>    if (LOG.isDebugEnabled()) {<a name="line.363"></a>
<span class="sourceLineNo">364</span>      LOG.debug("{} {}; total cost={}, sum multiplier={}; cost/multiplier to need a balance is {}",<a name="line.364"></a>
<span class="sourceLineNo">365</span>          balanced ? "Skipping load balancing because balanced" : "We need to load balance",<a name="line.365"></a>
<span class="sourceLineNo">366</span>          isByTable ? String.format("table (%s)", tableName) : "cluster",<a name="line.366"></a>
<span class="sourceLineNo">367</span>          total, sumMultiplier, minCostNeedBalance);<a name="line.367"></a>
<span class="sourceLineNo">368</span>      if (LOG.isTraceEnabled()) {<a name="line.368"></a>
<span class="sourceLineNo">369</span>        LOG.trace("Balance decision detailed function costs={}", functionCost());<a name="line.369"></a>
<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
<span class="sourceLineNo">371</span>    }<a name="line.371"></a>
<span class="sourceLineNo">372</span>    return !balanced;<a name="line.372"></a>
<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
<span class="sourceLineNo">374</span><a name="line.374"></a>
<span class="sourceLineNo">375</span>  Cluster.Action nextAction(Cluster cluster) {<a name="line.375"></a>
<span class="sourceLineNo">376</span>    return candidateGenerators.get(RANDOM.nextInt(candidateGenerators.size()))<a name="line.376"></a>
<span class="sourceLineNo">377</span>            .generate(cluster);<a name="line.377"></a>
<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
<span class="sourceLineNo">379</span><a name="line.379"></a>
<span class="sourceLineNo">380</span>  /**<a name="line.380"></a>
<span class="sourceLineNo">381</span>   * Given the cluster state this will try and approach an optimal balance. This<a name="line.381"></a>
<span class="sourceLineNo">382</span>   * should always approach the optimal state given enough steps.<a name="line.382"></a>
<span class="sourceLineNo">383</span>   */<a name="line.383"></a>
<span class="sourceLineNo">384</span>  @Override<a name="line.384"></a>
<span class="sourceLineNo">385</span>  public synchronized List&lt;RegionPlan&gt; balanceTable(TableName tableName, Map&lt;ServerName,<a name="line.385"></a>
<span class="sourceLineNo">386</span>    List&lt;RegionInfo&gt;&gt; loadOfOneTable) {<a name="line.386"></a>
<span class="sourceLineNo">387</span>    List&lt;RegionPlan&gt; plans = balanceMasterRegions(loadOfOneTable);<a name="line.387"></a>
<span class="sourceLineNo">388</span>    if (plans != null || loadOfOneTable == null || loadOfOneTable.size() &lt;= 1) {<a name="line.388"></a>
<span class="sourceLineNo">389</span>      return plans;<a name="line.389"></a>
<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
<span class="sourceLineNo">391</span><a name="line.391"></a>
<span class="sourceLineNo">392</span>    if (masterServerName != null &amp;&amp; loadOfOneTable.containsKey(masterServerName)) {<a name="line.392"></a>
<span class="sourceLineNo">393</span>      if (loadOfOneTable.size() &lt;= 2) {<a name="line.393"></a>
<span class="sourceLineNo">394</span>        return null;<a name="line.394"></a>
<span class="sourceLineNo">395</span>      }<a name="line.395"></a>
<span class="sourceLineNo">396</span>      loadOfOneTable = new HashMap&lt;&gt;(loadOfOneTable);<a name="line.396"></a>
<span class="sourceLineNo">397</span>      loadOfOneTable.remove(masterServerName);<a name="line.397"></a>
<span class="sourceLineNo">398</span>    }<a name="line.398"></a>
<span class="sourceLineNo">399</span><a name="line.399"></a>
<span class="sourceLineNo">400</span>    // On clusters with lots of HFileLinks or lots of reference files,<a name="line.400"></a>
<span class="sourceLineNo">401</span>    // instantiating the storefile infos can be quite expensive.<a name="line.401"></a>
<span class="sourceLineNo">402</span>    // Allow turning this feature off if the locality cost is not going to<a name="line.402"></a>
<span class="sourceLineNo">403</span>    // be used in any computations.<a name="line.403"></a>
<span class="sourceLineNo">404</span>    RegionHDFSBlockLocationFinder finder = null;<a name="line.404"></a>
<span class="sourceLineNo">405</span>    if ((this.localityCost != null &amp;&amp; this.localityCost.getMultiplier() &gt; 0)<a name="line.405"></a>
<span class="sourceLineNo">406</span>        || (this.rackLocalityCost != null &amp;&amp; this.rackLocalityCost.getMultiplier() &gt; 0)) {<a name="line.406"></a>
<span class="sourceLineNo">407</span>      finder = this.regionFinder;<a name="line.407"></a>
<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
<span class="sourceLineNo">409</span><a name="line.409"></a>
<span class="sourceLineNo">410</span>    //The clusterState that is given to this method contains the state<a name="line.410"></a>
<span class="sourceLineNo">411</span>    //of all the regions in the table(s) (that's true today)<a name="line.411"></a>
<span class="sourceLineNo">412</span>    // Keep track of servers to iterate through them.<a name="line.412"></a>
<span class="sourceLineNo">413</span>    Cluster cluster = new Cluster(loadOfOneTable, loads, finder, rackManager);<a name="line.413"></a>
<span class="sourceLineNo">414</span><a name="line.414"></a>
<span class="sourceLineNo">415</span>    long startTime = EnvironmentEdgeManager.currentTime();<a name="line.415"></a>
<span class="sourceLineNo">416</span><a name="line.416"></a>
<span class="sourceLineNo">417</span>    initCosts(cluster);<a name="line.417"></a>
<span class="sourceLineNo">418</span><a name="line.418"></a>
<span class="sourceLineNo">419</span>    if (!needsBalance(tableName, cluster)) {<a name="line.419"></a>
<span class="sourceLineNo">420</span>      return null;<a name="line.420"></a>
<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
<span class="sourceLineNo">422</span><a name="line.422"></a>
<span class="sourceLineNo">423</span>    double currentCost = computeCost(cluster, Double.MAX_VALUE);<a name="line.423"></a>
<span class="sourceLineNo">424</span>    curOverallCost = currentCost;<a name="line.424"></a>
<span class="sourceLineNo">425</span>    System.arraycopy(tempFunctionCosts, 0, curFunctionCosts, 0, curFunctionCosts.length);<a name="line.425"></a>
<span class="sourceLineNo">426</span>    double initCost = currentCost;<a name="line.426"></a>
<span class="sourceLineNo">427</span>    double newCost;<a name="line.427"></a>
<span class="sourceLineNo">428</span><a name="line.428"></a>
<span class="sourceLineNo">429</span>    long computedMaxSteps;<a name="line.429"></a>
<span class="sourceLineNo">430</span>    if (runMaxSteps) {<a name="line.430"></a>
<span class="sourceLineNo">431</span>      computedMaxSteps = Math.max(this.maxSteps,<a name="line.431"></a>
<span class="sourceLineNo">432</span>          ((long)cluster.numRegions * (long)this.stepsPerRegion * (long)cluster.numServers));<a name="line.432"></a>
<span class="sourceLineNo">433</span>    } else {<a name="line.433"></a>
<span class="sourceLineNo">434</span>      long calculatedMaxSteps = (long)cluster.numRegions * (long)this.stepsPerRegion *<a name="line.434"></a>
<span class="sourceLineNo">435</span>          (long)cluster.numServers;<a name="line.435"></a>
<span class="sourceLineNo">436</span>      computedMaxSteps = Math.min(this.maxSteps, calculatedMaxSteps);<a name="line.436"></a>
<span class="sourceLineNo">437</span>      if (calculatedMaxSteps &gt; maxSteps) {<a name="line.437"></a>
<span class="sourceLineNo">438</span>        LOG.warn("calculatedMaxSteps:{} for loadbalancer's stochastic walk is larger than "<a name="line.438"></a>
<span class="sourceLineNo">439</span>            + "maxSteps:{}. Hence load balancing may not work well. Setting parameter "<a name="line.439"></a>
<span class="sourceLineNo">440</span>            + "\"hbase.master.balancer.stochastic.runMaxSteps\" to true can overcome this issue."<a name="line.440"></a>
<span class="sourceLineNo">441</span>            + "(This config change does not require service restart)", calculatedMaxSteps,<a name="line.441"></a>
<span class="sourceLineNo">442</span>            maxSteps);<a name="line.442"></a>
<span class="sourceLineNo">443</span>      }<a name="line.443"></a>
<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
<span class="sourceLineNo">445</span>    LOG.info("start StochasticLoadBalancer.balancer, initCost=" + currentCost + ", functionCost="<a name="line.445"></a>
<span class="sourceLineNo">446</span>        + functionCost() + " computedMaxSteps: " + computedMaxSteps);<a name="line.446"></a>
<span class="sourceLineNo">447</span><a name="line.447"></a>
<span class="sourceLineNo">448</span>    final String initFunctionTotalCosts = totalCostsPerFunc();<a name="line.448"></a>
<span class="sourceLineNo">449</span>    // Perform a stochastic walk to see if we can get a good fit.<a name="line.449"></a>
<span class="sourceLineNo">450</span>    long step;<a name="line.450"></a>
<span class="sourceLineNo">451</span><a name="line.451"></a>
<span class="sourceLineNo">452</span>    for (step = 0; step &lt; computedMaxSteps; step++) {<a name="line.452"></a>
<span class="sourceLineNo">453</span>      Cluster.Action action = nextAction(cluster);<a name="line.453"></a>
<span class="sourceLineNo">454</span><a name="line.454"></a>
<span class="sourceLineNo">455</span>      if (action.type == Type.NULL) {<a name="line.455"></a>
<span class="sourceLineNo">456</span>        continue;<a name="line.456"></a>
<span class="sourceLineNo">457</span>      }<a name="line.457"></a>
<span class="sourceLineNo">458</span><a name="line.458"></a>
<span class="sourceLineNo">459</span>      cluster.doAction(action);<a name="line.459"></a>
<span class="sourceLineNo">460</span>      updateCostsWithAction(cluster, action);<a name="line.460"></a>
<span class="sourceLineNo">461</span><a name="line.461"></a>
<span class="sourceLineNo">462</span>      newCost = computeCost(cluster, currentCost);<a name="line.462"></a>
<span class="sourceLineNo">463</span><a name="line.463"></a>
<span class="sourceLineNo">464</span>      // Should this be kept?<a name="line.464"></a>
<span class="sourceLineNo">465</span>      if (newCost &lt; currentCost) {<a name="line.465"></a>
<span class="sourceLineNo">466</span>        currentCost = newCost;<a name="line.466"></a>
<span class="sourceLineNo">467</span><a name="line.467"></a>
<span class="sourceLineNo">468</span>        // save for JMX<a name="line.468"></a>
<span class="sourceLineNo">469</span>        curOverallCost = currentCost;<a name="line.469"></a>
<span class="sourceLineNo">470</span>        System.arraycopy(tempFunctionCosts, 0, curFunctionCosts, 0, curFunctionCosts.length);<a name="line.470"></a>
<span class="sourceLineNo">471</span>      } else {<a name="line.471"></a>
<span class="sourceLineNo">472</span>        // Put things back the way they were before.<a name="line.472"></a>
<span class="sourceLineNo">473</span>        // TODO: undo by remembering old values<a name="line.473"></a>
<span class="sourceLineNo">474</span>        Action undoAction = action.undoAction();<a name="line.474"></a>
<span class="sourceLineNo">475</span>        cluster.doAction(undoAction);<a name="line.475"></a>
<span class="sourceLineNo">476</span>        updateCostsWithAction(cluster, undoAction);<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>      if (EnvironmentEdgeManager.currentTime() - startTime &gt;<a name="line.479"></a>
<span class="sourceLineNo">480</span>          maxRunningTime) {<a name="line.480"></a>
<span class="sourceLineNo">481</span>        break;<a name="line.481"></a>
<span class="sourceLineNo">482</span>      }<a name="line.482"></a>
<span class="sourceLineNo">483</span>    }<a name="line.483"></a>
<span class="sourceLineNo">484</span>    long endTime = EnvironmentEdgeManager.currentTime();<a name="line.484"></a>
<span class="sourceLineNo">485</span><a name="line.485"></a>
<span class="sourceLineNo">486</span>    metricsBalancer.balanceCluster(endTime - startTime);<a name="line.486"></a>
<span class="sourceLineNo">487</span><a name="line.487"></a>
<span class="sourceLineNo">488</span>    // update costs metrics<a name="line.488"></a>
<span class="sourceLineNo">489</span>    updateStochasticCosts(tableName, curOverallCost, curFunctionCosts);<a name="line.489"></a>
<span class="sourceLineNo">490</span>    if (initCost &gt; currentCost) {<a name="line.490"></a>
<span class="sourceLineNo">491</span>      plans = createRegionPlans(cluster);<a name="line.491"></a>
<span class="sourceLineNo">492</span>      LOG.info("Finished computing new load balance plan. Computation took {}" +<a name="line.492"></a>
<span class="sourceLineNo">493</span>        " to try {} different iterations.  Found a solution that moves " +<a name="line.493"></a>
<span class="sourceLineNo">494</span>        "{} regions; Going from a computed cost of {}" +<a name="line.494"></a>
<span class="sourceLineNo">495</span>        " to a new cost of {}", java.time.Duration.ofMillis(endTime - startTime),<a name="line.495"></a>
<span class="sourceLineNo">496</span>        step, plans.size(), initCost, currentCost);<a name="line.496"></a>
<span class="sourceLineNo">497</span>      sendRegionPlansToRingBuffer(plans, currentCost, initCost, initFunctionTotalCosts, step);<a name="line.497"></a>
<span class="sourceLineNo">498</span>      return plans;<a name="line.498"></a>
<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
<span class="sourceLineNo">500</span>    LOG.info("Could not find a better load balance plan.  Tried {} different configurations in " +<a name="line.500"></a>
<span class="sourceLineNo">501</span>      "{}, and did not find anything with a computed cost less than {}", step,<a name="line.501"></a>
<span class="sourceLineNo">502</span>      java.time.Duration.ofMillis(endTime - startTime), initCost);<a name="line.502"></a>
<span class="sourceLineNo">503</span>    return null;<a name="line.503"></a>
<span class="sourceLineNo">504</span>  }<a name="line.504"></a>
<span class="sourceLineNo">505</span><a name="line.505"></a>
<span class="sourceLineNo">506</span>  private void sendRegionPlansToRingBuffer(List&lt;RegionPlan&gt; plans, double currentCost,<a name="line.506"></a>
<span class="sourceLineNo">507</span>      double initCost, String initFunctionTotalCosts, long step) {<a name="line.507"></a>
<span class="sourceLineNo">508</span>    if (this.namedQueueRecorder != null) {<a name="line.508"></a>
<span class="sourceLineNo">509</span>      List&lt;String&gt; regionPlans = new ArrayList&lt;&gt;();<a name="line.509"></a>
<span class="sourceLineNo">510</span>      for (RegionPlan plan : plans) {<a name="line.510"></a>
<span class="sourceLineNo">511</span>        regionPlans.add(<a name="line.511"></a>
<span class="sourceLineNo">512</span>          "table: " + plan.getRegionInfo().getTable() + " , region: " + plan.getRegionName()<a name="line.512"></a>
<span class="sourceLineNo">513</span>            + " , source: " + plan.getSource() + " , destination: " + plan.getDestination());<a name="line.513"></a>
<span class="sourceLineNo">514</span>      }<a name="line.514"></a>
<span class="sourceLineNo">515</span>      BalancerDecision balancerDecision =<a name="line.515"></a>
<span class="sourceLineNo">516</span>        new BalancerDecision.Builder()<a name="line.516"></a>
<span class="sourceLineNo">517</span>          .setInitTotalCost(initCost)<a name="line.517"></a>
<span class="sourceLineNo">518</span>          .setInitialFunctionCosts(initFunctionTotalCosts)<a name="line.518"></a>
<span class="sourceLineNo">519</span>          .setComputedTotalCost(currentCost)<a name="line.519"></a>
<span class="sourceLineNo">520</span>          .setFinalFunctionCosts(totalCostsPerFunc())<a name="line.520"></a>
<span class="sourceLineNo">521</span>          .setComputedSteps(step)<a name="line.521"></a>
<span class="sourceLineNo">522</span>          .setRegionPlans(regionPlans).build();<a name="line.522"></a>
<span class="sourceLineNo">523</span>      namedQueueRecorder.addRecord(new BalancerDecisionDetails(balancerDecision));<a name="line.523"></a>
<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
<span class="sourceLineNo">525</span>  }<a name="line.525"></a>
<span class="sourceLineNo">526</span><a name="line.526"></a>
<span class="sourceLineNo">527</span>  /**<a name="line.527"></a>
<span class="sourceLineNo">528</span>   * update costs to JMX<a name="line.528"></a>
<span class="sourceLineNo">529</span>   */<a name="line.529"></a>
<span class="sourceLineNo">530</span>  private void updateStochasticCosts(TableName tableName, Double overall, Double[] subCosts) {<a name="line.530"></a>
<span class="sourceLineNo">531</span>    if (tableName == null) return;<a name="line.531"></a>
<span class="sourceLineNo">532</span><a name="line.532"></a>
<span class="sourceLineNo">533</span>    // check if the metricsBalancer is MetricsStochasticBalancer before casting<a name="line.533"></a>
<span class="sourceLineNo">534</span>    if (metricsBalancer instanceof MetricsStochasticBalancer) {<a name="line.534"></a>
<span class="sourceLineNo">535</span>      MetricsStochasticBalancer balancer = (MetricsStochasticBalancer) metricsBalancer;<a name="line.535"></a>
<span class="sourceLineNo">536</span>      // overall cost<a name="line.536"></a>
<span class="sourceLineNo">537</span>      balancer.updateStochasticCost(tableName.getNameAsString(),<a name="line.537"></a>
<span class="sourceLineNo">538</span>        "Overall", "Overall cost", overall);<a name="line.538"></a>
<span class="sourceLineNo">539</span><a name="line.539"></a>
<span class="sourceLineNo">540</span>      // each cost function<a name="line.540"></a>
<span class="sourceLineNo">541</span>      for (int i = 0; i &lt; costFunctions.size(); i++) {<a name="line.541"></a>
<span class="sourceLineNo">542</span>        CostFunction costFunction = costFunctions.get(i);<a name="line.542"></a>
<span class="sourceLineNo">543</span>        String costFunctionName = costFunction.getClass().getSimpleName();<a name="line.543"></a>
<span class="sourceLineNo">544</span>        Double costPercent = (overall == 0) ? 0 : (subCosts[i] / overall);<a name="line.544"></a>
<span class="sourceLineNo">545</span>        // TODO: cost function may need a specific description<a name="line.545"></a>
<span class="sourceLineNo">546</span>        balancer.updateStochasticCost(tableName.getNameAsString(), costFunctionName,<a name="line.546"></a>
<span class="sourceLineNo">547</span>          "The percent of " + costFunctionName, costPercent);<a name="line.547"></a>
<span class="sourceLineNo">548</span>      }<a name="line.548"></a>
<span class="sourceLineNo">549</span>    }<a name="line.549"></a>
<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
<span class="sourceLineNo">551</span><a name="line.551"></a>
<span class="sourceLineNo">552</span>  private void addCostFunction(CostFunction costFunction) {<a name="line.552"></a>
<span class="sourceLineNo">553</span>    if (costFunction.getMultiplier() &gt; 0) {<a name="line.553"></a>
<span class="sourceLineNo">554</span>      costFunctions.add(costFunction);<a name="line.554"></a>
<span class="sourceLineNo">555</span>    }<a name="line.555"></a>
<span class="sourceLineNo">556</span>  }<a name="line.556"></a>
<span class="sourceLineNo">557</span><a name="line.557"></a>
<span class="sourceLineNo">558</span>  private String functionCost() {<a name="line.558"></a>
<span class="sourceLineNo">559</span>    StringBuilder builder = new StringBuilder();<a name="line.559"></a>
<span class="sourceLineNo">560</span>    for (CostFunction c:costFunctions) {<a name="line.560"></a>
<span class="sourceLineNo">561</span>      builder.append(c.getClass().getSimpleName());<a name="line.561"></a>
<span class="sourceLineNo">562</span>      builder.append(" : (");<a name="line.562"></a>
<span class="sourceLineNo">563</span>      builder.append(c.getMultiplier());<a name="line.563"></a>
<span class="sourceLineNo">564</span>      builder.append(", ");<a name="line.564"></a>
<span class="sourceLineNo">565</span>      builder.append(c.cost());<a name="line.565"></a>
<span class="sourceLineNo">566</span>      builder.append("); ");<a name="line.566"></a>
<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
<span class="sourceLineNo">568</span>    return builder.toString();<a name="line.568"></a>
<span class="sourceLineNo">569</span>  }<a name="line.569"></a>
<span class="sourceLineNo">570</span><a name="line.570"></a>
<span class="sourceLineNo">571</span>  private String totalCostsPerFunc() {<a name="line.571"></a>
<span class="sourceLineNo">572</span>    StringBuilder builder = new StringBuilder();<a name="line.572"></a>
<span class="sourceLineNo">573</span>    for (CostFunction c : costFunctions) {<a name="line.573"></a>
<span class="sourceLineNo">574</span>      if (c.getMultiplier() * c.cost() &gt; 0.0) {<a name="line.574"></a>
<span class="sourceLineNo">575</span>        builder.append(" ");<a name="line.575"></a>
<span class="sourceLineNo">576</span>        builder.append(c.getClass().getSimpleName());<a name="line.576"></a>
<span class="sourceLineNo">577</span>        builder.append(" : ");<a name="line.577"></a>
<span class="sourceLineNo">578</span>        builder.append(c.getMultiplier() * c.cost());<a name="line.578"></a>
<span class="sourceLineNo">579</span>        builder.append(";");<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>    if (builder.length() &gt; 0) {<a name="line.582"></a>
<span class="sourceLineNo">583</span>      builder.deleteCharAt(builder.length() - 1);<a name="line.583"></a>
<span class="sourceLineNo">584</span>    }<a name="line.584"></a>
<span class="sourceLineNo">585</span>    return builder.toString();<a name="line.585"></a>
<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
<span class="sourceLineNo">587</span><a name="line.587"></a>
<span class="sourceLineNo">588</span>  /**<a name="line.588"></a>
<span class="sourceLineNo">589</span>   * Create all of the RegionPlan's needed to move from the initial cluster state to the desired<a name="line.589"></a>
<span class="sourceLineNo">590</span>   * state.<a name="line.590"></a>
<span class="sourceLineNo">591</span>   *<a name="line.591"></a>
<span class="sourceLineNo">592</span>   * @param cluster The state of the cluster<a name="line.592"></a>
<span class="sourceLineNo">593</span>   * @return List of RegionPlan's that represent the moves needed to get to desired final state.<a name="line.593"></a>
<span class="sourceLineNo">594</span>   */<a name="line.594"></a>
<span class="sourceLineNo">595</span>  private List&lt;RegionPlan&gt; createRegionPlans(Cluster cluster) {<a name="line.595"></a>
<span class="sourceLineNo">596</span>    List&lt;RegionPlan&gt; plans = new LinkedList&lt;&gt;();<a name="line.596"></a>
<span class="sourceLineNo">597</span>    for (int regionIndex = 0;<a name="line.597"></a>
<span class="sourceLineNo">598</span>         regionIndex &lt; cluster.regionIndexToServerIndex.length; regionIndex++) {<a name="line.598"></a>
<span class="sourceLineNo">599</span>      int initialServerIndex = cluster.initialRegionIndexToServerIndex[regionIndex];<a name="line.599"></a>
<span class="sourceLineNo">600</span>      int newServerIndex = cluster.regionIndexToServerIndex[regionIndex];<a name="line.600"></a>
<span class="sourceLineNo">601</span><a name="line.601"></a>
<span class="sourceLineNo">602</span>      if (initialServerIndex != newServerIndex) {<a name="line.602"></a>
<span class="sourceLineNo">603</span>        RegionInfo region = cluster.regions[regionIndex];<a name="line.603"></a>
<span class="sourceLineNo">604</span>        ServerName initialServer = cluster.servers[initialServerIndex];<a name="line.604"></a>
<span class="sourceLineNo">605</span>        ServerName newServer = cluster.servers[newServerIndex];<a name="line.605"></a>
<span class="sourceLineNo">606</span><a name="line.606"></a>
<span class="sourceLineNo">607</span>        if (LOG.isTraceEnabled()) {<a name="line.607"></a>
<span class="sourceLineNo">608</span>          LOG.trace("Moving Region " + region.getEncodedName() + " from server "<a name="line.608"></a>
<span class="sourceLineNo">609</span>              + initialServer.getHostname() + " to " + newServer.getHostname());<a name="line.609"></a>
<span class="sourceLineNo">610</span>        }<a name="line.610"></a>
<span class="sourceLineNo">611</span>        RegionPlan rp = new RegionPlan(region, initialServer, newServer);<a name="line.611"></a>
<span class="sourceLineNo">612</span>        plans.add(rp);<a name="line.612"></a>
<span class="sourceLineNo">613</span>      }<a name="line.613"></a>
<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
<span class="sourceLineNo">615</span>    return plans;<a name="line.615"></a>
<span class="sourceLineNo">616</span>  }<a name="line.616"></a>
<span class="sourceLineNo">617</span><a name="line.617"></a>
<span class="sourceLineNo">618</span>  /**<a name="line.618"></a>
<span class="sourceLineNo">619</span>   * Store the current region loads.<a name="line.619"></a>
<span class="sourceLineNo">620</span>   */<a name="line.620"></a>
<span class="sourceLineNo">621</span>  private synchronized void updateRegionLoad() {<a name="line.621"></a>
<span class="sourceLineNo">622</span>    // We create a new hashmap so that regions that are no longer there are removed.<a name="line.622"></a>
<span class="sourceLineNo">623</span>    // However we temporarily need the old loads so we can use them to keep the rolling average.<a name="line.623"></a>
<span class="sourceLineNo">624</span>    Map&lt;String, Deque&lt;BalancerRegionLoad&gt;&gt; oldLoads = loads;<a name="line.624"></a>
<span class="sourceLineNo">625</span>    loads = new HashMap&lt;&gt;();<a name="line.625"></a>
<span class="sourceLineNo">626</span><a name="line.626"></a>
<span class="sourceLineNo">627</span>    clusterStatus.getLiveServerMetrics().forEach((ServerName sn, ServerMetrics sm) -&gt; {<a name="line.627"></a>
<span class="sourceLineNo">628</span>      sm.getRegionMetrics().forEach((byte[] regionName, RegionMetrics rm) -&gt; {<a name="line.628"></a>
<span class="sourceLineNo">629</span>        String regionNameAsString = RegionInfo.getRegionNameAsString(regionName);<a name="line.629"></a>
<span class="sourceLineNo">630</span>        Deque&lt;BalancerRegionLoad&gt; rLoads = oldLoads.get(regionNameAsString);<a name="line.630"></a>
<span class="sourceLineNo">631</span>        if (rLoads == null) {<a name="line.631"></a>
<span class="sourceLineNo">632</span>          rLoads = new ArrayDeque&lt;&gt;(numRegionLoadsToRemember + 1);<a name="line.632"></a>
<span class="sourceLineNo">633</span>        } else if (rLoads.size() &gt;= numRegionLoadsToRemember) {<a name="line.633"></a>
<span class="sourceLineNo">634</span>          rLoads.remove();<a name="line.634"></a>
<span class="sourceLineNo">635</span>        }<a name="line.635"></a>
<span class="sourceLineNo">636</span>        rLoads.add(new BalancerRegionLoad(rm));<a name="line.636"></a>
<span class="sourceLineNo">637</span>        loads.put(regionNameAsString, rLoads);<a name="line.637"></a>
<span class="sourceLineNo">638</span>      });<a name="line.638"></a>
<span class="sourceLineNo">639</span>    });<a name="line.639"></a>
<span class="sourceLineNo">640</span><a name="line.640"></a>
<span class="sourceLineNo">641</span>    for(CostFromRegionLoadFunction cost : regionLoadFunctions) {<a name="line.641"></a>
<span class="sourceLineNo">642</span>      cost.setLoads(loads);<a name="line.642"></a>
<span class="sourceLineNo">643</span>    }<a name="line.643"></a>
<span class="sourceLineNo">644</span>  }<a name="line.644"></a>
<span class="sourceLineNo">645</span><a name="line.645"></a>
<span class="sourceLineNo">646</span>  protected void initCosts(Cluster cluster) {<a name="line.646"></a>
<span class="sourceLineNo">647</span>    for (CostFunction c:costFunctions) {<a name="line.647"></a>
<span class="sourceLineNo">648</span>      c.init(cluster);<a name="line.648"></a>
<span class="sourceLineNo">649</span>    }<a name="line.649"></a>
<span class="sourceLineNo">650</span>  }<a name="line.650"></a>
<span class="sourceLineNo">651</span><a name="line.651"></a>
<span class="sourceLineNo">652</span>  protected void updateCostsWithAction(Cluster cluster, Action action) {<a name="line.652"></a>
<span class="sourceLineNo">653</span>    for (CostFunction c : costFunctions) {<a name="line.653"></a>
<span class="sourceLineNo">654</span>      c.postAction(action);<a name="line.654"></a>
<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
<span class="sourceLineNo">657</span><a name="line.657"></a>
<span class="sourceLineNo">658</span>  /**<a name="line.658"></a>
<span class="sourceLineNo">659</span>   * Get the names of the cost functions<a name="line.659"></a>
<span class="sourceLineNo">660</span>   */<a name="line.660"></a>
<span class="sourceLineNo">661</span>  public String[] getCostFunctionNames() {<a name="line.661"></a>
<span class="sourceLineNo">662</span>    if (costFunctions == null) return null;<a name="line.662"></a>
<span class="sourceLineNo">663</span>    String[] ret = new String[costFunctions.size()];<a name="line.663"></a>
<span class="sourceLineNo">664</span>    for (int i = 0; i &lt; costFunctions.size(); i++) {<a name="line.664"></a>
<span class="sourceLineNo">665</span>      CostFunction c = costFunctions.get(i);<a name="line.665"></a>
<span class="sourceLineNo">666</span>      ret[i] = c.getClass().getSimpleName();<a name="line.666"></a>
<span class="sourceLineNo">667</span>    }<a name="line.667"></a>
<span class="sourceLineNo">668</span><a name="line.668"></a>
<span class="sourceLineNo">669</span>    return ret;<a name="line.669"></a>
<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
<span class="sourceLineNo">671</span><a name="line.671"></a>
<span class="sourceLineNo">672</span>  /**<a name="line.672"></a>
<span class="sourceLineNo">673</span>   * This is the main cost function.  It will compute a cost associated with a proposed cluster<a name="line.673"></a>
<span class="sourceLineNo">674</span>   * state.  All different costs will be combined with their multipliers to produce a double cost.<a name="line.674"></a>
<span class="sourceLineNo">675</span>   *<a name="line.675"></a>
<span class="sourceLineNo">676</span>   * @param cluster The state of the cluster<a name="line.676"></a>
<span class="sourceLineNo">677</span>   * @param previousCost the previous cost. This is used as an early out.<a name="line.677"></a>
<span class="sourceLineNo">678</span>   * @return a double of a cost associated with the proposed cluster state.  This cost is an<a name="line.678"></a>
<span class="sourceLineNo">679</span>   *         aggregate of all individual cost functions.<a name="line.679"></a>
<span class="sourceLineNo">680</span>   */<a name="line.680"></a>
<span class="sourceLineNo">681</span>  protected double computeCost(Cluster cluster, double previousCost) {<a name="line.681"></a>
<span class="sourceLineNo">682</span>    double total = 0;<a name="line.682"></a>
<span class="sourceLineNo">683</span><a name="line.683"></a>
<span class="sourceLineNo">684</span>    for (int i = 0; i &lt; costFunctions.size(); i++) {<a name="line.684"></a>
<span class="sourceLineNo">685</span>      CostFunction c = costFunctions.get(i);<a name="line.685"></a>
<span class="sourceLineNo">686</span>      this.tempFunctionCosts[i] = 0.0;<a name="line.686"></a>
<span class="sourceLineNo">687</span><a name="line.687"></a>
<span class="sourceLineNo">688</span>      if (c.getMultiplier() &lt;= 0) {<a name="line.688"></a>
<span class="sourceLineNo">689</span>        continue;<a name="line.689"></a>
<span class="sourceLineNo">690</span>      }<a name="line.690"></a>
<span class="sourceLineNo">691</span><a name="line.691"></a>
<span class="sourceLineNo">692</span>      Float multiplier = c.getMultiplier();<a name="line.692"></a>
<span class="sourceLineNo">693</span>      Double cost = c.cost();<a name="line.693"></a>
<span class="sourceLineNo">694</span><a name="line.694"></a>
<span class="sourceLineNo">695</span>      this.tempFunctionCosts[i] = multiplier*cost;<a name="line.695"></a>
<span class="sourceLineNo">696</span>      total += this.tempFunctionCosts[i];<a name="line.696"></a>
<span class="sourceLineNo">697</span><a name="line.697"></a>
<span class="sourceLineNo">698</span>      if (total &gt; previousCost) {<a name="line.698"></a>
<span class="sourceLineNo">699</span>        break;<a name="line.699"></a>
<span class="sourceLineNo">700</span>      }<a name="line.700"></a>
<span class="sourceLineNo">701</span>    }<a name="line.701"></a>
<span class="sourceLineNo">702</span><a name="line.702"></a>
<span class="sourceLineNo">703</span>    return total;<a name="line.703"></a>
<span class="sourceLineNo">704</span>  }<a name="line.704"></a>
<span class="sourceLineNo">705</span><a name="line.705"></a>
<span class="sourceLineNo">706</span>  static class RandomCandidateGenerator extends CandidateGenerator {<a name="line.706"></a>
<span class="sourceLineNo">707</span><a name="line.707"></a>
<span class="sourceLineNo">708</span>    @Override<a name="line.708"></a>
<span class="sourceLineNo">709</span>    Cluster.Action generate(Cluster cluster) {<a name="line.709"></a>
<span class="sourceLineNo">710</span><a name="line.710"></a>
<span class="sourceLineNo">711</span>      int thisServer = pickRandomServer(cluster);<a name="line.711"></a>
<span class="sourceLineNo">712</span><a name="line.712"></a>
<span class="sourceLineNo">713</span>      // Pick the other server<a name="line.713"></a>
<span class="sourceLineNo">714</span>      int otherServer = pickOtherRandomServer(cluster, thisServer);<a name="line.714"></a>
<span class="sourceLineNo">715</span><a name="line.715"></a>
<span class="sourceLineNo">716</span>      return pickRandomRegions(cluster, thisServer, otherServer);<a name="line.716"></a>
<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
<span class="sourceLineNo">719</span><a name="line.719"></a>
<span class="sourceLineNo">720</span>  /**<a name="line.720"></a>
<span class="sourceLineNo">721</span>   * Generates candidates which moves the replicas out of the rack for<a name="line.721"></a>
<span class="sourceLineNo">722</span>   * co-hosted region replicas in the same rack<a name="line.722"></a>
<span class="sourceLineNo">723</span>   */<a name="line.723"></a>
<span class="sourceLineNo">724</span>  static class RegionReplicaRackCandidateGenerator extends RegionReplicaCandidateGenerator {<a name="line.724"></a>
<span class="sourceLineNo">725</span>    @Override<a name="line.725"></a>
<span class="sourceLineNo">726</span>    Cluster.Action generate(Cluster cluster) {<a name="line.726"></a>
<span class="sourceLineNo">727</span>      int rackIndex = pickRandomRack(cluster);<a name="line.727"></a>
<span class="sourceLineNo">728</span>      if (cluster.numRacks &lt;= 1 || rackIndex == -1) {<a name="line.728"></a>
<span class="sourceLineNo">729</span>        return super.generate(cluster);<a name="line.729"></a>
<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
<span class="sourceLineNo">731</span><a name="line.731"></a>
<span class="sourceLineNo">732</span>      int regionIndex = selectCoHostedRegionPerGroup(<a name="line.732"></a>
<span class="sourceLineNo">733</span>        cluster.primariesOfRegionsPerRack[rackIndex],<a name="line.733"></a>
<span class="sourceLineNo">734</span>        cluster.regionsPerRack[rackIndex],<a name="line.734"></a>
<span class="sourceLineNo">735</span>        cluster.regionIndexToPrimaryIndex);<a name="line.735"></a>
<span class="sourceLineNo">736</span><a name="line.736"></a>
<span class="sourceLineNo">737</span>      // if there are no pairs of region replicas co-hosted, default to random generator<a name="line.737"></a>
<span class="sourceLineNo">738</span>      if (regionIndex == -1) {<a name="line.738"></a>
<span class="sourceLineNo">739</span>        // default to randompicker<a name="line.739"></a>
<span class="sourceLineNo">740</span>        return randomGenerator.generate(cluster);<a name="line.740"></a>
<span class="sourceLineNo">741</span>      }<a name="line.741"></a>
<span class="sourceLineNo">742</span><a name="line.742"></a>
<span class="sourceLineNo">743</span>      int serverIndex = cluster.regionIndexToServerIndex[regionIndex];<a name="line.743"></a>
<span class="sourceLineNo">744</span>      int toRackIndex = pickOtherRandomRack(cluster, rackIndex);<a name="line.744"></a>
<span class="sourceLineNo">745</span><a name="line.745"></a>
<span class="sourceLineNo">746</span>      int rand = RANDOM.nextInt(cluster.serversPerRack[toRackIndex].length);<a name="line.746"></a>
<span class="sourceLineNo">747</span>      int toServerIndex = cluster.serversPerRack[toRackIndex][rand];<a name="line.747"></a>
<span class="sourceLineNo">748</span>      int toRegionIndex = pickRandomRegion(cluster, toServerIndex, 0.9f);<a name="line.748"></a>
<span class="sourceLineNo">749</span>      return getAction(serverIndex, regionIndex, toServerIndex, toRegionIndex);<a name="line.749"></a>
<span class="sourceLineNo">750</span>    }<a name="line.750"></a>
<span class="sourceLineNo">751</span>  }<a name="line.751"></a>
<span class="sourceLineNo">752</span><a name="line.752"></a>
<span class="sourceLineNo">753</span>  /**<a name="line.753"></a>
<span class="sourceLineNo">754</span>   * Base class of StochasticLoadBalancer's Cost Functions.<a name="line.754"></a>
<span class="sourceLineNo">755</span>   */<a name="line.755"></a>
<span class="sourceLineNo">756</span>  public abstract static class CostFunction {<a name="line.756"></a>
<span class="sourceLineNo">757</span><a name="line.757"></a>
<span class="sourceLineNo">758</span>    private float multiplier = 0;<a name="line.758"></a>
<span class="sourceLineNo">759</span><a name="line.759"></a>
<span class="sourceLineNo">760</span>    protected Cluster cluster;<a name="line.760"></a>
<span class="sourceLineNo">761</span><a name="line.761"></a>
<span class="sourceLineNo">762</span>    public CostFunction(Configuration c) {<a name="line.762"></a>
<span class="sourceLineNo">763</span>    }<a name="line.763"></a>
<span class="sourceLineNo">764</span><a name="line.764"></a>
<span class="sourceLineNo">765</span>    boolean isNeeded() {<a name="line.765"></a>
<span class="sourceLineNo">766</span>      return true;<a name="line.766"></a>
<span class="sourceLineNo">767</span>    }<a name="line.767"></a>
<span class="sourceLineNo">768</span>    float getMultiplier() {<a name="line.768"></a>
<span class="sourceLineNo">769</span>      return multiplier;<a name="line.769"></a>
<span class="sourceLineNo">770</span>    }<a name="line.770"></a>
<span class="sourceLineNo">771</span><a name="line.771"></a>
<span class="sourceLineNo">772</span>    void setMultiplier(float m) {<a name="line.772"></a>
<span class="sourceLineNo">773</span>      this.multiplier = m;<a name="line.773"></a>
<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
<span class="sourceLineNo">775</span><a name="line.775"></a>
<span class="sourceLineNo">776</span>    /** Called once per LB invocation to give the cost function<a name="line.776"></a>
<span class="sourceLineNo">777</span>     * to initialize it's state, and perform any costly calculation.<a name="line.777"></a>
<span class="sourceLineNo">778</span>     */<a name="line.778"></a>
<span class="sourceLineNo">779</span>    void init(Cluster cluster) {<a name="line.779"></a>
<span class="sourceLineNo">780</span>      this.cluster = cluster;<a name="line.780"></a>
<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
<span class="sourceLineNo">782</span><a name="line.782"></a>
<span class="sourceLineNo">783</span>    /** Called once per cluster Action to give the cost function<a name="line.783"></a>
<span class="sourceLineNo">784</span>     * an opportunity to update it's state. postAction() is always<a name="line.784"></a>
<span class="sourceLineNo">785</span>     * called at least once before cost() is called with the cluster<a name="line.785"></a>
<span class="sourceLineNo">786</span>     * that this action is performed on. */<a name="line.786"></a>
<span class="sourceLineNo">787</span>    void postAction(Action action) {<a name="line.787"></a>
<span class="sourceLineNo">788</span>      switch (action.type) {<a name="line.788"></a>
<span class="sourceLineNo">789</span>      case NULL: break;<a name="line.789"></a>
<span class="sourceLineNo">790</span>      case ASSIGN_REGION:<a name="line.790"></a>
<span class="sourceLineNo">791</span>        AssignRegionAction ar = (AssignRegionAction) action;<a name="line.791"></a>
<span class="sourceLineNo">792</span>        regionMoved(ar.region, -1, ar.server);<a name="line.792"></a>
<span class="sourceLineNo">793</span>        break;<a name="line.793"></a>
<span class="sourceLineNo">794</span>      case MOVE_REGION:<a name="line.794"></a>
<span class="sourceLineNo">795</span>        MoveRegionAction mra = (MoveRegionAction) action;<a name="line.795"></a>
<span class="sourceLineNo">796</span>        regionMoved(mra.region, mra.fromServer, mra.toServer);<a name="line.796"></a>
<span class="sourceLineNo">797</span>        break;<a name="line.797"></a>
<span class="sourceLineNo">798</span>      case SWAP_REGIONS:<a name="line.798"></a>
<span class="sourceLineNo">799</span>        SwapRegionsAction a = (SwapRegionsAction) action;<a name="line.799"></a>
<span class="sourceLineNo">800</span>        regionMoved(a.fromRegion, a.fromServer, a.toServer);<a name="line.800"></a>
<span class="sourceLineNo">801</span>        regionMoved(a.toRegion, a.toServer, a.fromServer);<a name="line.801"></a>
<span class="sourceLineNo">802</span>        break;<a name="line.802"></a>
<span class="sourceLineNo">803</span>      default:<a name="line.803"></a>
<span class="sourceLineNo">804</span>        throw new RuntimeException("Uknown action:" + action.type);<a name="line.804"></a>
<span class="sourceLineNo">805</span>      }<a name="line.805"></a>
<span class="sourceLineNo">806</span>    }<a name="line.806"></a>
<span class="sourceLineNo">807</span><a name="line.807"></a>
<span class="sourceLineNo">808</span>    protected void regionMoved(int region, int oldServer, int newServer) {<a name="line.808"></a>
<span class="sourceLineNo">809</span>    }<a name="line.809"></a>
<span class="sourceLineNo">810</span><a name="line.810"></a>
<span class="sourceLineNo">811</span>    protected abstract double cost();<a name="line.811"></a>
<span class="sourceLineNo">812</span><a name="line.812"></a>
<span class="sourceLineNo">813</span>    @SuppressWarnings("checkstyle:linelength")<a name="line.813"></a>
<span class="sourceLineNo">814</span>    /**<a name="line.814"></a>
<span class="sourceLineNo">815</span>     * Function to compute a scaled cost using<a name="line.815"></a>
<span class="sourceLineNo">816</span>     * {@link org.apache.commons.math3.stat.descriptive.DescriptiveStatistics#DescriptiveStatistics()}.<a name="line.816"></a>
<span class="sourceLineNo">817</span>     * It assumes that this is a zero sum set of costs.  It assumes that the worst case<a name="line.817"></a>
<span class="sourceLineNo">818</span>     * possible is all of the elements in one region server and the rest having 0.<a name="line.818"></a>
<span class="sourceLineNo">819</span>     *<a name="line.819"></a>
<span class="sourceLineNo">820</span>     * @param stats the costs<a name="line.820"></a>
<span class="sourceLineNo">821</span>     * @return a scaled set of costs.<a name="line.821"></a>
<span class="sourceLineNo">822</span>     */<a name="line.822"></a>
<span class="sourceLineNo">823</span>    protected double costFromArray(double[] stats) {<a name="line.823"></a>
<span class="sourceLineNo">824</span>      double totalCost = 0;<a name="line.824"></a>
<span class="sourceLineNo">825</span>      double total = getSum(stats);<a name="line.825"></a>
<span class="sourceLineNo">826</span><a name="line.826"></a>
<span class="sourceLineNo">827</span>      double count = stats.length;<a name="line.827"></a>
<span class="sourceLineNo">828</span>      double mean = total/count;<a name="line.828"></a>
<span class="sourceLineNo">829</span><a name="line.829"></a>
<span class="sourceLineNo">830</span>      // Compute max as if all region servers had 0 and one had the sum of all costs.  This must be<a name="line.830"></a>
<span class="sourceLineNo">831</span>      // a zero sum cost for this to make sense.<a name="line.831"></a>
<span class="sourceLineNo">832</span>      double max = ((count - 1) * mean) + (total - mean);<a name="line.832"></a>
<span class="sourceLineNo">833</span><a name="line.833"></a>
<span class="sourceLineNo">834</span>      // It's possible that there aren't enough regions to go around<a name="line.834"></a>
<span class="sourceLineNo">835</span>      double min;<a name="line.835"></a>
<span class="sourceLineNo">836</span>      if (count &gt; total) {<a name="line.836"></a>
<span class="sourceLineNo">837</span>        min = ((count - total) * mean) + ((1 - mean) * total);<a name="line.837"></a>
<span class="sourceLineNo">838</span>      } else {<a name="line.838"></a>
<span class="sourceLineNo">839</span>        // Some will have 1 more than everything else.<a name="line.839"></a>
<span class="sourceLineNo">840</span>        int numHigh = (int) (total - (Math.floor(mean) * count));<a name="line.840"></a>
<span class="sourceLineNo">841</span>        int numLow = (int) (count - numHigh);<a name="line.841"></a>
<span class="sourceLineNo">842</span><a name="line.842"></a>
<span class="sourceLineNo">843</span>        min = (numHigh * (Math.ceil(mean) - mean)) + (numLow * (mean - Math.floor(mean)));<a name="line.843"></a>
<span class="sourceLineNo">844</span><a name="line.844"></a>
<span class="sourceLineNo">845</span>      }<a name="line.845"></a>
<span class="sourceLineNo">846</span>      min = Math.max(0, min);<a name="line.846"></a>
<span class="sourceLineNo">847</span>      for (int i=0; i&lt;stats.length; i++) {<a name="line.847"></a>
<span class="sourceLineNo">848</span>        double n = stats[i];<a name="line.848"></a>
<span class="sourceLineNo">849</span>        double diff = Math.abs(mean - n);<a name="line.849"></a>
<span class="sourceLineNo">850</span>        totalCost += diff;<a name="line.850"></a>
<span class="sourceLineNo">851</span>      }<a name="line.851"></a>
<span class="sourceLineNo">852</span><a name="line.852"></a>
<span class="sourceLineNo">853</span>      double scaled =  scale(min, max, totalCost);<a name="line.853"></a>
<span class="sourceLineNo">854</span>      return scaled;<a name="line.854"></a>
<span class="sourceLineNo">855</span>    }<a name="line.855"></a>
<span class="sourceLineNo">856</span><a name="line.856"></a>
<span class="sourceLineNo">857</span>    private double getSum(double[] stats) {<a name="line.857"></a>
<span class="sourceLineNo">858</span>      double total = 0;<a name="line.858"></a>
<span class="sourceLineNo">859</span>      for(double s:stats) {<a name="line.859"></a>
<span class="sourceLineNo">860</span>        total += s;<a name="line.860"></a>
<span class="sourceLineNo">861</span>      }<a name="line.861"></a>
<span class="sourceLineNo">862</span>      return total;<a name="line.862"></a>
<span class="sourceLineNo">863</span>    }<a name="line.863"></a>
<span class="sourceLineNo">864</span><a name="line.864"></a>
<span class="sourceLineNo">865</span>    /**<a name="line.865"></a>
<span class="sourceLineNo">866</span>     * Scale the value between 0 and 1.<a name="line.866"></a>
<span class="sourceLineNo">867</span>     *<a name="line.867"></a>
<span class="sourceLineNo">868</span>     * @param min   Min value<a name="line.868"></a>
<span class="sourceLineNo">869</span>     * @param max   The Max value<a name="line.869"></a>
<span class="sourceLineNo">870</span>     * @param value The value to be scaled.<a name="line.870"></a>
<span class="sourceLineNo">871</span>     * @return The scaled value.<a name="line.871"></a>
<span class="sourceLineNo">872</span>     */<a name="line.872"></a>
<span class="sourceLineNo">873</span>    protected double scale(double min, double max, double value) {<a name="line.873"></a>
<span class="sourceLineNo">874</span>      if (max &lt;= min || value &lt;= min) {<a name="line.874"></a>
<span class="sourceLineNo">875</span>        return 0;<a name="line.875"></a>
<span class="sourceLineNo">876</span>      }<a name="line.876"></a>
<span class="sourceLineNo">877</span>      if ((max - min) == 0) return 0;<a name="line.877"></a>
<span class="sourceLineNo">878</span><a name="line.878"></a>
<span class="sourceLineNo">879</span>      return Math.max(0d, Math.min(1d, (value - min) / (max - min)));<a name="line.879"></a>
<span class="sourceLineNo">880</span>    }<a name="line.880"></a>
<span class="sourceLineNo">881</span>  }<a name="line.881"></a>
<span class="sourceLineNo">882</span><a name="line.882"></a>
<span class="sourceLineNo">883</span>  /**<a name="line.883"></a>
<span class="sourceLineNo">884</span>   * Given the starting state of the regions and a potential ending state<a name="line.884"></a>
<span class="sourceLineNo">885</span>   * compute cost based upon the number of regions that have moved.<a name="line.885"></a>
<span class="sourceLineNo">886</span>   */<a name="line.886"></a>
<span class="sourceLineNo">887</span>  static class MoveCostFunction extends CostFunction {<a name="line.887"></a>
<span class="sourceLineNo">888</span>    private static final String MOVE_COST_KEY = "hbase.master.balancer.stochastic.moveCost";<a name="line.888"></a>
<span class="sourceLineNo">889</span>    private static final String MOVE_COST_OFFPEAK_KEY =<a name="line.889"></a>
<span class="sourceLineNo">890</span>      "hbase.master.balancer.stochastic.moveCost.offpeak";<a name="line.890"></a>
<span class="sourceLineNo">891</span>    private static final String MAX_MOVES_PERCENT_KEY =<a name="line.891"></a>
<span class="sourceLineNo">892</span>        "hbase.master.balancer.stochastic.maxMovePercent";<a name="line.892"></a>
<span class="sourceLineNo">893</span>    static final float DEFAULT_MOVE_COST = 7;<a name="line.893"></a>
<span class="sourceLineNo">894</span>    static final float DEFAULT_MOVE_COST_OFFPEAK = 3;<a name="line.894"></a>
<span class="sourceLineNo">895</span>    private static final int DEFAULT_MAX_MOVES = 600;<a name="line.895"></a>
<span class="sourceLineNo">896</span>    private static final float DEFAULT_MAX_MOVE_PERCENT = 0.25f;<a name="line.896"></a>
<span class="sourceLineNo">897</span><a name="line.897"></a>
<span class="sourceLineNo">898</span>    private final float maxMovesPercent;<a name="line.898"></a>
<span class="sourceLineNo">899</span>    private final Configuration conf;<a name="line.899"></a>
<span class="sourceLineNo">900</span><a name="line.900"></a>
<span class="sourceLineNo">901</span>    MoveCostFunction(Configuration conf) {<a name="line.901"></a>
<span class="sourceLineNo">902</span>      super(conf);<a name="line.902"></a>
<span class="sourceLineNo">903</span>      this.conf = conf;<a name="line.903"></a>
<span class="sourceLineNo">904</span>      // What percent of the number of regions a single run of the balancer can move.<a name="line.904"></a>
<span class="sourceLineNo">905</span>      maxMovesPercent = conf.getFloat(MAX_MOVES_PERCENT_KEY, DEFAULT_MAX_MOVE_PERCENT);<a name="line.905"></a>
<span class="sourceLineNo">906</span><a name="line.906"></a>
<span class="sourceLineNo">907</span>      // Initialize the multiplier so that addCostFunction will add this cost function.<a name="line.907"></a>
<span class="sourceLineNo">908</span>      // It may change during later evaluations, due to OffPeakHours.<a name="line.908"></a>
<span class="sourceLineNo">909</span>      this.setMultiplier(conf.getFloat(MOVE_COST_KEY, DEFAULT_MOVE_COST));<a name="line.909"></a>
<span class="sourceLineNo">910</span>    }<a name="line.910"></a>
<span class="sourceLineNo">911</span><a name="line.911"></a>
<span class="sourceLineNo">912</span>    @Override<a name="line.912"></a>
<span class="sourceLineNo">913</span>    protected double cost() {<a name="line.913"></a>
<span class="sourceLineNo">914</span>      // Move cost multiplier should be the same cost or higher than the rest of the costs to ensure<a name="line.914"></a>
<span class="sourceLineNo">915</span>      // that large benefits are need to overcome the cost of a move.<a name="line.915"></a>
<span class="sourceLineNo">916</span>      if (OffPeakHours.getInstance(conf).isOffPeakHour()) {<a name="line.916"></a>
<span class="sourceLineNo">917</span>        this.setMultiplier(conf.getFloat(MOVE_COST_OFFPEAK_KEY, DEFAULT_MOVE_COST_OFFPEAK));<a name="line.917"></a>
<span class="sourceLineNo">918</span>      } else {<a name="line.918"></a>
<span class="sourceLineNo">919</span>        this.setMultiplier(conf.getFloat(MOVE_COST_KEY, DEFAULT_MOVE_COST));<a name="line.919"></a>
<span class="sourceLineNo">920</span>      }<a name="line.920"></a>
<span class="sourceLineNo">921</span>      // Try and size the max number of Moves, but always be prepared to move some.<a name="line.921"></a>
<span class="sourceLineNo">922</span>      int maxMoves = Math.max((int) (cluster.numRegions * maxMovesPercent),<a name="line.922"></a>
<span class="sourceLineNo">923</span>          DEFAULT_MAX_MOVES);<a name="line.923"></a>
<span class="sourceLineNo">924</span><a name="line.924"></a>
<span class="sourceLineNo">925</span>      double moveCost = cluster.numMovedRegions;<a name="line.925"></a>
<span class="sourceLineNo">926</span><a name="line.926"></a>
<span class="sourceLineNo">927</span>      // Don't let this single balance move more than the max moves.<a name="line.927"></a>
<span class="sourceLineNo">928</span>      // This allows better scaling to accurately represent the actual cost of a move.<a name="line.928"></a>
<span class="sourceLineNo">929</span>      if (moveCost &gt; maxMoves) {<a name="line.929"></a>
<span class="sourceLineNo">930</span>        return 1000000;   // return a number much greater than any of the other cost<a name="line.930"></a>
<span class="sourceLineNo">931</span>      }<a name="line.931"></a>
<span class="sourceLineNo">932</span><a name="line.932"></a>
<span class="sourceLineNo">933</span>      return scale(0, Math.min(cluster.numRegions, maxMoves), moveCost);<a name="line.933"></a>
<span class="sourceLineNo">934</span>    }<a name="line.934"></a>
<span class="sourceLineNo">935</span>  }<a name="line.935"></a>
<span class="sourceLineNo">936</span><a name="line.936"></a>
<span class="sourceLineNo">937</span>  /**<a name="line.937"></a>
<span class="sourceLineNo">938</span>   * Compute the cost of a potential cluster state from skew in number of<a name="line.938"></a>
<span class="sourceLineNo">939</span>   * regions on a cluster.<a name="line.939"></a>
<span class="sourceLineNo">940</span>   */<a name="line.940"></a>
<span class="sourceLineNo">941</span>  static class RegionCountSkewCostFunction extends CostFunction {<a name="line.941"></a>
<span class="sourceLineNo">942</span>    static final String REGION_COUNT_SKEW_COST_KEY =<a name="line.942"></a>
<span class="sourceLineNo">943</span>        "hbase.master.balancer.stochastic.regionCountCost";<a name="line.943"></a>
<span class="sourceLineNo">944</span>    static final float DEFAULT_REGION_COUNT_SKEW_COST = 500;<a name="line.944"></a>
<span class="sourceLineNo">945</span><a name="line.945"></a>
<span class="sourceLineNo">946</span>    private double[] stats = null;<a name="line.946"></a>
<span class="sourceLineNo">947</span><a name="line.947"></a>
<span class="sourceLineNo">948</span>    RegionCountSkewCostFunction(Configuration conf) {<a name="line.948"></a>
<span class="sourceLineNo">949</span>      super(conf);<a name="line.949"></a>
<span class="sourceLineNo">950</span>      // Load multiplier should be the greatest as it is the most general way to balance data.<a name="line.950"></a>
<span class="sourceLineNo">951</span>      this.setMultiplier(conf.getFloat(REGION_COUNT_SKEW_COST_KEY, DEFAULT_REGION_COUNT_SKEW_COST));<a name="line.951"></a>
<span class="sourceLineNo">952</span>    }<a name="line.952"></a>
<span class="sourceLineNo">953</span><a name="line.953"></a>
<span class="sourceLineNo">954</span>    @Override<a name="line.954"></a>
<span class="sourceLineNo">955</span>    void init(Cluster cluster) {<a name="line.955"></a>
<span class="sourceLineNo">956</span>      super.init(cluster);<a name="line.956"></a>
<span class="sourceLineNo">957</span>      LOG.debug("{} sees a total of {} servers and {} regions.", getClass().getSimpleName(),<a name="line.957"></a>
<span class="sourceLineNo">958</span>          cluster.numServers, cluster.numRegions);<a name="line.958"></a>
<span class="sourceLineNo">959</span>      if (LOG.isTraceEnabled()) {<a name="line.959"></a>
<span class="sourceLineNo">960</span>        for (int i =0; i &lt; cluster.numServers; i++) {<a name="line.960"></a>
<span class="sourceLineNo">961</span>          LOG.trace("{} sees server '{}' has {} regions", getClass().getSimpleName(),<a name="line.961"></a>
<span class="sourceLineNo">962</span>              cluster.servers[i], cluster.regionsPerServer[i].length);<a name="line.962"></a>
<span class="sourceLineNo">963</span>        }<a name="line.963"></a>
<span class="sourceLineNo">964</span>      }<a name="line.964"></a>
<span class="sourceLineNo">965</span>    }<a name="line.965"></a>
<span class="sourceLineNo">966</span><a name="line.966"></a>
<span class="sourceLineNo">967</span>    @Override<a name="line.967"></a>
<span class="sourceLineNo">968</span>    protected double cost() {<a name="line.968"></a>
<span class="sourceLineNo">969</span>      if (stats == null || stats.length != cluster.numServers) {<a name="line.969"></a>
<span class="sourceLineNo">970</span>        stats = new double[cluster.numServers];<a name="line.970"></a>
<span class="sourceLineNo">971</span>      }<a name="line.971"></a>
<span class="sourceLineNo">972</span>      for (int i =0; i &lt; cluster.numServers; i++) {<a name="line.972"></a>
<span class="sourceLineNo">973</span>        stats[i] = cluster.regionsPerServer[i].length;<a name="line.973"></a>
<span class="sourceLineNo">974</span>      }<a name="line.974"></a>
<span class="sourceLineNo">975</span>      return costFromArray(stats);<a name="line.975"></a>
<span class="sourceLineNo">976</span>    }<a name="line.976"></a>
<span class="sourceLineNo">977</span>  }<a name="line.977"></a>
<span class="sourceLineNo">978</span><a name="line.978"></a>
<span class="sourceLineNo">979</span>  /**<a name="line.979"></a>
<span class="sourceLineNo">980</span>   * Compute the cost of a potential cluster state from skew in number of<a name="line.980"></a>
<span class="sourceLineNo">981</span>   * primary regions on a cluster.<a name="line.981"></a>
<span class="sourceLineNo">982</span>   */<a name="line.982"></a>
<span class="sourceLineNo">983</span>  static class PrimaryRegionCountSkewCostFunction extends CostFunction {<a name="line.983"></a>
<span class="sourceLineNo">984</span>    private static final String PRIMARY_REGION_COUNT_SKEW_COST_KEY =<a name="line.984"></a>
<span class="sourceLineNo">985</span>        "hbase.master.balancer.stochastic.primaryRegionCountCost";<a name="line.985"></a>
<span class="sourceLineNo">986</span>    private static final float DEFAULT_PRIMARY_REGION_COUNT_SKEW_COST = 500;<a name="line.986"></a>
<span class="sourceLineNo">987</span><a name="line.987"></a>
<span class="sourceLineNo">988</span>    private double[] stats = null;<a name="line.988"></a>
<span class="sourceLineNo">989</span><a name="line.989"></a>
<span class="sourceLineNo">990</span>    PrimaryRegionCountSkewCostFunction(Configuration conf) {<a name="line.990"></a>
<span class="sourceLineNo">991</span>      super(conf);<a name="line.991"></a>
<span class="sourceLineNo">992</span>      // Load multiplier should be the greatest as primary regions serve majority of reads/writes.<a name="line.992"></a>
<span class="sourceLineNo">993</span>      this.setMultiplier(conf.getFloat(PRIMARY_REGION_COUNT_SKEW_COST_KEY,<a name="line.993"></a>
<span class="sourceLineNo">994</span>        DEFAULT_PRIMARY_REGION_COUNT_SKEW_COST));<a name="line.994"></a>
<span class="sourceLineNo">995</span>    }<a name="line.995"></a>
<span class="sourceLineNo">996</span><a name="line.996"></a>
<span class="sourceLineNo">997</span>    @Override<a name="line.997"></a>
<span class="sourceLineNo">998</span>    boolean isNeeded() {<a name="line.998"></a>
<span class="sourceLineNo">999</span>      return cluster.hasRegionReplicas;<a name="line.999"></a>
<span class="sourceLineNo">1000</span>    }<a name="line.1000"></a>
<span class="sourceLineNo">1001</span><a name="line.1001"></a>
<span class="sourceLineNo">1002</span>    @Override<a name="line.1002"></a>
<span class="sourceLineNo">1003</span>    protected double cost() {<a name="line.1003"></a>
<span class="sourceLineNo">1004</span>      if (!cluster.hasRegionReplicas) {<a name="line.1004"></a>
<span class="sourceLineNo">1005</span>        return 0;<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>      }<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>      if (stats == null || stats.length != cluster.numServers) {<a name="line.1007"></a>
<span class="sourceLineNo">1008</span>        stats = new double[cluster.numServers];<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>      }<a name="line.1009"></a>
<span class="sourceLineNo">1010</span><a name="line.1010"></a>
<span class="sourceLineNo">1011</span>      for (int i = 0; i &lt; cluster.numServers; i++) {<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>        stats[i] = 0;<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>        for (int regionIdx : cluster.regionsPerServer[i]) {<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>          if (regionIdx == cluster.regionIndexToPrimaryIndex[regionIdx]) {<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>            stats[i]++;<a name="line.1015"></a>
<span class="sourceLineNo">1016</span>          }<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>        }<a name="line.1017"></a>
<span class="sourceLineNo">1018</span>      }<a name="line.1018"></a>
<span class="sourceLineNo">1019</span><a name="line.1019"></a>
<span class="sourceLineNo">1020</span>      return costFromArray(stats);<a name="line.1020"></a>
<span class="sourceLineNo">1021</span>    }<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>  }<a name="line.1022"></a>
<span class="sourceLineNo">1023</span><a name="line.1023"></a>
<span class="sourceLineNo">1024</span>  /**<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>   * Compute the cost of a potential cluster configuration based upon how evenly<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>   * distributed tables are.<a name="line.1026"></a>
<span class="sourceLineNo">1027</span>   */<a name="line.1027"></a>
<span class="sourceLineNo">1028</span>  static class TableSkewCostFunction extends CostFunction {<a name="line.1028"></a>
<span class="sourceLineNo">1029</span><a name="line.1029"></a>
<span class="sourceLineNo">1030</span>    private static final String TABLE_SKEW_COST_KEY =<a name="line.1030"></a>
<span class="sourceLineNo">1031</span>        "hbase.master.balancer.stochastic.tableSkewCost";<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>    private static final float DEFAULT_TABLE_SKEW_COST = 35;<a name="line.1032"></a>
<span class="sourceLineNo">1033</span><a name="line.1033"></a>
<span class="sourceLineNo">1034</span>    TableSkewCostFunction(Configuration conf) {<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>      super(conf);<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>      this.setMultiplier(conf.getFloat(TABLE_SKEW_COST_KEY, DEFAULT_TABLE_SKEW_COST));<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>    }<a name="line.1037"></a>
<span class="sourceLineNo">1038</span><a name="line.1038"></a>
<span class="sourceLineNo">1039</span>    @Override<a name="line.1039"></a>
<span class="sourceLineNo">1040</span>    protected double cost() {<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>      double max = cluster.numRegions;<a name="line.1041"></a>
<span class="sourceLineNo">1042</span>      double min = ((double) cluster.numRegions) / cluster.numServers;<a name="line.1042"></a>
<span class="sourceLineNo">1043</span>      double value = 0;<a name="line.1043"></a>
<span class="sourceLineNo">1044</span><a name="line.1044"></a>
<span class="sourceLineNo">1045</span>      for (int i = 0; i &lt; cluster.numMaxRegionsPerTable.length; i++) {<a name="line.1045"></a>
<span class="sourceLineNo">1046</span>        value += cluster.numMaxRegionsPerTable[i];<a name="line.1046"></a>
<span class="sourceLineNo">1047</span>      }<a name="line.1047"></a>
<span class="sourceLineNo">1048</span><a name="line.1048"></a>
<span class="sourceLineNo">1049</span>      return scale(min, max, value);<a name="line.1049"></a>
<span class="sourceLineNo">1050</span>    }<a name="line.1050"></a>
<span class="sourceLineNo">1051</span>  }<a name="line.1051"></a>
<span class="sourceLineNo">1052</span><a name="line.1052"></a>
<span class="sourceLineNo">1053</span>  /**<a name="line.1053"></a>
<span class="sourceLineNo">1054</span>   * Compute a cost of a potential cluster configuration based upon where<a name="line.1054"></a>
<span class="sourceLineNo">1055</span>   * {@link org.apache.hadoop.hbase.regionserver.HStoreFile}s are located.<a name="line.1055"></a>
<span class="sourceLineNo">1056</span>   */<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>  static abstract class LocalityBasedCostFunction extends CostFunction {<a name="line.1057"></a>
<span class="sourceLineNo">1058</span><a name="line.1058"></a>
<span class="sourceLineNo">1059</span>    private final LocalityType type;<a name="line.1059"></a>
<span class="sourceLineNo">1060</span><a name="line.1060"></a>
<span class="sourceLineNo">1061</span>    private double bestLocality; // best case locality across cluster weighted by local data size<a name="line.1061"></a>
<span class="sourceLineNo">1062</span>    private double locality; // current locality across cluster weighted by local data size<a name="line.1062"></a>
<span class="sourceLineNo">1063</span><a name="line.1063"></a>
<span class="sourceLineNo">1064</span>    LocalityBasedCostFunction(Configuration conf, LocalityType type, String localityCostKey,<a name="line.1064"></a>
<span class="sourceLineNo">1065</span>      float defaultLocalityCost) {<a name="line.1065"></a>
<span class="sourceLineNo">1066</span>      super(conf);<a name="line.1066"></a>
<span class="sourceLineNo">1067</span>      this.type = type;<a name="line.1067"></a>
<span class="sourceLineNo">1068</span>      this.setMultiplier(conf.getFloat(localityCostKey, defaultLocalityCost));<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>      this.locality = 0.0;<a name="line.1069"></a>
<span class="sourceLineNo">1070</span>      this.bestLocality = 0.0;<a name="line.1070"></a>
<span class="sourceLineNo">1071</span>    }<a name="line.1071"></a>
<span class="sourceLineNo">1072</span><a name="line.1072"></a>
<span class="sourceLineNo">1073</span>    /**<a name="line.1073"></a>
<span class="sourceLineNo">1074</span>     * Maps region to the current entity (server or rack) on which it is stored<a name="line.1074"></a>
<span class="sourceLineNo">1075</span>     */<a name="line.1075"></a>
<span class="sourceLineNo">1076</span>    abstract int regionIndexToEntityIndex(int region);<a name="line.1076"></a>
<span class="sourceLineNo">1077</span><a name="line.1077"></a>
<span class="sourceLineNo">1078</span>    @Override<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>    void init(Cluster cluster) {<a name="line.1079"></a>
<span class="sourceLineNo">1080</span>      super.init(cluster);<a name="line.1080"></a>
<span class="sourceLineNo">1081</span>      locality = 0.0;<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>      bestLocality = 0.0;<a name="line.1082"></a>
<span class="sourceLineNo">1083</span><a name="line.1083"></a>
<span class="sourceLineNo">1084</span>      for (int region = 0; region &lt; cluster.numRegions; region++) {<a name="line.1084"></a>
<span class="sourceLineNo">1085</span>        locality += getWeightedLocality(region, regionIndexToEntityIndex(region));<a name="line.1085"></a>
<span class="sourceLineNo">1086</span>        bestLocality += getWeightedLocality(region, getMostLocalEntityForRegion(region));<a name="line.1086"></a>
<span class="sourceLineNo">1087</span>      }<a name="line.1087"></a>
<span class="sourceLineNo">1088</span><a name="line.1088"></a>
<span class="sourceLineNo">1089</span>      // We normalize locality to be a score between 0 and 1.0 representing how good it<a name="line.1089"></a>
<span class="sourceLineNo">1090</span>      // is compared to how good it could be. If bestLocality is 0, assume locality is 100<a name="line.1090"></a>
<span class="sourceLineNo">1091</span>      // (and the cost is 0)<a name="line.1091"></a>
<span class="sourceLineNo">1092</span>      locality = bestLocality == 0 ? 1.0 : locality / bestLocality;<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>    }<a name="line.1093"></a>
<span class="sourceLineNo">1094</span><a name="line.1094"></a>
<span class="sourceLineNo">1095</span>    @Override<a name="line.1095"></a>
<span class="sourceLineNo">1096</span>    protected void regionMoved(int region, int oldServer, int newServer) {<a name="line.1096"></a>
<span class="sourceLineNo">1097</span>      int oldEntity = type == LocalityType.SERVER ? oldServer : cluster.serverIndexToRackIndex[oldServer];<a name="line.1097"></a>
<span class="sourceLineNo">1098</span>      int newEntity = type == LocalityType.SERVER ? newServer : cluster.serverIndexToRackIndex[newServer];<a name="line.1098"></a>
<span class="sourceLineNo">1099</span>      double localityDelta = getWeightedLocality(region, newEntity) - getWeightedLocality(region, oldEntity);<a name="line.1099"></a>
<span class="sourceLineNo">1100</span>      double normalizedDelta = bestLocality == 0 ? 0.0 : localityDelta / bestLocality;<a name="line.1100"></a>
<span class="sourceLineNo">1101</span>      locality += normalizedDelta;<a name="line.1101"></a>
<span class="sourceLineNo">1102</span>    }<a name="line.1102"></a>
<span class="sourceLineNo">1103</span><a name="line.1103"></a>
<span class="sourceLineNo">1104</span>    @Override<a name="line.1104"></a>
<span class="sourceLineNo">1105</span>    protected double cost() {<a name="line.1105"></a>
<span class="sourceLineNo">1106</span>      return 1 - locality;<a name="line.1106"></a>
<span class="sourceLineNo">1107</span>    }<a name="line.1107"></a>
<span class="sourceLineNo">1108</span><a name="line.1108"></a>
<span class="sourceLineNo">1109</span>    private int getMostLocalEntityForRegion(int region) {<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>      return cluster.getOrComputeRegionsToMostLocalEntities(type)[region];<a name="line.1110"></a>
<span class="sourceLineNo">1111</span>    }<a name="line.1111"></a>
<span class="sourceLineNo">1112</span><a name="line.1112"></a>
<span class="sourceLineNo">1113</span>    private double getWeightedLocality(int region, int entity) {<a name="line.1113"></a>
<span class="sourceLineNo">1114</span>      return cluster.getOrComputeWeightedLocality(region, entity, type);<a name="line.1114"></a>
<span class="sourceLineNo">1115</span>    }<a name="line.1115"></a>
<span class="sourceLineNo">1116</span><a name="line.1116"></a>
<span class="sourceLineNo">1117</span>  }<a name="line.1117"></a>
<span class="sourceLineNo">1118</span><a name="line.1118"></a>
<span class="sourceLineNo">1119</span>  static class ServerLocalityCostFunction extends LocalityBasedCostFunction {<a name="line.1119"></a>
<span class="sourceLineNo">1120</span><a name="line.1120"></a>
<span class="sourceLineNo">1121</span>    private static final String LOCALITY_COST_KEY = "hbase.master.balancer.stochastic.localityCost";<a name="line.1121"></a>
<span class="sourceLineNo">1122</span>    private static final float DEFAULT_LOCALITY_COST = 25;<a name="line.1122"></a>
<span class="sourceLineNo">1123</span><a name="line.1123"></a>
<span class="sourceLineNo">1124</span>    ServerLocalityCostFunction(Configuration conf) {<a name="line.1124"></a>
<span class="sourceLineNo">1125</span>      super(conf, LocalityType.SERVER, LOCALITY_COST_KEY, DEFAULT_LOCALITY_COST);<a name="line.1125"></a>
<span class="sourceLineNo">1126</span>    }<a name="line.1126"></a>
<span class="sourceLineNo">1127</span><a name="line.1127"></a>
<span class="sourceLineNo">1128</span>    @Override<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>    int regionIndexToEntityIndex(int region) {<a name="line.1129"></a>
<span class="sourceLineNo">1130</span>      return cluster.regionIndexToServerIndex[region];<a name="line.1130"></a>
<span class="sourceLineNo">1131</span>    }<a name="line.1131"></a>
<span class="sourceLineNo">1132</span>  }<a name="line.1132"></a>
<span class="sourceLineNo">1133</span><a name="line.1133"></a>
<span class="sourceLineNo">1134</span>  static class RackLocalityCostFunction extends LocalityBasedCostFunction {<a name="line.1134"></a>
<span class="sourceLineNo">1135</span><a name="line.1135"></a>
<span class="sourceLineNo">1136</span>    private static final String RACK_LOCALITY_COST_KEY = "hbase.master.balancer.stochastic.rackLocalityCost";<a name="line.1136"></a>
<span class="sourceLineNo">1137</span>    private static final float DEFAULT_RACK_LOCALITY_COST = 15;<a name="line.1137"></a>
<span class="sourceLineNo">1138</span><a name="line.1138"></a>
<span class="sourceLineNo">1139</span>    public RackLocalityCostFunction(Configuration conf) {<a name="line.1139"></a>
<span class="sourceLineNo">1140</span>      super(conf, LocalityType.RACK, RACK_LOCALITY_COST_KEY, DEFAULT_RACK_LOCALITY_COST);<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>    }<a name="line.1141"></a>
<span class="sourceLineNo">1142</span><a name="line.1142"></a>
<span class="sourceLineNo">1143</span>    @Override<a name="line.1143"></a>
<span class="sourceLineNo">1144</span>    int regionIndexToEntityIndex(int region) {<a name="line.1144"></a>
<span class="sourceLineNo">1145</span>      return cluster.getRackForRegion(region);<a name="line.1145"></a>
<span class="sourceLineNo">1146</span>    }<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>  }<a name="line.1147"></a>
<span class="sourceLineNo">1148</span><a name="line.1148"></a>
<span class="sourceLineNo">1149</span>  /**<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>   * Base class the allows writing costs functions from rolling average of some<a name="line.1150"></a>
<span class="sourceLineNo">1151</span>   * number from RegionLoad.<a name="line.1151"></a>
<span class="sourceLineNo">1152</span>   */<a name="line.1152"></a>
<span class="sourceLineNo">1153</span>  abstract static class CostFromRegionLoadFunction extends CostFunction {<a name="line.1153"></a>
<span class="sourceLineNo">1154</span><a name="line.1154"></a>
<span class="sourceLineNo">1155</span>    private ClusterMetrics clusterStatus = null;<a name="line.1155"></a>
<span class="sourceLineNo">1156</span>    private Map&lt;String, Deque&lt;BalancerRegionLoad&gt;&gt; loads = null;<a name="line.1156"></a>
<span class="sourceLineNo">1157</span>    private double[] stats = null;<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>    CostFromRegionLoadFunction(Configuration conf) {<a name="line.1158"></a>
<span class="sourceLineNo">1159</span>      super(conf);<a name="line.1159"></a>
<span class="sourceLineNo">1160</span>    }<a name="line.1160"></a>
<span class="sourceLineNo">1161</span><a name="line.1161"></a>
<span class="sourceLineNo">1162</span>    void setClusterMetrics(ClusterMetrics status) {<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>      this.clusterStatus = status;<a name="line.1163"></a>
<span class="sourceLineNo">1164</span>    }<a name="line.1164"></a>
<span class="sourceLineNo">1165</span><a name="line.1165"></a>
<span class="sourceLineNo">1166</span>    void setLoads(Map&lt;String, Deque&lt;BalancerRegionLoad&gt;&gt; l) {<a name="line.1166"></a>
<span class="sourceLineNo">1167</span>      this.loads = l;<a name="line.1167"></a>
<span class="sourceLineNo">1168</span>    }<a name="line.1168"></a>
<span class="sourceLineNo">1169</span><a name="line.1169"></a>
<span class="sourceLineNo">1170</span>    @Override<a name="line.1170"></a>
<span class="sourceLineNo">1171</span>    protected double cost() {<a name="line.1171"></a>
<span class="sourceLineNo">1172</span>      if (clusterStatus == null || loads == null) {<a name="line.1172"></a>
<span class="sourceLineNo">1173</span>        return 0;<a name="line.1173"></a>
<span class="sourceLineNo">1174</span>      }<a name="line.1174"></a>
<span class="sourceLineNo">1175</span><a name="line.1175"></a>
<span class="sourceLineNo">1176</span>      if (stats == null || stats.length != cluster.numServers) {<a name="line.1176"></a>
<span class="sourceLineNo">1177</span>        stats = new double[cluster.numServers];<a name="line.1177"></a>
<span class="sourceLineNo">1178</span>      }<a name="line.1178"></a>
<span class="sourceLineNo">1179</span><a name="line.1179"></a>
<span class="sourceLineNo">1180</span>      for (int i =0; i &lt; stats.length; i++) {<a name="line.1180"></a>
<span class="sourceLineNo">1181</span>        //Cost this server has from RegionLoad<a name="line.1181"></a>
<span class="sourceLineNo">1182</span>        long cost = 0;<a name="line.1182"></a>
<span class="sourceLineNo">1183</span><a name="line.1183"></a>
<span class="sourceLineNo">1184</span>        // for every region on this server get the rl<a name="line.1184"></a>
<span class="sourceLineNo">1185</span>        for(int regionIndex:cluster.regionsPerServer[i]) {<a name="line.1185"></a>
<span class="sourceLineNo">1186</span>          Collection&lt;BalancerRegionLoad&gt; regionLoadList =  cluster.regionLoads[regionIndex];<a name="line.1186"></a>
<span class="sourceLineNo">1187</span><a name="line.1187"></a>
<span class="sourceLineNo">1188</span>          // Now if we found a region load get the type of cost that was requested.<a name="line.1188"></a>
<span class="sourceLineNo">1189</span>          if (regionLoadList != null) {<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>            cost = (long) (cost + getRegionLoadCost(regionLoadList));<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>          }<a name="line.1191"></a>
<span class="sourceLineNo">1192</span>        }<a name="line.1192"></a>
<span class="sourceLineNo">1193</span><a name="line.1193"></a>
<span class="sourceLineNo">1194</span>        // Add the total cost to the stats.<a name="line.1194"></a>
<span class="sourceLineNo">1195</span>        stats[i] = cost;<a name="line.1195"></a>
<span class="sourceLineNo">1196</span>      }<a name="line.1196"></a>
<span class="sourceLineNo">1197</span><a name="line.1197"></a>
<span class="sourceLineNo">1198</span>      // Now return the scaled cost from data held in the stats object.<a name="line.1198"></a>
<span class="sourceLineNo">1199</span>      return costFromArray(stats);<a name="line.1199"></a>
<span class="sourceLineNo">1200</span>    }<a name="line.1200"></a>
<span class="sourceLineNo">1201</span><a name="line.1201"></a>
<span class="sourceLineNo">1202</span>    protected double getRegionLoadCost(Collection&lt;BalancerRegionLoad&gt; regionLoadList) {<a name="line.1202"></a>
<span class="sourceLineNo">1203</span>      double cost = 0;<a name="line.1203"></a>
<span class="sourceLineNo">1204</span>      for (BalancerRegionLoad rl : regionLoadList) {<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>        cost += getCostFromRl(rl);<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>      }<a name="line.1206"></a>
<span class="sourceLineNo">1207</span>      return cost / regionLoadList.size();<a name="line.1207"></a>
<span class="sourceLineNo">1208</span>    }<a name="line.1208"></a>
<span class="sourceLineNo">1209</span><a name="line.1209"></a>
<span class="sourceLineNo">1210</span>    protected abstract double getCostFromRl(BalancerRegionLoad rl);<a name="line.1210"></a>
<span class="sourceLineNo">1211</span>  }<a name="line.1211"></a>
<span class="sourceLineNo">1212</span><a name="line.1212"></a>
<span class="sourceLineNo">1213</span>  /**<a name="line.1213"></a>
<span class="sourceLineNo">1214</span>   * Class to be used for the subset of RegionLoad costs that should be treated as rates.<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>   * We do not compare about the actual rate in requests per second but rather the rate relative<a name="line.1215"></a>
<span class="sourceLineNo">1216</span>   * to the rest of the regions.<a name="line.1216"></a>
<span class="sourceLineNo">1217</span>   */<a name="line.1217"></a>
<span class="sourceLineNo">1218</span>  abstract static class CostFromRegionLoadAsRateFunction extends CostFromRegionLoadFunction {<a name="line.1218"></a>
<span class="sourceLineNo">1219</span><a name="line.1219"></a>
<span class="sourceLineNo">1220</span>    CostFromRegionLoadAsRateFunction(Configuration conf) {<a name="line.1220"></a>
<span class="sourceLineNo">1221</span>      super(conf);<a name="line.1221"></a>
<span class="sourceLineNo">1222</span>    }<a name="line.1222"></a>
<span class="sourceLineNo">1223</span><a name="line.1223"></a>
<span class="sourceLineNo">1224</span>    @Override<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>    protected double getRegionLoadCost(Collection&lt;BalancerRegionLoad&gt; regionLoadList) {<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>      double cost = 0;<a name="line.1226"></a>
<span class="sourceLineNo">1227</span>      double previous = 0;<a name="line.1227"></a>
<span class="sourceLineNo">1228</span>      boolean isFirst = true;<a name="line.1228"></a>
<span class="sourceLineNo">1229</span>      for (BalancerRegionLoad rl : regionLoadList) {<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>        double current = getCostFromRl(rl);<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>        if (isFirst) {<a name="line.1231"></a>
<span class="sourceLineNo">1232</span>          isFirst = false;<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>        } else {<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>          cost += current - previous;<a name="line.1234"></a>
<span class="sourceLineNo">1235</span>        }<a name="line.1235"></a>
<span class="sourceLineNo">1236</span>        previous = current;<a name="line.1236"></a>
<span class="sourceLineNo">1237</span>      }<a name="line.1237"></a>
<span class="sourceLineNo">1238</span>      return Math.max(0, cost / (regionLoadList.size() - 1));<a name="line.1238"></a>
<span class="sourceLineNo">1239</span>    }<a name="line.1239"></a>
<span class="sourceLineNo">1240</span>  }<a name="line.1240"></a>
<span class="sourceLineNo">1241</span><a name="line.1241"></a>
<span class="sourceLineNo">1242</span>  /**<a name="line.1242"></a>
<span class="sourceLineNo">1243</span>   * Compute the cost of total number of read requests  The more unbalanced the higher the<a name="line.1243"></a>
<span class="sourceLineNo">1244</span>   * computed cost will be.  This uses a rolling average of regionload.<a name="line.1244"></a>
<span class="sourceLineNo">1245</span>   */<a name="line.1245"></a>
<span class="sourceLineNo">1246</span><a name="line.1246"></a>
<span class="sourceLineNo">1247</span>  static class ReadRequestCostFunction extends CostFromRegionLoadAsRateFunction {<a name="line.1247"></a>
<span class="sourceLineNo">1248</span><a name="line.1248"></a>
<span class="sourceLineNo">1249</span>    private static final String READ_REQUEST_COST_KEY =<a name="line.1249"></a>
<span class="sourceLineNo">1250</span>        "hbase.master.balancer.stochastic.readRequestCost";<a name="line.1250"></a>
<span class="sourceLineNo">1251</span>    private static final float DEFAULT_READ_REQUEST_COST = 5;<a name="line.1251"></a>
<span class="sourceLineNo">1252</span><a name="line.1252"></a>
<span class="sourceLineNo">1253</span>    ReadRequestCostFunction(Configuration conf) {<a name="line.1253"></a>
<span class="sourceLineNo">1254</span>      super(conf);<a name="line.1254"></a>
<span class="sourceLineNo">1255</span>      this.setMultiplier(conf.getFloat(READ_REQUEST_COST_KEY, DEFAULT_READ_REQUEST_COST));<a name="line.1255"></a>
<span class="sourceLineNo">1256</span>    }<a name="line.1256"></a>
<span class="sourceLineNo">1257</span><a name="line.1257"></a>
<span class="sourceLineNo">1258</span>    @Override<a name="line.1258"></a>
<span class="sourceLineNo">1259</span>    protected double getCostFromRl(BalancerRegionLoad rl) {<a name="line.1259"></a>
<span class="sourceLineNo">1260</span>      return rl.getReadRequestsCount();<a name="line.1260"></a>
<span class="sourceLineNo">1261</span>    }<a name="line.1261"></a>
<span class="sourceLineNo">1262</span>  }<a name="line.1262"></a>
<span class="sourceLineNo">1263</span><a name="line.1263"></a>
<span class="sourceLineNo">1264</span>  /**<a name="line.1264"></a>
<span class="sourceLineNo">1265</span>   * Compute the cost of total number of coprocessor requests  The more unbalanced the higher the<a name="line.1265"></a>
<span class="sourceLineNo">1266</span>   * computed cost will be.  This uses a rolling average of regionload.<a name="line.1266"></a>
<span class="sourceLineNo">1267</span>   */<a name="line.1267"></a>
<span class="sourceLineNo">1268</span><a name="line.1268"></a>
<span class="sourceLineNo">1269</span>  static class CPRequestCostFunction extends CostFromRegionLoadAsRateFunction {<a name="line.1269"></a>
<span class="sourceLineNo">1270</span><a name="line.1270"></a>
<span class="sourceLineNo">1271</span>    private static final String CP_REQUEST_COST_KEY =<a name="line.1271"></a>
<span class="sourceLineNo">1272</span>        "hbase.master.balancer.stochastic.cpRequestCost";<a name="line.1272"></a>
<span class="sourceLineNo">1273</span>    private static final float DEFAULT_CP_REQUEST_COST = 5;<a name="line.1273"></a>
<span class="sourceLineNo">1274</span><a name="line.1274"></a>
<span class="sourceLineNo">1275</span>    CPRequestCostFunction(Configuration conf) {<a name="line.1275"></a>
<span class="sourceLineNo">1276</span>      super(conf);<a name="line.1276"></a>
<span class="sourceLineNo">1277</span>      this.setMultiplier(conf.getFloat(CP_REQUEST_COST_KEY, DEFAULT_CP_REQUEST_COST));<a name="line.1277"></a>
<span class="sourceLineNo">1278</span>    }<a name="line.1278"></a>
<span class="sourceLineNo">1279</span><a name="line.1279"></a>
<span class="sourceLineNo">1280</span>    @Override<a name="line.1280"></a>
<span class="sourceLineNo">1281</span>    protected double getCostFromRl(BalancerRegionLoad rl) {<a name="line.1281"></a>
<span class="sourceLineNo">1282</span>      return rl.getCpRequestsCount();<a name="line.1282"></a>
<span class="sourceLineNo">1283</span>    }<a name="line.1283"></a>
<span class="sourceLineNo">1284</span>  }<a name="line.1284"></a>
<span class="sourceLineNo">1285</span><a name="line.1285"></a>
<span class="sourceLineNo">1286</span>  /**<a name="line.1286"></a>
<span class="sourceLineNo">1287</span>   * Compute the cost of total number of write requests.  The more unbalanced the higher the<a name="line.1287"></a>
<span class="sourceLineNo">1288</span>   * computed cost will be.  This uses a rolling average of regionload.<a name="line.1288"></a>
<span class="sourceLineNo">1289</span>   */<a name="line.1289"></a>
<span class="sourceLineNo">1290</span>  static class WriteRequestCostFunction extends CostFromRegionLoadAsRateFunction {<a name="line.1290"></a>
<span class="sourceLineNo">1291</span><a name="line.1291"></a>
<span class="sourceLineNo">1292</span>    private static final String WRITE_REQUEST_COST_KEY =<a name="line.1292"></a>
<span class="sourceLineNo">1293</span>        "hbase.master.balancer.stochastic.writeRequestCost";<a name="line.1293"></a>
<span class="sourceLineNo">1294</span>    private static final float DEFAULT_WRITE_REQUEST_COST = 5;<a name="line.1294"></a>
<span class="sourceLineNo">1295</span><a name="line.1295"></a>
<span class="sourceLineNo">1296</span>    WriteRequestCostFunction(Configuration conf) {<a name="line.1296"></a>
<span class="sourceLineNo">1297</span>      super(conf);<a name="line.1297"></a>
<span class="sourceLineNo">1298</span>      this.setMultiplier(conf.getFloat(WRITE_REQUEST_COST_KEY, DEFAULT_WRITE_REQUEST_COST));<a name="line.1298"></a>
<span class="sourceLineNo">1299</span>    }<a name="line.1299"></a>
<span class="sourceLineNo">1300</span><a name="line.1300"></a>
<span class="sourceLineNo">1301</span>    @Override<a name="line.1301"></a>
<span class="sourceLineNo">1302</span>    protected double getCostFromRl(BalancerRegionLoad rl) {<a name="line.1302"></a>
<span class="sourceLineNo">1303</span>      return rl.getWriteRequestsCount();<a name="line.1303"></a>
<span class="sourceLineNo">1304</span>    }<a name="line.1304"></a>
<span class="sourceLineNo">1305</span>  }<a name="line.1305"></a>
<span class="sourceLineNo">1306</span><a name="line.1306"></a>
<span class="sourceLineNo">1307</span>  /**<a name="line.1307"></a>
<span class="sourceLineNo">1308</span>   * A cost function for region replicas. We give a very high cost to hosting<a name="line.1308"></a>
<span class="sourceLineNo">1309</span>   * replicas of the same region in the same host. We do not prevent the case<a name="line.1309"></a>
<span class="sourceLineNo">1310</span>   * though, since if numReplicas &gt; numRegionServers, we still want to keep the<a name="line.1310"></a>
<span class="sourceLineNo">1311</span>   * replica open.<a name="line.1311"></a>
<span class="sourceLineNo">1312</span>   */<a name="line.1312"></a>
<span class="sourceLineNo">1313</span>  static class RegionReplicaHostCostFunction extends CostFunction {<a name="line.1313"></a>
<span class="sourceLineNo">1314</span>    private static final String REGION_REPLICA_HOST_COST_KEY =<a name="line.1314"></a>
<span class="sourceLineNo">1315</span>        "hbase.master.balancer.stochastic.regionReplicaHostCostKey";<a name="line.1315"></a>
<span class="sourceLineNo">1316</span>    private static final float DEFAULT_REGION_REPLICA_HOST_COST_KEY = 100000;<a name="line.1316"></a>
<span class="sourceLineNo">1317</span><a name="line.1317"></a>
<span class="sourceLineNo">1318</span>    long maxCost = 0;<a name="line.1318"></a>
<span class="sourceLineNo">1319</span>    long[] costsPerGroup; // group is either server, host or rack<a name="line.1319"></a>
<span class="sourceLineNo">1320</span>    int[][] primariesOfRegionsPerGroup;<a name="line.1320"></a>
<span class="sourceLineNo">1321</span><a name="line.1321"></a>
<span class="sourceLineNo">1322</span>    public RegionReplicaHostCostFunction(Configuration conf) {<a name="line.1322"></a>
<span class="sourceLineNo">1323</span>      super(conf);<a name="line.1323"></a>
<span class="sourceLineNo">1324</span>      this.setMultiplier(conf.getFloat(REGION_REPLICA_HOST_COST_KEY,<a name="line.1324"></a>
<span class="sourceLineNo">1325</span>        DEFAULT_REGION_REPLICA_HOST_COST_KEY));<a name="line.1325"></a>
<span class="sourceLineNo">1326</span>    }<a name="line.1326"></a>
<span class="sourceLineNo">1327</span><a name="line.1327"></a>
<span class="sourceLineNo">1328</span>    @Override<a name="line.1328"></a>
<span class="sourceLineNo">1329</span>    void init(Cluster cluster) {<a name="line.1329"></a>
<span class="sourceLineNo">1330</span>      super.init(cluster);<a name="line.1330"></a>
<span class="sourceLineNo">1331</span>      // max cost is the case where every region replica is hosted together regardless of host<a name="line.1331"></a>
<span class="sourceLineNo">1332</span>      maxCost = cluster.numHosts &gt; 1 ? getMaxCost(cluster) : 0;<a name="line.1332"></a>
<span class="sourceLineNo">1333</span>      costsPerGroup = new long[cluster.numHosts];<a name="line.1333"></a>
<span class="sourceLineNo">1334</span>      primariesOfRegionsPerGroup = cluster.multiServersPerHost // either server based or host based<a name="line.1334"></a>
<span class="sourceLineNo">1335</span>          ? cluster.primariesOfRegionsPerHost<a name="line.1335"></a>
<span class="sourceLineNo">1336</span>          : cluster.primariesOfRegionsPerServer;<a name="line.1336"></a>
<span class="sourceLineNo">1337</span>      for (int i = 0 ; i &lt; primariesOfRegionsPerGroup.length; i++) {<a name="line.1337"></a>
<span class="sourceLineNo">1338</span>        costsPerGroup[i] = costPerGroup(primariesOfRegionsPerGroup[i]);<a name="line.1338"></a>
<span class="sourceLineNo">1339</span>      }<a name="line.1339"></a>
<span class="sourceLineNo">1340</span>    }<a name="line.1340"></a>
<span class="sourceLineNo">1341</span><a name="line.1341"></a>
<span class="sourceLineNo">1342</span>    long getMaxCost(Cluster cluster) {<a name="line.1342"></a>
<span class="sourceLineNo">1343</span>      if (!cluster.hasRegionReplicas) {<a name="line.1343"></a>
<span class="sourceLineNo">1344</span>        return 0; // short circuit<a name="line.1344"></a>
<span class="sourceLineNo">1345</span>      }<a name="line.1345"></a>
<span class="sourceLineNo">1346</span>      // max cost is the case where every region replica is hosted together regardless of host<a name="line.1346"></a>
<span class="sourceLineNo">1347</span>      int[] primariesOfRegions = new int[cluster.numRegions];<a name="line.1347"></a>
<span class="sourceLineNo">1348</span>      System.arraycopy(cluster.regionIndexToPrimaryIndex, 0, primariesOfRegions, 0,<a name="line.1348"></a>
<span class="sourceLineNo">1349</span>          cluster.regions.length);<a name="line.1349"></a>
<span class="sourceLineNo">1350</span><a name="line.1350"></a>
<span class="sourceLineNo">1351</span>      Arrays.sort(primariesOfRegions);<a name="line.1351"></a>
<span class="sourceLineNo">1352</span><a name="line.1352"></a>
<span class="sourceLineNo">1353</span>      // compute numReplicas from the sorted array<a name="line.1353"></a>
<span class="sourceLineNo">1354</span>      return costPerGroup(primariesOfRegions);<a name="line.1354"></a>
<span class="sourceLineNo">1355</span>    }<a name="line.1355"></a>
<span class="sourceLineNo">1356</span><a name="line.1356"></a>
<span class="sourceLineNo">1357</span>    @Override<a name="line.1357"></a>
<span class="sourceLineNo">1358</span>    boolean isNeeded() {<a name="line.1358"></a>
<span class="sourceLineNo">1359</span>      return cluster.hasRegionReplicas;<a name="line.1359"></a>
<span class="sourceLineNo">1360</span>    }<a name="line.1360"></a>
<span class="sourceLineNo">1361</span><a name="line.1361"></a>
<span class="sourceLineNo">1362</span>    @Override<a name="line.1362"></a>
<span class="sourceLineNo">1363</span>    protected double cost() {<a name="line.1363"></a>
<span class="sourceLineNo">1364</span>      if (maxCost &lt;= 0) {<a name="line.1364"></a>
<span class="sourceLineNo">1365</span>        return 0;<a name="line.1365"></a>
<span class="sourceLineNo">1366</span>      }<a name="line.1366"></a>
<span class="sourceLineNo">1367</span><a name="line.1367"></a>
<span class="sourceLineNo">1368</span>      long totalCost = 0;<a name="line.1368"></a>
<span class="sourceLineNo">1369</span>      for (int i = 0 ; i &lt; costsPerGroup.length; i++) {<a name="line.1369"></a>
<span class="sourceLineNo">1370</span>        totalCost += costsPerGroup[i];<a name="line.1370"></a>
<span class="sourceLineNo">1371</span>      }<a name="line.1371"></a>
<span class="sourceLineNo">1372</span>      return scale(0, maxCost, totalCost);<a name="line.1372"></a>
<span class="sourceLineNo">1373</span>    }<a name="line.1373"></a>
<span class="sourceLineNo">1374</span><a name="line.1374"></a>
<span class="sourceLineNo">1375</span>    /**<a name="line.1375"></a>
<span class="sourceLineNo">1376</span>     * For each primary region, it computes the total number of replicas in the array (numReplicas)<a name="line.1376"></a>
<span class="sourceLineNo">1377</span>     * and returns a sum of numReplicas-1 squared. For example, if the server hosts<a name="line.1377"></a>
<span class="sourceLineNo">1378</span>     * regions a, b, c, d, e, f where a and b are same replicas, and c,d,e are same replicas, it<a name="line.1378"></a>
<span class="sourceLineNo">1379</span>     * returns (2-1) * (2-1) + (3-1) * (3-1) + (1-1) * (1-1).<a name="line.1379"></a>
<span class="sourceLineNo">1380</span>     * @param primariesOfRegions a sorted array of primary regions ids for the regions hosted<a name="line.1380"></a>
<span class="sourceLineNo">1381</span>     * @return a sum of numReplicas-1 squared for each primary region in the group.<a name="line.1381"></a>
<span class="sourceLineNo">1382</span>     */<a name="line.1382"></a>
<span class="sourceLineNo">1383</span>    protected long costPerGroup(int[] primariesOfRegions) {<a name="line.1383"></a>
<span class="sourceLineNo">1384</span>      long cost = 0;<a name="line.1384"></a>
<span class="sourceLineNo">1385</span>      int currentPrimary = -1;<a name="line.1385"></a>
<span class="sourceLineNo">1386</span>      int currentPrimaryIndex = -1;<a name="line.1386"></a>
<span class="sourceLineNo">1387</span>      // primariesOfRegions is a sorted array of primary ids of regions. Replicas of regions<a name="line.1387"></a>
<span class="sourceLineNo">1388</span>      // sharing the same primary will have consecutive numbers in the array.<a name="line.1388"></a>
<span class="sourceLineNo">1389</span>      for (int j = 0 ; j &lt;= primariesOfRegions.length; j++) {<a name="line.1389"></a>
<span class="sourceLineNo">1390</span>        int primary = j &lt; primariesOfRegions.length ? primariesOfRegions[j] : -1;<a name="line.1390"></a>
<span class="sourceLineNo">1391</span>        if (primary != currentPrimary) { // we see a new primary<a name="line.1391"></a>
<span class="sourceLineNo">1392</span>          int numReplicas = j - currentPrimaryIndex;<a name="line.1392"></a>
<span class="sourceLineNo">1393</span>          // square the cost<a name="line.1393"></a>
<span class="sourceLineNo">1394</span>          if (numReplicas &gt; 1) { // means consecutive primaries, indicating co-location<a name="line.1394"></a>
<span class="sourceLineNo">1395</span>            cost += (numReplicas - 1) * (numReplicas - 1);<a name="line.1395"></a>
<span class="sourceLineNo">1396</span>          }<a name="line.1396"></a>
<span class="sourceLineNo">1397</span>          currentPrimary = primary;<a name="line.1397"></a>
<span class="sourceLineNo">1398</span>          currentPrimaryIndex = j;<a name="line.1398"></a>
<span class="sourceLineNo">1399</span>        }<a name="line.1399"></a>
<span class="sourceLineNo">1400</span>      }<a name="line.1400"></a>
<span class="sourceLineNo">1401</span><a name="line.1401"></a>
<span class="sourceLineNo">1402</span>      return cost;<a name="line.1402"></a>
<span class="sourceLineNo">1403</span>    }<a name="line.1403"></a>
<span class="sourceLineNo">1404</span><a name="line.1404"></a>
<span class="sourceLineNo">1405</span>    @Override<a name="line.1405"></a>
<span class="sourceLineNo">1406</span>    protected void regionMoved(int region, int oldServer, int newServer) {<a name="line.1406"></a>
<span class="sourceLineNo">1407</span>      if (maxCost &lt;= 0) {<a name="line.1407"></a>
<span class="sourceLineNo">1408</span>        return; // no need to compute<a name="line.1408"></a>
<span class="sourceLineNo">1409</span>      }<a name="line.1409"></a>
<span class="sourceLineNo">1410</span>      if (cluster.multiServersPerHost) {<a name="line.1410"></a>
<span class="sourceLineNo">1411</span>        int oldHost = cluster.serverIndexToHostIndex[oldServer];<a name="line.1411"></a>
<span class="sourceLineNo">1412</span>        int newHost = cluster.serverIndexToHostIndex[newServer];<a name="line.1412"></a>
<span class="sourceLineNo">1413</span>        if (newHost != oldHost) {<a name="line.1413"></a>
<span class="sourceLineNo">1414</span>          costsPerGroup[oldHost] = costPerGroup(cluster.primariesOfRegionsPerHost[oldHost]);<a name="line.1414"></a>
<span class="sourceLineNo">1415</span>          costsPerGroup[newHost] = costPerGroup(cluster.primariesOfRegionsPerHost[newHost]);<a name="line.1415"></a>
<span class="sourceLineNo">1416</span>        }<a name="line.1416"></a>
<span class="sourceLineNo">1417</span>      } else {<a name="line.1417"></a>
<span class="sourceLineNo">1418</span>        costsPerGroup[oldServer] = costPerGroup(cluster.primariesOfRegionsPerServer[oldServer]);<a name="line.1418"></a>
<span class="sourceLineNo">1419</span>        costsPerGroup[newServer] = costPerGroup(cluster.primariesOfRegionsPerServer[newServer]);<a name="line.1419"></a>
<span class="sourceLineNo">1420</span>      }<a name="line.1420"></a>
<span class="sourceLineNo">1421</span>    }<a name="line.1421"></a>
<span class="sourceLineNo">1422</span>  }<a name="line.1422"></a>
<span class="sourceLineNo">1423</span><a name="line.1423"></a>
<span class="sourceLineNo">1424</span>  /**<a name="line.1424"></a>
<span class="sourceLineNo">1425</span>   * A cost function for region replicas for the rack distribution. We give a relatively high<a name="line.1425"></a>
<span class="sourceLineNo">1426</span>   * cost to hosting replicas of the same region in the same rack. We do not prevent the case<a name="line.1426"></a>
<span class="sourceLineNo">1427</span>   * though.<a name="line.1427"></a>
<span class="sourceLineNo">1428</span>   */<a name="line.1428"></a>
<span class="sourceLineNo">1429</span>  static class RegionReplicaRackCostFunction extends RegionReplicaHostCostFunction {<a name="line.1429"></a>
<span class="sourceLineNo">1430</span>    private static final String REGION_REPLICA_RACK_COST_KEY =<a name="line.1430"></a>
<span class="sourceLineNo">1431</span>        "hbase.master.balancer.stochastic.regionReplicaRackCostKey";<a name="line.1431"></a>
<span class="sourceLineNo">1432</span>    private static final float DEFAULT_REGION_REPLICA_RACK_COST_KEY = 10000;<a name="line.1432"></a>
<span class="sourceLineNo">1433</span><a name="line.1433"></a>
<span class="sourceLineNo">1434</span>    public RegionReplicaRackCostFunction(Configuration conf) {<a name="line.1434"></a>
<span class="sourceLineNo">1435</span>      super(conf);<a name="line.1435"></a>
<span class="sourceLineNo">1436</span>      this.setMultiplier(conf.getFloat(REGION_REPLICA_RACK_COST_KEY,<a name="line.1436"></a>
<span class="sourceLineNo">1437</span>        DEFAULT_REGION_REPLICA_RACK_COST_KEY));<a name="line.1437"></a>
<span class="sourceLineNo">1438</span>    }<a name="line.1438"></a>
<span class="sourceLineNo">1439</span><a name="line.1439"></a>
<span class="sourceLineNo">1440</span>    @Override<a name="line.1440"></a>
<span class="sourceLineNo">1441</span>    void init(Cluster cluster) {<a name="line.1441"></a>
<span class="sourceLineNo">1442</span>      this.cluster = cluster;<a name="line.1442"></a>
<span class="sourceLineNo">1443</span>      if (cluster.numRacks &lt;= 1) {<a name="line.1443"></a>
<span class="sourceLineNo">1444</span>        maxCost = 0;<a name="line.1444"></a>
<span class="sourceLineNo">1445</span>        return; // disabled for 1 rack<a name="line.1445"></a>
<span class="sourceLineNo">1446</span>      }<a name="line.1446"></a>
<span class="sourceLineNo">1447</span>      // max cost is the case where every region replica is hosted together regardless of rack<a name="line.1447"></a>
<span class="sourceLineNo">1448</span>      maxCost = getMaxCost(cluster);<a name="line.1448"></a>
<span class="sourceLineNo">1449</span>      costsPerGroup = new long[cluster.numRacks];<a name="line.1449"></a>
<span class="sourceLineNo">1450</span>      for (int i = 0 ; i &lt; cluster.primariesOfRegionsPerRack.length; i++) {<a name="line.1450"></a>
<span class="sourceLineNo">1451</span>        costsPerGroup[i] = costPerGroup(cluster.primariesOfRegionsPerRack[i]);<a name="line.1451"></a>
<span class="sourceLineNo">1452</span>      }<a name="line.1452"></a>
<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
<span class="sourceLineNo">1454</span><a name="line.1454"></a>
<span class="sourceLineNo">1455</span>    @Override<a name="line.1455"></a>
<span class="sourceLineNo">1456</span>    protected void regionMoved(int region, int oldServer, int newServer) {<a name="line.1456"></a>
<span class="sourceLineNo">1457</span>      if (maxCost &lt;= 0) {<a name="line.1457"></a>
<span class="sourceLineNo">1458</span>        return; // no need to compute<a name="line.1458"></a>
<span class="sourceLineNo">1459</span>      }<a name="line.1459"></a>
<span class="sourceLineNo">1460</span>      int oldRack = cluster.serverIndexToRackIndex[oldServer];<a name="line.1460"></a>
<span class="sourceLineNo">1461</span>      int newRack = cluster.serverIndexToRackIndex[newServer];<a name="line.1461"></a>
<span class="sourceLineNo">1462</span>      if (newRack != oldRack) {<a name="line.1462"></a>
<span class="sourceLineNo">1463</span>        costsPerGroup[oldRack] = costPerGroup(cluster.primariesOfRegionsPerRack[oldRack]);<a name="line.1463"></a>
<span class="sourceLineNo">1464</span>        costsPerGroup[newRack] = costPerGroup(cluster.primariesOfRegionsPerRack[newRack]);<a name="line.1464"></a>
<span class="sourceLineNo">1465</span>      }<a name="line.1465"></a>
<span class="sourceLineNo">1466</span>    }<a name="line.1466"></a>
<span class="sourceLineNo">1467</span>  }<a name="line.1467"></a>
<span class="sourceLineNo">1468</span><a name="line.1468"></a>
<span class="sourceLineNo">1469</span>  /**<a name="line.1469"></a>
<span class="sourceLineNo">1470</span>   * Compute the cost of total memstore size.  The more unbalanced the higher the<a name="line.1470"></a>
<span class="sourceLineNo">1471</span>   * computed cost will be.  This uses a rolling average of regionload.<a name="line.1471"></a>
<span class="sourceLineNo">1472</span>   */<a name="line.1472"></a>
<span class="sourceLineNo">1473</span>  static class MemStoreSizeCostFunction extends CostFromRegionLoadAsRateFunction {<a name="line.1473"></a>
<span class="sourceLineNo">1474</span><a name="line.1474"></a>
<span class="sourceLineNo">1475</span>    private static final String MEMSTORE_SIZE_COST_KEY =<a name="line.1475"></a>
<span class="sourceLineNo">1476</span>        "hbase.master.balancer.stochastic.memstoreSizeCost";<a name="line.1476"></a>
<span class="sourceLineNo">1477</span>    private static final float DEFAULT_MEMSTORE_SIZE_COST = 5;<a name="line.1477"></a>
<span class="sourceLineNo">1478</span><a name="line.1478"></a>
<span class="sourceLineNo">1479</span>    MemStoreSizeCostFunction(Configuration conf) {<a name="line.1479"></a>
<span class="sourceLineNo">1480</span>      super(conf);<a name="line.1480"></a>
<span class="sourceLineNo">1481</span>      this.setMultiplier(conf.getFloat(MEMSTORE_SIZE_COST_KEY, DEFAULT_MEMSTORE_SIZE_COST));<a name="line.1481"></a>
<span class="sourceLineNo">1482</span>    }<a name="line.1482"></a>
<span class="sourceLineNo">1483</span><a name="line.1483"></a>
<span class="sourceLineNo">1484</span>    @Override<a name="line.1484"></a>
<span class="sourceLineNo">1485</span>    protected double getCostFromRl(BalancerRegionLoad rl) {<a name="line.1485"></a>
<span class="sourceLineNo">1486</span>      return rl.getMemStoreSizeMB();<a name="line.1486"></a>
<span class="sourceLineNo">1487</span>    }<a name="line.1487"></a>
<span class="sourceLineNo">1488</span>  }<a name="line.1488"></a>
<span class="sourceLineNo">1489</span><a name="line.1489"></a>
<span class="sourceLineNo">1490</span>  /**<a name="line.1490"></a>
<span class="sourceLineNo">1491</span>   * Compute the cost of total open storefiles size.  The more unbalanced the higher the<a name="line.1491"></a>
<span class="sourceLineNo">1492</span>   * computed cost will be.  This uses a rolling average of regionload.<a name="line.1492"></a>
<span class="sourceLineNo">1493</span>   */<a name="line.1493"></a>
<span class="sourceLineNo">1494</span>  static class StoreFileCostFunction extends CostFromRegionLoadFunction {<a name="line.1494"></a>
<span class="sourceLineNo">1495</span><a name="line.1495"></a>
<span class="sourceLineNo">1496</span>    private static final String STOREFILE_SIZE_COST_KEY =<a name="line.1496"></a>
<span class="sourceLineNo">1497</span>        "hbase.master.balancer.stochastic.storefileSizeCost";<a name="line.1497"></a>
<span class="sourceLineNo">1498</span>    private static final float DEFAULT_STOREFILE_SIZE_COST = 5;<a name="line.1498"></a>
<span class="sourceLineNo">1499</span><a name="line.1499"></a>
<span class="sourceLineNo">1500</span>    StoreFileCostFunction(Configuration conf) {<a name="line.1500"></a>
<span class="sourceLineNo">1501</span>      super(conf);<a name="line.1501"></a>
<span class="sourceLineNo">1502</span>      this.setMultiplier(conf.getFloat(STOREFILE_SIZE_COST_KEY, DEFAULT_STOREFILE_SIZE_COST));<a name="line.1502"></a>
<span class="sourceLineNo">1503</span>    }<a name="line.1503"></a>
<span class="sourceLineNo">1504</span><a name="line.1504"></a>
<span class="sourceLineNo">1505</span>    @Override<a name="line.1505"></a>
<span class="sourceLineNo">1506</span>    protected double getCostFromRl(BalancerRegionLoad rl) {<a name="line.1506"></a>
<span class="sourceLineNo">1507</span>      return rl.getStorefileSizeMB();<a name="line.1507"></a>
<span class="sourceLineNo">1508</span>    }<a name="line.1508"></a>
<span class="sourceLineNo">1509</span>  }<a name="line.1509"></a>
<span class="sourceLineNo">1510</span><a name="line.1510"></a>
<span class="sourceLineNo">1511</span>  /**<a name="line.1511"></a>
<span class="sourceLineNo">1512</span>   * A helper function to compose the attribute name from tablename and costfunction name<a name="line.1512"></a>
<span class="sourceLineNo">1513</span>   */<a name="line.1513"></a>
<span class="sourceLineNo">1514</span>  public static String composeAttributeName(String tableName, String costFunctionName) {<a name="line.1514"></a>
<span class="sourceLineNo">1515</span>    return tableName + TABLE_FUNCTION_SEP + costFunctionName;<a name="line.1515"></a>
<span class="sourceLineNo">1516</span>  }<a name="line.1516"></a>
<span class="sourceLineNo">1517</span>}<a name="line.1517"></a>




























































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