<!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;<a name="line.18"></a>
<span class="sourceLineNo">019</span><a name="line.19"></a>
<span class="sourceLineNo">020</span>import static org.apache.hadoop.hbase.HConstants.DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.HConstants.HBASE_MASTER_LOGCLEANER_PLUGINS;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.HConstants.HBASE_SPLIT_WAL_COORDINATED_BY_ZK;<a name="line.22"></a>
<span class="sourceLineNo">023</span><a name="line.23"></a>
<span class="sourceLineNo">024</span>import com.google.protobuf.Descriptors;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import com.google.protobuf.Service;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.io.InterruptedIOException;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.lang.reflect.Constructor;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.lang.reflect.InvocationTargetException;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.net.InetAddress;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import java.net.InetSocketAddress;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.net.UnknownHostException;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.util.ArrayList;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import java.util.Arrays;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.Collection;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import java.util.Collections;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import java.util.Comparator;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import java.util.EnumSet;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import java.util.HashMap;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import java.util.Iterator;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import java.util.List;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import java.util.Map;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import java.util.Map.Entry;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import java.util.Objects;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import java.util.Optional;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import java.util.Set;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import java.util.concurrent.ExecutionException;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import java.util.concurrent.Future;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import java.util.concurrent.TimeUnit;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import java.util.concurrent.TimeoutException;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.51"></a>
<span class="sourceLineNo">052</span>import java.util.function.Function;<a name="line.52"></a>
<span class="sourceLineNo">053</span>import java.util.regex.Pattern;<a name="line.53"></a>
<span class="sourceLineNo">054</span>import java.util.stream.Collectors;<a name="line.54"></a>
<span class="sourceLineNo">055</span>import javax.servlet.ServletException;<a name="line.55"></a>
<span class="sourceLineNo">056</span>import javax.servlet.http.HttpServlet;<a name="line.56"></a>
<span class="sourceLineNo">057</span>import javax.servlet.http.HttpServletRequest;<a name="line.57"></a>
<span class="sourceLineNo">058</span>import javax.servlet.http.HttpServletResponse;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import org.apache.commons.lang3.StringUtils;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import org.apache.hadoop.conf.Configuration;<a name="line.60"></a>
<span class="sourceLineNo">061</span>import org.apache.hadoop.fs.Path;<a name="line.61"></a>
<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ChoreService;<a name="line.62"></a>
<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ClusterId;<a name="line.63"></a>
<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.64"></a>
<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.65"></a>
<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.ClusterMetricsBuilder;<a name="line.66"></a>
<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.67"></a>
<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.68"></a>
<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.69"></a>
<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.HConstants;<a name="line.70"></a>
<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.InvalidFamilyOperationException;<a name="line.71"></a>
<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.72"></a>
<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.73"></a>
<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.74"></a>
<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.75"></a>
<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;<a name="line.76"></a>
<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ServerName;<a name="line.77"></a>
<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableName;<a name="line.78"></a>
<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.79"></a>
<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.80"></a>
<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.81"></a>
<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.82"></a>
<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.83"></a>
<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.84"></a>
<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.85"></a>
<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.86"></a>
<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.87"></a>
<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.88"></a>
<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.89"></a>
<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.90"></a>
<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.executor.ExecutorType;<a name="line.91"></a>
<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.favored.FavoredNodesManager;<a name="line.92"></a>
<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.favored.FavoredNodesPromoter;<a name="line.93"></a>
<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.http.InfoServer;<a name="line.94"></a>
<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.95"></a>
<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.96"></a>
<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.97"></a>
<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.98"></a>
<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.MasterRpcServices.BalanceSwitchMode;<a name="line.99"></a>
<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.master.assignment.AssignProcedure;<a name="line.100"></a>
<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.101"></a>
<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure;<a name="line.102"></a>
<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.assignment.MoveRegionProcedure;<a name="line.103"></a>
<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.assignment.RegionStateNode;<a name="line.104"></a>
<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.105"></a>
<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure;<a name="line.106"></a>
<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.master.assignment.UnassignProcedure;<a name="line.107"></a>
<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.master.balancer.BalancerChore;<a name="line.108"></a>
<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;<a name="line.109"></a>
<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.master.balancer.ClusterStatusChore;<a name="line.110"></a>
<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.111"></a>
<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.cleaner.CleanerChore;<a name="line.112"></a>
<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;<a name="line.113"></a>
<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.master.cleaner.LogCleaner;<a name="line.114"></a>
<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationBarrierCleaner;<a name="line.115"></a>
<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.cleaner.SnapshotCleanerChore;<a name="line.116"></a>
<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.locking.LockManager;<a name="line.117"></a>
<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.118"></a>
<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.119"></a>
<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizer;<a name="line.120"></a>
<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore;<a name="line.121"></a>
<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory;<a name="line.122"></a>
<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.master.procedure.CreateTableProcedure;<a name="line.123"></a>
<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure;<a name="line.124"></a>
<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure;<a name="line.125"></a>
<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.master.procedure.DisableTableProcedure;<a name="line.126"></a>
<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.master.procedure.EnableTableProcedure;<a name="line.127"></a>
<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.master.procedure.InitMetaProcedure;<a name="line.128"></a>
<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.129"></a>
<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.130"></a>
<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;<a name="line.131"></a>
<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil;<a name="line.132"></a>
<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.NonceProcedureRunnable;<a name="line.133"></a>
<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure;<a name="line.134"></a>
<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.135"></a>
<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.136"></a>
<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure;<a name="line.137"></a>
<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;<a name="line.138"></a>
<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure;<a name="line.139"></a>
<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure;<a name="line.140"></a>
<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.master.replication.AddPeerProcedure;<a name="line.141"></a>
<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.master.replication.DisablePeerProcedure;<a name="line.142"></a>
<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.master.replication.EnablePeerProcedure;<a name="line.143"></a>
<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.master.replication.RemovePeerProcedure;<a name="line.144"></a>
<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.master.replication.ReplicationPeerManager;<a name="line.145"></a>
<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.master.replication.SyncReplicationReplayWALManager;<a name="line.146"></a>
<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.master.replication.TransitPeerSyncReplicationStateProcedure;<a name="line.147"></a>
<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.master.replication.UpdatePeerConfigProcedure;<a name="line.148"></a>
<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;<a name="line.149"></a>
<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.master.zksyncer.MasterAddressSyncer;<a name="line.150"></a>
<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.master.zksyncer.MetaLocationSyncer;<a name="line.151"></a>
<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.mob.MobConstants;<a name="line.152"></a>
<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer;<a name="line.153"></a>
<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.154"></a>
<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.monitoring.TaskMonitor;<a name="line.155"></a>
<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost;<a name="line.156"></a>
<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager;<a name="line.157"></a>
<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.procedure2.LockedResource;<a name="line.158"></a>
<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.159"></a>
<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.160"></a>
<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.161"></a>
<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure;<a name="line.162"></a>
<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureException;<a name="line.163"></a>
<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureStoreListener;<a name="line.164"></a>
<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.165"></a>
<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.quotas.MasterQuotaManager;<a name="line.166"></a>
<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.quotas.MasterQuotasObserver;<a name="line.167"></a>
<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.quotas.QuotaObserverChore;<a name="line.168"></a>
<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.quotas.QuotaTableUtil;<a name="line.169"></a>
<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.170"></a>
<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.quotas.SnapshotQuotaObserverChore;<a name="line.171"></a>
<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;<a name="line.172"></a>
<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot.SpaceQuotaStatus;<a name="line.173"></a>
<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifier;<a name="line.174"></a>
<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory;<a name="line.175"></a>
<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.quotas.SpaceViolationPolicy;<a name="line.176"></a>
<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.177"></a>
<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.regionserver.RSRpcServices;<a name="line.178"></a>
<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.179"></a>
<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.replication.ReplicationLoadSource;<a name="line.180"></a>
<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.181"></a>
<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.182"></a>
<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.183"></a>
<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.184"></a>
<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.replication.master.ReplicationHFileCleaner;<a name="line.185"></a>
<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner;<a name="line.186"></a>
<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.replication.master.ReplicationPeerConfigUpgrader;<a name="line.187"></a>
<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.replication.regionserver.ReplicationStatus;<a name="line.188"></a>
<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.189"></a>
<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.security.SecurityConstants;<a name="line.190"></a>
<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.191"></a>
<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.192"></a>
<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.193"></a>
<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.194"></a>
<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.util.FutureUtils;<a name="line.195"></a>
<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.util.HBaseFsck;<a name="line.196"></a>
<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.util.HFileArchiveUtil;<a name="line.197"></a>
<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.198"></a>
<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.util.IdLock;<a name="line.199"></a>
<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.200"></a>
<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.201"></a>
<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.202"></a>
<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.util.RetryCounterFactory;<a name="line.203"></a>
<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.util.TableDescriptorChecker;<a name="line.204"></a>
<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.205"></a>
<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.206"></a>
<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker;<a name="line.207"></a>
<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;<a name="line.208"></a>
<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.zookeeper.RegionNormalizerTracker;<a name="line.209"></a>
<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.210"></a>
<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.211"></a>
<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.212"></a>
<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.213"></a>
<span class="sourceLineNo">214</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.214"></a>
<span class="sourceLineNo">215</span>import org.apache.zookeeper.KeeperException;<a name="line.215"></a>
<span class="sourceLineNo">216</span>import org.eclipse.jetty.server.Server;<a name="line.216"></a>
<span class="sourceLineNo">217</span>import org.eclipse.jetty.server.ServerConnector;<a name="line.217"></a>
<span class="sourceLineNo">218</span>import org.eclipse.jetty.servlet.ServletHolder;<a name="line.218"></a>
<span class="sourceLineNo">219</span>import org.eclipse.jetty.webapp.WebAppContext;<a name="line.219"></a>
<span class="sourceLineNo">220</span>import org.slf4j.Logger;<a name="line.220"></a>
<span class="sourceLineNo">221</span>import org.slf4j.LoggerFactory;<a name="line.221"></a>
<span class="sourceLineNo">222</span><a name="line.222"></a>
<span class="sourceLineNo">223</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.223"></a>
<span class="sourceLineNo">224</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableSet;<a name="line.224"></a>
<span class="sourceLineNo">225</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.225"></a>
<span class="sourceLineNo">226</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.226"></a>
<span class="sourceLineNo">227</span><a name="line.227"></a>
<span class="sourceLineNo">228</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.228"></a>
<span class="sourceLineNo">229</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.229"></a>
<span class="sourceLineNo">230</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.230"></a>
<span class="sourceLineNo">231</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.231"></a>
<span class="sourceLineNo">232</span><a name="line.232"></a>
<span class="sourceLineNo">233</span>/**<a name="line.233"></a>
<span class="sourceLineNo">234</span> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.234"></a>
<span class="sourceLineNo">235</span> * master.  If many masters are started, all compete.  Whichever wins goes on to<a name="line.235"></a>
<span class="sourceLineNo">236</span> * run the cluster.  All others park themselves in their constructor until<a name="line.236"></a>
<span class="sourceLineNo">237</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.237"></a>
<span class="sourceLineNo">238</span> * zookeeper.  Thereafter, all running master jostle to take over master role.<a name="line.238"></a>
<span class="sourceLineNo">239</span> *<a name="line.239"></a>
<span class="sourceLineNo">240</span> * &lt;p&gt;The Master can be asked shutdown the cluster. See {@link #shutdown()}.  In<a name="line.240"></a>
<span class="sourceLineNo">241</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.241"></a>
<span class="sourceLineNo">242</span> * all reporting in that they are down.  This master will then shut itself down.<a name="line.242"></a>
<span class="sourceLineNo">243</span> *<a name="line.243"></a>
<span class="sourceLineNo">244</span> * &lt;p&gt;You can also shutdown just this master.  Call {@link #stopMaster()}.<a name="line.244"></a>
<span class="sourceLineNo">245</span> *<a name="line.245"></a>
<span class="sourceLineNo">246</span> * @see org.apache.zookeeper.Watcher<a name="line.246"></a>
<span class="sourceLineNo">247</span> */<a name="line.247"></a>
<span class="sourceLineNo">248</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.248"></a>
<span class="sourceLineNo">249</span>@SuppressWarnings("deprecation")<a name="line.249"></a>
<span class="sourceLineNo">250</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.250"></a>
<span class="sourceLineNo">251</span>  private static Logger LOG = LoggerFactory.getLogger(HMaster.class);<a name="line.251"></a>
<span class="sourceLineNo">252</span><a name="line.252"></a>
<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
<span class="sourceLineNo">254</span>   * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.254"></a>
<span class="sourceLineNo">255</span>   * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.255"></a>
<span class="sourceLineNo">256</span>   */<a name="line.256"></a>
<span class="sourceLineNo">257</span>  private static class InitializationMonitor extends HasThread {<a name="line.257"></a>
<span class="sourceLineNo">258</span>    /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.258"></a>
<span class="sourceLineNo">259</span>    public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.259"></a>
<span class="sourceLineNo">260</span>    public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<a name="line.260"></a>
<span class="sourceLineNo">261</span><a name="line.261"></a>
<span class="sourceLineNo">262</span>    /**<a name="line.262"></a>
<span class="sourceLineNo">263</span>     * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.263"></a>
<span class="sourceLineNo">264</span>     * true, do nothing otherwise.<a name="line.264"></a>
<span class="sourceLineNo">265</span>     */<a name="line.265"></a>
<span class="sourceLineNo">266</span>    public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.266"></a>
<span class="sourceLineNo">267</span>    public static final boolean HALT_DEFAULT = false;<a name="line.267"></a>
<span class="sourceLineNo">268</span><a name="line.268"></a>
<span class="sourceLineNo">269</span>    private final HMaster master;<a name="line.269"></a>
<span class="sourceLineNo">270</span>    private final long timeout;<a name="line.270"></a>
<span class="sourceLineNo">271</span>    private final boolean haltOnTimeout;<a name="line.271"></a>
<span class="sourceLineNo">272</span><a name="line.272"></a>
<span class="sourceLineNo">273</span>    /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.273"></a>
<span class="sourceLineNo">274</span>    InitializationMonitor(HMaster master) {<a name="line.274"></a>
<span class="sourceLineNo">275</span>      super("MasterInitializationMonitor");<a name="line.275"></a>
<span class="sourceLineNo">276</span>      this.master = master;<a name="line.276"></a>
<span class="sourceLineNo">277</span>      this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.277"></a>
<span class="sourceLineNo">278</span>      this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.278"></a>
<span class="sourceLineNo">279</span>      this.setDaemon(true);<a name="line.279"></a>
<span class="sourceLineNo">280</span>    }<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
<span class="sourceLineNo">282</span>    @Override<a name="line.282"></a>
<span class="sourceLineNo">283</span>    public void run() {<a name="line.283"></a>
<span class="sourceLineNo">284</span>      try {<a name="line.284"></a>
<span class="sourceLineNo">285</span>        while (!master.isStopped() &amp;&amp; master.isActiveMaster()) {<a name="line.285"></a>
<span class="sourceLineNo">286</span>          Thread.sleep(timeout);<a name="line.286"></a>
<span class="sourceLineNo">287</span>          if (master.isInitialized()) {<a name="line.287"></a>
<span class="sourceLineNo">288</span>            LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.288"></a>
<span class="sourceLineNo">289</span>          } else {<a name="line.289"></a>
<span class="sourceLineNo">290</span>            LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.290"></a>
<span class="sourceLineNo">291</span>                + " consider submitting a bug report including a thread dump of this process.");<a name="line.291"></a>
<span class="sourceLineNo">292</span>            if (haltOnTimeout) {<a name="line.292"></a>
<span class="sourceLineNo">293</span>              LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.293"></a>
<span class="sourceLineNo">294</span>              Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.294"></a>
<span class="sourceLineNo">295</span>              System.exit(-1);<a name="line.295"></a>
<span class="sourceLineNo">296</span>            }<a name="line.296"></a>
<span class="sourceLineNo">297</span>          }<a name="line.297"></a>
<span class="sourceLineNo">298</span>        }<a name="line.298"></a>
<span class="sourceLineNo">299</span>      } catch (InterruptedException ie) {<a name="line.299"></a>
<span class="sourceLineNo">300</span>        LOG.trace("InitMonitor thread interrupted. Existing.");<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><a name="line.304"></a>
<span class="sourceLineNo">305</span>  // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.305"></a>
<span class="sourceLineNo">306</span>  //instance into web context.<a name="line.306"></a>
<span class="sourceLineNo">307</span>  public static final String MASTER = "master";<a name="line.307"></a>
<span class="sourceLineNo">308</span><a name="line.308"></a>
<span class="sourceLineNo">309</span>  // Manager and zk listener for master election<a name="line.309"></a>
<span class="sourceLineNo">310</span>  private final ActiveMasterManager activeMasterManager;<a name="line.310"></a>
<span class="sourceLineNo">311</span>  // Region server tracker<a name="line.311"></a>
<span class="sourceLineNo">312</span>  private RegionServerTracker regionServerTracker;<a name="line.312"></a>
<span class="sourceLineNo">313</span>  // Draining region server tracker<a name="line.313"></a>
<span class="sourceLineNo">314</span>  private DrainingServerTracker drainingServerTracker;<a name="line.314"></a>
<span class="sourceLineNo">315</span>  // Tracker for load balancer state<a name="line.315"></a>
<span class="sourceLineNo">316</span>  LoadBalancerTracker loadBalancerTracker;<a name="line.316"></a>
<span class="sourceLineNo">317</span>  // Tracker for meta location, if any client ZK quorum specified<a name="line.317"></a>
<span class="sourceLineNo">318</span>  MetaLocationSyncer metaLocationSyncer;<a name="line.318"></a>
<span class="sourceLineNo">319</span>  // Tracker for active master location, if any client ZK quorum specified<a name="line.319"></a>
<span class="sourceLineNo">320</span>  MasterAddressSyncer masterAddressSyncer;<a name="line.320"></a>
<span class="sourceLineNo">321</span><a name="line.321"></a>
<span class="sourceLineNo">322</span>  // Tracker for split and merge state<a name="line.322"></a>
<span class="sourceLineNo">323</span>  private SplitOrMergeTracker splitOrMergeTracker;<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
<span class="sourceLineNo">325</span>  // Tracker for region normalizer state<a name="line.325"></a>
<span class="sourceLineNo">326</span>  private RegionNormalizerTracker regionNormalizerTracker;<a name="line.326"></a>
<span class="sourceLineNo">327</span><a name="line.327"></a>
<span class="sourceLineNo">328</span>  private ClusterSchemaService clusterSchemaService;<a name="line.328"></a>
<span class="sourceLineNo">329</span><a name="line.329"></a>
<span class="sourceLineNo">330</span>  public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.330"></a>
<span class="sourceLineNo">331</span>    "hbase.master.wait.on.service.seconds";<a name="line.331"></a>
<span class="sourceLineNo">332</span>  public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.332"></a>
<span class="sourceLineNo">333</span><a name="line.333"></a>
<span class="sourceLineNo">334</span>  // Metrics for the HMaster<a name="line.334"></a>
<span class="sourceLineNo">335</span>  final MetricsMaster metricsMaster;<a name="line.335"></a>
<span class="sourceLineNo">336</span>  // file system manager for the master FS operations<a name="line.336"></a>
<span class="sourceLineNo">337</span>  private MasterFileSystem fileSystemManager;<a name="line.337"></a>
<span class="sourceLineNo">338</span>  private MasterWalManager walManager;<a name="line.338"></a>
<span class="sourceLineNo">339</span><a name="line.339"></a>
<span class="sourceLineNo">340</span>  // manager to manage procedure-based WAL splitting, can be null if current<a name="line.340"></a>
<span class="sourceLineNo">341</span>  // is zk-based WAL splitting. SplitWALManager will replace SplitLogManager<a name="line.341"></a>
<span class="sourceLineNo">342</span>  // and MasterWalManager, which means zk-based WAL splitting code will be<a name="line.342"></a>
<span class="sourceLineNo">343</span>  // useless after we switch to the procedure-based one. our eventual goal<a name="line.343"></a>
<span class="sourceLineNo">344</span>  // is to remove all the zk-based WAL splitting code.<a name="line.344"></a>
<span class="sourceLineNo">345</span>  private SplitWALManager splitWALManager;<a name="line.345"></a>
<span class="sourceLineNo">346</span><a name="line.346"></a>
<span class="sourceLineNo">347</span>  // server manager to deal with region server info<a name="line.347"></a>
<span class="sourceLineNo">348</span>  private volatile ServerManager serverManager;<a name="line.348"></a>
<span class="sourceLineNo">349</span><a name="line.349"></a>
<span class="sourceLineNo">350</span>  // manager of assignment nodes in zookeeper<a name="line.350"></a>
<span class="sourceLineNo">351</span>  private AssignmentManager assignmentManager;<a name="line.351"></a>
<span class="sourceLineNo">352</span><a name="line.352"></a>
<span class="sourceLineNo">353</span>  // manager of replication<a name="line.353"></a>
<span class="sourceLineNo">354</span>  private ReplicationPeerManager replicationPeerManager;<a name="line.354"></a>
<span class="sourceLineNo">355</span><a name="line.355"></a>
<span class="sourceLineNo">356</span>  private SyncReplicationReplayWALManager syncReplicationReplayWALManager;<a name="line.356"></a>
<span class="sourceLineNo">357</span><a name="line.357"></a>
<span class="sourceLineNo">358</span>  // buffer for "fatal error" notices from region servers<a name="line.358"></a>
<span class="sourceLineNo">359</span>  // in the cluster. This is only used for assisting<a name="line.359"></a>
<span class="sourceLineNo">360</span>  // operations/debugging.<a name="line.360"></a>
<span class="sourceLineNo">361</span>  MemoryBoundedLogMessageBuffer rsFatals;<a name="line.361"></a>
<span class="sourceLineNo">362</span><a name="line.362"></a>
<span class="sourceLineNo">363</span>  // flag set after we become the active master (used for testing)<a name="line.363"></a>
<span class="sourceLineNo">364</span>  private volatile boolean activeMaster = false;<a name="line.364"></a>
<span class="sourceLineNo">365</span><a name="line.365"></a>
<span class="sourceLineNo">366</span>  // flag set after we complete initialization once active<a name="line.366"></a>
<span class="sourceLineNo">367</span>  private final ProcedureEvent&lt;?&gt; initialized = new ProcedureEvent&lt;&gt;("master initialized");<a name="line.367"></a>
<span class="sourceLineNo">368</span><a name="line.368"></a>
<span class="sourceLineNo">369</span>  // flag set after master services are started,<a name="line.369"></a>
<span class="sourceLineNo">370</span>  // initialization may have not completed yet.<a name="line.370"></a>
<span class="sourceLineNo">371</span>  volatile boolean serviceStarted = false;<a name="line.371"></a>
<span class="sourceLineNo">372</span><a name="line.372"></a>
<span class="sourceLineNo">373</span>  // Maximum time we should run balancer for<a name="line.373"></a>
<span class="sourceLineNo">374</span>  private final int maxBlancingTime;<a name="line.374"></a>
<span class="sourceLineNo">375</span>  // Maximum percent of regions in transition when balancing<a name="line.375"></a>
<span class="sourceLineNo">376</span>  private final double maxRitPercent;<a name="line.376"></a>
<span class="sourceLineNo">377</span><a name="line.377"></a>
<span class="sourceLineNo">378</span>  private final LockManager lockManager = new LockManager(this);<a name="line.378"></a>
<span class="sourceLineNo">379</span><a name="line.379"></a>
<span class="sourceLineNo">380</span>  private LoadBalancer balancer;<a name="line.380"></a>
<span class="sourceLineNo">381</span>  private RegionNormalizer normalizer;<a name="line.381"></a>
<span class="sourceLineNo">382</span>  private BalancerChore balancerChore;<a name="line.382"></a>
<span class="sourceLineNo">383</span>  private RegionNormalizerChore normalizerChore;<a name="line.383"></a>
<span class="sourceLineNo">384</span>  private ClusterStatusChore clusterStatusChore;<a name="line.384"></a>
<span class="sourceLineNo">385</span>  private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.385"></a>
<span class="sourceLineNo">386</span>  private SnapshotCleanerChore snapshotCleanerChore = null;<a name="line.386"></a>
<span class="sourceLineNo">387</span><a name="line.387"></a>
<span class="sourceLineNo">388</span>  private HbckChore hbckChore;<a name="line.388"></a>
<span class="sourceLineNo">389</span>  CatalogJanitor catalogJanitorChore;<a name="line.389"></a>
<span class="sourceLineNo">390</span>  private LogCleaner logCleaner;<a name="line.390"></a>
<span class="sourceLineNo">391</span>  private HFileCleaner hfileCleaner;<a name="line.391"></a>
<span class="sourceLineNo">392</span>  private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.392"></a>
<span class="sourceLineNo">393</span>  private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.393"></a>
<span class="sourceLineNo">394</span>  private MobCompactionChore mobCompactChore;<a name="line.394"></a>
<span class="sourceLineNo">395</span>  private MasterMobCompactionThread mobCompactThread;<a name="line.395"></a>
<span class="sourceLineNo">396</span>  // used to synchronize the mobCompactionStates<a name="line.396"></a>
<span class="sourceLineNo">397</span>  private final IdLock mobCompactionLock = new IdLock();<a name="line.397"></a>
<span class="sourceLineNo">398</span>  // save the information of mob compactions in tables.<a name="line.398"></a>
<span class="sourceLineNo">399</span>  // the key is table name, the value is the number of compactions in that table.<a name="line.399"></a>
<span class="sourceLineNo">400</span>  private Map&lt;TableName, AtomicInteger&gt; mobCompactionStates = Maps.newConcurrentMap();<a name="line.400"></a>
<span class="sourceLineNo">401</span><a name="line.401"></a>
<span class="sourceLineNo">402</span>  MasterCoprocessorHost cpHost;<a name="line.402"></a>
<span class="sourceLineNo">403</span><a name="line.403"></a>
<span class="sourceLineNo">404</span>  private final boolean preLoadTableDescriptors;<a name="line.404"></a>
<span class="sourceLineNo">405</span><a name="line.405"></a>
<span class="sourceLineNo">406</span>  // Time stamps for when a hmaster became active<a name="line.406"></a>
<span class="sourceLineNo">407</span>  private long masterActiveTime;<a name="line.407"></a>
<span class="sourceLineNo">408</span><a name="line.408"></a>
<span class="sourceLineNo">409</span>  // Time stamp for when HMaster finishes becoming Active Master<a name="line.409"></a>
<span class="sourceLineNo">410</span>  private long masterFinishedInitializationTime;<a name="line.410"></a>
<span class="sourceLineNo">411</span><a name="line.411"></a>
<span class="sourceLineNo">412</span>  Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.412"></a>
<span class="sourceLineNo">413</span><a name="line.413"></a>
<span class="sourceLineNo">414</span>  // monitor for snapshot of hbase tables<a name="line.414"></a>
<span class="sourceLineNo">415</span>  SnapshotManager snapshotManager;<a name="line.415"></a>
<span class="sourceLineNo">416</span>  // monitor for distributed procedures<a name="line.416"></a>
<span class="sourceLineNo">417</span>  private MasterProcedureManagerHost mpmHost;<a name="line.417"></a>
<span class="sourceLineNo">418</span><a name="line.418"></a>
<span class="sourceLineNo">419</span>  // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.419"></a>
<span class="sourceLineNo">420</span>  private volatile MasterQuotaManager quotaManager;<a name="line.420"></a>
<span class="sourceLineNo">421</span>  private SpaceQuotaSnapshotNotifier spaceQuotaSnapshotNotifier;<a name="line.421"></a>
<span class="sourceLineNo">422</span>  private QuotaObserverChore quotaObserverChore;<a name="line.422"></a>
<span class="sourceLineNo">423</span>  private SnapshotQuotaObserverChore snapshotQuotaChore;<a name="line.423"></a>
<span class="sourceLineNo">424</span><a name="line.424"></a>
<span class="sourceLineNo">425</span>  private ProcedureExecutor&lt;MasterProcedureEnv&gt; procedureExecutor;<a name="line.425"></a>
<span class="sourceLineNo">426</span>  private WALProcedureStore procedureStore;<a name="line.426"></a>
<span class="sourceLineNo">427</span><a name="line.427"></a>
<span class="sourceLineNo">428</span>  // handle table states<a name="line.428"></a>
<span class="sourceLineNo">429</span>  private TableStateManager tableStateManager;<a name="line.429"></a>
<span class="sourceLineNo">430</span><a name="line.430"></a>
<span class="sourceLineNo">431</span>  private long splitPlanCount;<a name="line.431"></a>
<span class="sourceLineNo">432</span>  private long mergePlanCount;<a name="line.432"></a>
<span class="sourceLineNo">433</span><a name="line.433"></a>
<span class="sourceLineNo">434</span>  /* Handle favored nodes information */<a name="line.434"></a>
<span class="sourceLineNo">435</span>  private FavoredNodesManager favoredNodesManager;<a name="line.435"></a>
<span class="sourceLineNo">436</span><a name="line.436"></a>
<span class="sourceLineNo">437</span>  /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.437"></a>
<span class="sourceLineNo">438</span>  private Server masterJettyServer;<a name="line.438"></a>
<span class="sourceLineNo">439</span><a name="line.439"></a>
<span class="sourceLineNo">440</span>  // Determine if we should do normal startup or minimal "single-user" mode with no region<a name="line.440"></a>
<span class="sourceLineNo">441</span>  // servers and no user tables. Useful for repair and recovery of hbase:meta<a name="line.441"></a>
<span class="sourceLineNo">442</span>  private final boolean maintenanceMode;<a name="line.442"></a>
<span class="sourceLineNo">443</span>  static final String MAINTENANCE_MODE = "hbase.master.maintenance_mode";<a name="line.443"></a>
<span class="sourceLineNo">444</span><a name="line.444"></a>
<span class="sourceLineNo">445</span>  public static class RedirectServlet extends HttpServlet {<a name="line.445"></a>
<span class="sourceLineNo">446</span>    private static final long serialVersionUID = 2894774810058302473L;<a name="line.446"></a>
<span class="sourceLineNo">447</span>    private final int regionServerInfoPort;<a name="line.447"></a>
<span class="sourceLineNo">448</span>    private final String regionServerHostname;<a name="line.448"></a>
<span class="sourceLineNo">449</span><a name="line.449"></a>
<span class="sourceLineNo">450</span>    /**<a name="line.450"></a>
<span class="sourceLineNo">451</span>     * @param infoServer that we're trying to send all requests to<a name="line.451"></a>
<span class="sourceLineNo">452</span>     * @param hostname may be null. if given, will be used for redirects instead of host from client.<a name="line.452"></a>
<span class="sourceLineNo">453</span>     */<a name="line.453"></a>
<span class="sourceLineNo">454</span>    public RedirectServlet(InfoServer infoServer, String hostname) {<a name="line.454"></a>
<span class="sourceLineNo">455</span>       regionServerInfoPort = infoServer.getPort();<a name="line.455"></a>
<span class="sourceLineNo">456</span>       regionServerHostname = hostname;<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>    @Override<a name="line.459"></a>
<span class="sourceLineNo">460</span>    public void doGet(HttpServletRequest request,<a name="line.460"></a>
<span class="sourceLineNo">461</span>        HttpServletResponse response) throws ServletException, IOException {<a name="line.461"></a>
<span class="sourceLineNo">462</span>      String redirectHost = regionServerHostname;<a name="line.462"></a>
<span class="sourceLineNo">463</span>      if(redirectHost == null) {<a name="line.463"></a>
<span class="sourceLineNo">464</span>        redirectHost = request.getServerName();<a name="line.464"></a>
<span class="sourceLineNo">465</span>        if(!Addressing.isLocalAddress(InetAddress.getByName(redirectHost))) {<a name="line.465"></a>
<span class="sourceLineNo">466</span>          LOG.warn("Couldn't resolve '" + redirectHost + "' as an address local to this node and '" +<a name="line.466"></a>
<span class="sourceLineNo">467</span>              MASTER_HOSTNAME_KEY + "' is not set; client will get a HTTP 400 response. If " +<a name="line.467"></a>
<span class="sourceLineNo">468</span>              "your HBase deployment relies on client accessible names that the region server process " +<a name="line.468"></a>
<span class="sourceLineNo">469</span>              "can't resolve locally, then you should set the previously mentioned configuration variable " +<a name="line.469"></a>
<span class="sourceLineNo">470</span>              "to an appropriate hostname.");<a name="line.470"></a>
<span class="sourceLineNo">471</span>          // no sending client provided input back to the client, so the goal host is just in the logs.<a name="line.471"></a>
<span class="sourceLineNo">472</span>          response.sendError(400, "Request was to a host that I can't resolve for any of the network interfaces on " +<a name="line.472"></a>
<span class="sourceLineNo">473</span>              "this node. If this is due to an intermediary such as an HTTP load balancer or other proxy, your HBase " +<a name="line.473"></a>
<span class="sourceLineNo">474</span>              "administrator can set '" + MASTER_HOSTNAME_KEY + "' to point to the correct hostname.");<a name="line.474"></a>
<span class="sourceLineNo">475</span>          return;<a name="line.475"></a>
<span class="sourceLineNo">476</span>        }<a name="line.476"></a>
<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
<span class="sourceLineNo">478</span>      // TODO this scheme should come from looking at the scheme registered in the infoserver's http server for the<a name="line.478"></a>
<span class="sourceLineNo">479</span>      // host and port we're using, but it's buried way too deep to do that ATM.<a name="line.479"></a>
<span class="sourceLineNo">480</span>      String redirectUrl = request.getScheme() + "://"<a name="line.480"></a>
<span class="sourceLineNo">481</span>        + redirectHost + ":" + regionServerInfoPort<a name="line.481"></a>
<span class="sourceLineNo">482</span>        + request.getRequestURI();<a name="line.482"></a>
<span class="sourceLineNo">483</span>      response.sendRedirect(redirectUrl);<a name="line.483"></a>
<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
<span class="sourceLineNo">485</span>  }<a name="line.485"></a>
<span class="sourceLineNo">486</span><a name="line.486"></a>
<span class="sourceLineNo">487</span>  /**<a name="line.487"></a>
<span class="sourceLineNo">488</span>   * Initializes the HMaster. The steps are as follows:<a name="line.488"></a>
<span class="sourceLineNo">489</span>   * &lt;p&gt;<a name="line.489"></a>
<span class="sourceLineNo">490</span>   * &lt;ol&gt;<a name="line.490"></a>
<span class="sourceLineNo">491</span>   * &lt;li&gt;Initialize the local HRegionServer<a name="line.491"></a>
<span class="sourceLineNo">492</span>   * &lt;li&gt;Start the ActiveMasterManager.<a name="line.492"></a>
<span class="sourceLineNo">493</span>   * &lt;/ol&gt;<a name="line.493"></a>
<span class="sourceLineNo">494</span>   * &lt;p&gt;<a name="line.494"></a>
<span class="sourceLineNo">495</span>   * Remaining steps of initialization occur in<a name="line.495"></a>
<span class="sourceLineNo">496</span>   * #finishActiveMasterInitialization(MonitoredTask) after<a name="line.496"></a>
<span class="sourceLineNo">497</span>   * the master becomes the active one.<a name="line.497"></a>
<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
<span class="sourceLineNo">499</span>  public HMaster(final Configuration conf)<a name="line.499"></a>
<span class="sourceLineNo">500</span>      throws IOException, KeeperException {<a name="line.500"></a>
<span class="sourceLineNo">501</span>    super(conf);<a name="line.501"></a>
<span class="sourceLineNo">502</span>    TraceUtil.initTracer(conf);<a name="line.502"></a>
<span class="sourceLineNo">503</span>    try {<a name="line.503"></a>
<span class="sourceLineNo">504</span>      if (conf.getBoolean(MAINTENANCE_MODE, false)) {<a name="line.504"></a>
<span class="sourceLineNo">505</span>        LOG.info("Detected {}=true via configuration.", MAINTENANCE_MODE);<a name="line.505"></a>
<span class="sourceLineNo">506</span>        maintenanceMode = true;<a name="line.506"></a>
<span class="sourceLineNo">507</span>      } else if (Boolean.getBoolean(MAINTENANCE_MODE)) {<a name="line.507"></a>
<span class="sourceLineNo">508</span>        LOG.info("Detected {}=true via environment variables.", MAINTENANCE_MODE);<a name="line.508"></a>
<span class="sourceLineNo">509</span>        maintenanceMode = true;<a name="line.509"></a>
<span class="sourceLineNo">510</span>      } else {<a name="line.510"></a>
<span class="sourceLineNo">511</span>        maintenanceMode = false;<a name="line.511"></a>
<span class="sourceLineNo">512</span>      }<a name="line.512"></a>
<span class="sourceLineNo">513</span><a name="line.513"></a>
<span class="sourceLineNo">514</span>      this.rsFatals = new MemoryBoundedLogMessageBuffer(<a name="line.514"></a>
<span class="sourceLineNo">515</span>          conf.getLong("hbase.master.buffer.for.rs.fatals", 1 * 1024 * 1024));<a name="line.515"></a>
<span class="sourceLineNo">516</span>      LOG.info("hbase.rootdir=" + getRootDir() +<a name="line.516"></a>
<span class="sourceLineNo">517</span>          ", hbase.cluster.distributed=" + this.conf.getBoolean(HConstants.CLUSTER_DISTRIBUTED, false));<a name="line.517"></a>
<span class="sourceLineNo">518</span><a name="line.518"></a>
<span class="sourceLineNo">519</span>      // Disable usage of meta replicas in the master<a name="line.519"></a>
<span class="sourceLineNo">520</span>      this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.520"></a>
<span class="sourceLineNo">521</span><a name="line.521"></a>
<span class="sourceLineNo">522</span>      decorateMasterConfiguration(this.conf);<a name="line.522"></a>
<span class="sourceLineNo">523</span><a name="line.523"></a>
<span class="sourceLineNo">524</span>      // Hack! Maps DFSClient =&gt; Master for logs.  HDFS made this<a name="line.524"></a>
<span class="sourceLineNo">525</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.525"></a>
<span class="sourceLineNo">526</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.526"></a>
<span class="sourceLineNo">527</span>        this.conf.set("mapreduce.task.attempt.id", "hb_m_" + this.serverName.toString());<a name="line.527"></a>
<span class="sourceLineNo">528</span>      }<a name="line.528"></a>
<span class="sourceLineNo">529</span><a name="line.529"></a>
<span class="sourceLineNo">530</span>      this.metricsMaster = new MetricsMaster(new MetricsMasterWrapperImpl(this));<a name="line.530"></a>
<span class="sourceLineNo">531</span><a name="line.531"></a>
<span class="sourceLineNo">532</span>      // preload table descriptor at startup<a name="line.532"></a>
<span class="sourceLineNo">533</span>      this.preLoadTableDescriptors = conf.getBoolean("hbase.master.preload.tabledescriptors", true);<a name="line.533"></a>
<span class="sourceLineNo">534</span><a name="line.534"></a>
<span class="sourceLineNo">535</span>      this.maxBlancingTime = getMaxBalancingTime();<a name="line.535"></a>
<span class="sourceLineNo">536</span>      this.maxRitPercent = conf.getDouble(HConstants.HBASE_MASTER_BALANCER_MAX_RIT_PERCENT,<a name="line.536"></a>
<span class="sourceLineNo">537</span>          HConstants.DEFAULT_HBASE_MASTER_BALANCER_MAX_RIT_PERCENT);<a name="line.537"></a>
<span class="sourceLineNo">538</span><a name="line.538"></a>
<span class="sourceLineNo">539</span>      // Do we publish the status?<a name="line.539"></a>
<span class="sourceLineNo">540</span><a name="line.540"></a>
<span class="sourceLineNo">541</span>      boolean shouldPublish = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.541"></a>
<span class="sourceLineNo">542</span>          HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.542"></a>
<span class="sourceLineNo">543</span>      Class&lt;? extends ClusterStatusPublisher.Publisher&gt; publisherClass =<a name="line.543"></a>
<span class="sourceLineNo">544</span>          conf.getClass(ClusterStatusPublisher.STATUS_PUBLISHER_CLASS,<a name="line.544"></a>
<span class="sourceLineNo">545</span>              ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS,<a name="line.545"></a>
<span class="sourceLineNo">546</span>              ClusterStatusPublisher.Publisher.class);<a name="line.546"></a>
<span class="sourceLineNo">547</span><a name="line.547"></a>
<span class="sourceLineNo">548</span>      if (shouldPublish) {<a name="line.548"></a>
<span class="sourceLineNo">549</span>        if (publisherClass == null) {<a name="line.549"></a>
<span class="sourceLineNo">550</span>          LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.550"></a>
<span class="sourceLineNo">551</span>              ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS +<a name="line.551"></a>
<span class="sourceLineNo">552</span>              " is not set - not publishing status");<a name="line.552"></a>
<span class="sourceLineNo">553</span>        } else {<a name="line.553"></a>
<span class="sourceLineNo">554</span>          clusterStatusPublisherChore = new ClusterStatusPublisher(this, conf, publisherClass);<a name="line.554"></a>
<span class="sourceLineNo">555</span>          getChoreService().scheduleChore(clusterStatusPublisherChore);<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><a name="line.558"></a>
<span class="sourceLineNo">559</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.559"></a>
<span class="sourceLineNo">560</span>      if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.560"></a>
<span class="sourceLineNo">561</span>        this.activeMasterManager = new ActiveMasterManager(zooKeeper, this.serverName, this);<a name="line.561"></a>
<span class="sourceLineNo">562</span>      } else {<a name="line.562"></a>
<span class="sourceLineNo">563</span>        this.activeMasterManager = null;<a name="line.563"></a>
<span class="sourceLineNo">564</span>      }<a name="line.564"></a>
<span class="sourceLineNo">565</span>    } catch (Throwable t) {<a name="line.565"></a>
<span class="sourceLineNo">566</span>      // Make sure we log the exception. HMaster is often started via reflection and the<a name="line.566"></a>
<span class="sourceLineNo">567</span>      // cause of failed startup is lost.<a name="line.567"></a>
<span class="sourceLineNo">568</span>      LOG.error("Failed construction of Master", t);<a name="line.568"></a>
<span class="sourceLineNo">569</span>      throw t;<a name="line.569"></a>
<span class="sourceLineNo">570</span>    }<a name="line.570"></a>
<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
<span class="sourceLineNo">572</span><a name="line.572"></a>
<span class="sourceLineNo">573</span>  @Override<a name="line.573"></a>
<span class="sourceLineNo">574</span>  protected String getUseThisHostnameInstead(Configuration conf) {<a name="line.574"></a>
<span class="sourceLineNo">575</span>    return conf.get(MASTER_HOSTNAME_KEY);<a name="line.575"></a>
<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
<span class="sourceLineNo">577</span><a name="line.577"></a>
<span class="sourceLineNo">578</span>  // Main run loop. Calls through to the regionserver run loop AFTER becoming active Master; will<a name="line.578"></a>
<span class="sourceLineNo">579</span>  // block in here until then.<a name="line.579"></a>
<span class="sourceLineNo">580</span>  @Override<a name="line.580"></a>
<span class="sourceLineNo">581</span>  public void run() {<a name="line.581"></a>
<span class="sourceLineNo">582</span>    try {<a name="line.582"></a>
<span class="sourceLineNo">583</span>      if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.583"></a>
<span class="sourceLineNo">584</span>        Threads.setDaemonThreadRunning(new Thread(() -&gt; {<a name="line.584"></a>
<span class="sourceLineNo">585</span>          try {<a name="line.585"></a>
<span class="sourceLineNo">586</span>            int infoPort = putUpJettyServer();<a name="line.586"></a>
<span class="sourceLineNo">587</span>            startActiveMasterManager(infoPort);<a name="line.587"></a>
<span class="sourceLineNo">588</span>          } catch (Throwable t) {<a name="line.588"></a>
<span class="sourceLineNo">589</span>            // Make sure we log the exception.<a name="line.589"></a>
<span class="sourceLineNo">590</span>            String error = "Failed to become Active Master";<a name="line.590"></a>
<span class="sourceLineNo">591</span>            LOG.error(error, t);<a name="line.591"></a>
<span class="sourceLineNo">592</span>            // Abort should have been called already.<a name="line.592"></a>
<span class="sourceLineNo">593</span>            if (!isAborted()) {<a name="line.593"></a>
<span class="sourceLineNo">594</span>              abort(error, t);<a name="line.594"></a>
<span class="sourceLineNo">595</span>            }<a name="line.595"></a>
<span class="sourceLineNo">596</span>          }<a name="line.596"></a>
<span class="sourceLineNo">597</span>        }), getName() + ":becomeActiveMaster");<a name="line.597"></a>
<span class="sourceLineNo">598</span>      }<a name="line.598"></a>
<span class="sourceLineNo">599</span>      // Fall in here even if we have been aborted. Need to run the shutdown services and<a name="line.599"></a>
<span class="sourceLineNo">600</span>      // the super run call will do this for us.<a name="line.600"></a>
<span class="sourceLineNo">601</span>      super.run();<a name="line.601"></a>
<span class="sourceLineNo">602</span>    } finally {<a name="line.602"></a>
<span class="sourceLineNo">603</span>      if (this.clusterSchemaService != null) {<a name="line.603"></a>
<span class="sourceLineNo">604</span>        // If on way out, then we are no longer active master.<a name="line.604"></a>
<span class="sourceLineNo">605</span>        this.clusterSchemaService.stopAsync();<a name="line.605"></a>
<span class="sourceLineNo">606</span>        try {<a name="line.606"></a>
<span class="sourceLineNo">607</span>          this.clusterSchemaService.awaitTerminated(<a name="line.607"></a>
<span class="sourceLineNo">608</span>              getConfiguration().getInt(HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS,<a name="line.608"></a>
<span class="sourceLineNo">609</span>              DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS), TimeUnit.SECONDS);<a name="line.609"></a>
<span class="sourceLineNo">610</span>        } catch (TimeoutException te) {<a name="line.610"></a>
<span class="sourceLineNo">611</span>          LOG.warn("Failed shutdown of clusterSchemaService", te);<a name="line.611"></a>
<span class="sourceLineNo">612</span>        }<a name="line.612"></a>
<span class="sourceLineNo">613</span>      }<a name="line.613"></a>
<span class="sourceLineNo">614</span>      this.activeMaster = false;<a name="line.614"></a>
<span class="sourceLineNo">615</span>    }<a name="line.615"></a>
<span class="sourceLineNo">616</span>  }<a name="line.616"></a>
<span class="sourceLineNo">617</span><a name="line.617"></a>
<span class="sourceLineNo">618</span>  // return the actual infoPort, -1 means disable info server.<a name="line.618"></a>
<span class="sourceLineNo">619</span>  private int putUpJettyServer() throws IOException {<a name="line.619"></a>
<span class="sourceLineNo">620</span>    if (!conf.getBoolean("hbase.master.infoserver.redirect", true)) {<a name="line.620"></a>
<span class="sourceLineNo">621</span>      return -1;<a name="line.621"></a>
<span class="sourceLineNo">622</span>    }<a name="line.622"></a>
<span class="sourceLineNo">623</span>    final int infoPort = conf.getInt("hbase.master.info.port.orig",<a name="line.623"></a>
<span class="sourceLineNo">624</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.624"></a>
<span class="sourceLineNo">625</span>    // -1 is for disabling info server, so no redirecting<a name="line.625"></a>
<span class="sourceLineNo">626</span>    if (infoPort &lt; 0 || infoServer == null) {<a name="line.626"></a>
<span class="sourceLineNo">627</span>      return -1;<a name="line.627"></a>
<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
<span class="sourceLineNo">629</span>    if(infoPort == infoServer.getPort()) {<a name="line.629"></a>
<span class="sourceLineNo">630</span>      return infoPort;<a name="line.630"></a>
<span class="sourceLineNo">631</span>    }<a name="line.631"></a>
<span class="sourceLineNo">632</span>    final String addr = conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.632"></a>
<span class="sourceLineNo">633</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.633"></a>
<span class="sourceLineNo">634</span>      String msg =<a name="line.634"></a>
<span class="sourceLineNo">635</span>          "Failed to start redirecting jetty server. Address " + addr<a name="line.635"></a>
<span class="sourceLineNo">636</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.636"></a>
<span class="sourceLineNo">637</span>              + "hbase.master.info.bindAddress";<a name="line.637"></a>
<span class="sourceLineNo">638</span>      LOG.error(msg);<a name="line.638"></a>
<span class="sourceLineNo">639</span>      throw new IOException(msg);<a name="line.639"></a>
<span class="sourceLineNo">640</span>    }<a name="line.640"></a>
<span class="sourceLineNo">641</span><a name="line.641"></a>
<span class="sourceLineNo">642</span>    // TODO I'm pretty sure we could just add another binding to the InfoServer run by<a name="line.642"></a>
<span class="sourceLineNo">643</span>    // the RegionServer and have it run the RedirectServlet instead of standing up<a name="line.643"></a>
<span class="sourceLineNo">644</span>    // a second entire stack here.<a name="line.644"></a>
<span class="sourceLineNo">645</span>    masterJettyServer = new Server();<a name="line.645"></a>
<span class="sourceLineNo">646</span>    final ServerConnector connector = new ServerConnector(masterJettyServer);<a name="line.646"></a>
<span class="sourceLineNo">647</span>    connector.setHost(addr);<a name="line.647"></a>
<span class="sourceLineNo">648</span>    connector.setPort(infoPort);<a name="line.648"></a>
<span class="sourceLineNo">649</span>    masterJettyServer.addConnector(connector);<a name="line.649"></a>
<span class="sourceLineNo">650</span>    masterJettyServer.setStopAtShutdown(true);<a name="line.650"></a>
<span class="sourceLineNo">651</span><a name="line.651"></a>
<span class="sourceLineNo">652</span>    final String redirectHostname =<a name="line.652"></a>
<span class="sourceLineNo">653</span>        StringUtils.isBlank(useThisHostnameInstead) ? null : useThisHostnameInstead;<a name="line.653"></a>
<span class="sourceLineNo">654</span><a name="line.654"></a>
<span class="sourceLineNo">655</span>    final RedirectServlet redirect = new RedirectServlet(infoServer, redirectHostname);<a name="line.655"></a>
<span class="sourceLineNo">656</span>    final WebAppContext context = new WebAppContext(null, "/", null, null, null, null, WebAppContext.NO_SESSIONS);<a name="line.656"></a>
<span class="sourceLineNo">657</span>    context.addServlet(new ServletHolder(redirect), "/*");<a name="line.657"></a>
<span class="sourceLineNo">658</span>    context.setServer(masterJettyServer);<a name="line.658"></a>
<span class="sourceLineNo">659</span><a name="line.659"></a>
<span class="sourceLineNo">660</span>    try {<a name="line.660"></a>
<span class="sourceLineNo">661</span>      masterJettyServer.start();<a name="line.661"></a>
<span class="sourceLineNo">662</span>    } catch (Exception e) {<a name="line.662"></a>
<span class="sourceLineNo">663</span>      throw new IOException("Failed to start redirecting jetty server", e);<a name="line.663"></a>
<span class="sourceLineNo">664</span>    }<a name="line.664"></a>
<span class="sourceLineNo">665</span>    return connector.getLocalPort();<a name="line.665"></a>
<span class="sourceLineNo">666</span>  }<a name="line.666"></a>
<span class="sourceLineNo">667</span><a name="line.667"></a>
<span class="sourceLineNo">668</span>  @Override<a name="line.668"></a>
<span class="sourceLineNo">669</span>  protected Function&lt;TableDescriptorBuilder, TableDescriptorBuilder&gt; getMetaTableObserver() {<a name="line.669"></a>
<span class="sourceLineNo">670</span>    return builder -&gt; builder.setRegionReplication(conf.getInt(HConstants.META_REPLICAS_NUM, HConstants.DEFAULT_META_REPLICA_NUM));<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>   * For compatibility, if failed with regionserver credentials, try the master one<a name="line.673"></a>
<span class="sourceLineNo">674</span>   */<a name="line.674"></a>
<span class="sourceLineNo">675</span>  @Override<a name="line.675"></a>
<span class="sourceLineNo">676</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.676"></a>
<span class="sourceLineNo">677</span>    try {<a name="line.677"></a>
<span class="sourceLineNo">678</span>      super.login(user, host);<a name="line.678"></a>
<span class="sourceLineNo">679</span>    } catch (IOException ie) {<a name="line.679"></a>
<span class="sourceLineNo">680</span>      user.login(SecurityConstants.MASTER_KRB_KEYTAB_FILE,<a name="line.680"></a>
<span class="sourceLineNo">681</span>              SecurityConstants.MASTER_KRB_PRINCIPAL, host);<a name="line.681"></a>
<span class="sourceLineNo">682</span>    }<a name="line.682"></a>
<span class="sourceLineNo">683</span>  }<a name="line.683"></a>
<span class="sourceLineNo">684</span><a name="line.684"></a>
<span class="sourceLineNo">685</span>  /**<a name="line.685"></a>
<span class="sourceLineNo">686</span>   * If configured to put regions on active master,<a name="line.686"></a>
<span class="sourceLineNo">687</span>   * wait till a backup master becomes active.<a name="line.687"></a>
<span class="sourceLineNo">688</span>   * Otherwise, loop till the server is stopped or aborted.<a name="line.688"></a>
<span class="sourceLineNo">689</span>   */<a name="line.689"></a>
<span class="sourceLineNo">690</span>  @Override<a name="line.690"></a>
<span class="sourceLineNo">691</span>  protected void waitForMasterActive(){<a name="line.691"></a>
<span class="sourceLineNo">692</span>    if (maintenanceMode) {<a name="line.692"></a>
<span class="sourceLineNo">693</span>      return;<a name="line.693"></a>
<span class="sourceLineNo">694</span>    }<a name="line.694"></a>
<span class="sourceLineNo">695</span>    boolean tablesOnMaster = LoadBalancer.isTablesOnMaster(conf);<a name="line.695"></a>
<span class="sourceLineNo">696</span>    while (!(tablesOnMaster &amp;&amp; activeMaster) &amp;&amp; !isStopped() &amp;&amp; !isAborted()) {<a name="line.696"></a>
<span class="sourceLineNo">697</span>      sleeper.sleep();<a name="line.697"></a>
<span class="sourceLineNo">698</span>    }<a name="line.698"></a>
<span class="sourceLineNo">699</span>  }<a name="line.699"></a>
<span class="sourceLineNo">700</span><a name="line.700"></a>
<span class="sourceLineNo">701</span>  @VisibleForTesting<a name="line.701"></a>
<span class="sourceLineNo">702</span>  public MasterRpcServices getMasterRpcServices() {<a name="line.702"></a>
<span class="sourceLineNo">703</span>    return (MasterRpcServices)rpcServices;<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>  public boolean balanceSwitch(final boolean b) throws IOException {<a name="line.706"></a>
<span class="sourceLineNo">707</span>    return getMasterRpcServices().switchBalancer(b, BalanceSwitchMode.ASYNC);<a name="line.707"></a>
<span class="sourceLineNo">708</span>  }<a name="line.708"></a>
<span class="sourceLineNo">709</span><a name="line.709"></a>
<span class="sourceLineNo">710</span>  @Override<a name="line.710"></a>
<span class="sourceLineNo">711</span>  protected String getProcessName() {<a name="line.711"></a>
<span class="sourceLineNo">712</span>    return MASTER;<a name="line.712"></a>
<span class="sourceLineNo">713</span>  }<a name="line.713"></a>
<span class="sourceLineNo">714</span><a name="line.714"></a>
<span class="sourceLineNo">715</span>  @Override<a name="line.715"></a>
<span class="sourceLineNo">716</span>  protected boolean canCreateBaseZNode() {<a name="line.716"></a>
<span class="sourceLineNo">717</span>    return true;<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>  @Override<a name="line.720"></a>
<span class="sourceLineNo">721</span>  protected boolean canUpdateTableDescriptor() {<a name="line.721"></a>
<span class="sourceLineNo">722</span>    return true;<a name="line.722"></a>
<span class="sourceLineNo">723</span>  }<a name="line.723"></a>
<span class="sourceLineNo">724</span><a name="line.724"></a>
<span class="sourceLineNo">725</span>  @Override<a name="line.725"></a>
<span class="sourceLineNo">726</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.726"></a>
<span class="sourceLineNo">727</span>    return new MasterRpcServices(this);<a name="line.727"></a>
<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
<span class="sourceLineNo">729</span><a name="line.729"></a>
<span class="sourceLineNo">730</span>  @Override<a name="line.730"></a>
<span class="sourceLineNo">731</span>  protected void configureInfoServer() {<a name="line.731"></a>
<span class="sourceLineNo">732</span>    infoServer.addServlet("master-status", "/master-status", MasterStatusServlet.class);<a name="line.732"></a>
<span class="sourceLineNo">733</span>    infoServer.setAttribute(MASTER, this);<a name="line.733"></a>
<span class="sourceLineNo">734</span>    if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.734"></a>
<span class="sourceLineNo">735</span>      super.configureInfoServer();<a name="line.735"></a>
<span class="sourceLineNo">736</span>    }<a name="line.736"></a>
<span class="sourceLineNo">737</span>  }<a name="line.737"></a>
<span class="sourceLineNo">738</span><a name="line.738"></a>
<span class="sourceLineNo">739</span>  @Override<a name="line.739"></a>
<span class="sourceLineNo">740</span>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.740"></a>
<span class="sourceLineNo">741</span>    return MasterDumpServlet.class;<a name="line.741"></a>
<span class="sourceLineNo">742</span>  }<a name="line.742"></a>
<span class="sourceLineNo">743</span><a name="line.743"></a>
<span class="sourceLineNo">744</span>  @Override<a name="line.744"></a>
<span class="sourceLineNo">745</span>  public MetricsMaster getMasterMetrics() {<a name="line.745"></a>
<span class="sourceLineNo">746</span>    return metricsMaster;<a name="line.746"></a>
<span class="sourceLineNo">747</span>  }<a name="line.747"></a>
<span class="sourceLineNo">748</span><a name="line.748"></a>
<span class="sourceLineNo">749</span>  /**<a name="line.749"></a>
<span class="sourceLineNo">750</span>   * &lt;p&gt;<a name="line.750"></a>
<span class="sourceLineNo">751</span>   * Initialize all ZK based system trackers. But do not include {@link RegionServerTracker}, it<a name="line.751"></a>
<span class="sourceLineNo">752</span>   * should have already been initialized along with {@link ServerManager}.<a name="line.752"></a>
<span class="sourceLineNo">753</span>   * &lt;/p&gt;<a name="line.753"></a>
<span class="sourceLineNo">754</span>   * &lt;p&gt;<a name="line.754"></a>
<span class="sourceLineNo">755</span>   * Will be overridden in tests.<a name="line.755"></a>
<span class="sourceLineNo">756</span>   * &lt;/p&gt;<a name="line.756"></a>
<span class="sourceLineNo">757</span>   */<a name="line.757"></a>
<span class="sourceLineNo">758</span>  @VisibleForTesting<a name="line.758"></a>
<span class="sourceLineNo">759</span>  protected void initializeZKBasedSystemTrackers()<a name="line.759"></a>
<span class="sourceLineNo">760</span>      throws IOException, InterruptedException, KeeperException, ReplicationException {<a name="line.760"></a>
<span class="sourceLineNo">761</span>    this.balancer = LoadBalancerFactory.getLoadBalancer(conf);<a name="line.761"></a>
<span class="sourceLineNo">762</span>    this.normalizer = RegionNormalizerFactory.getRegionNormalizer(conf);<a name="line.762"></a>
<span class="sourceLineNo">763</span>    this.normalizer.setMasterServices(this);<a name="line.763"></a>
<span class="sourceLineNo">764</span>    this.normalizer.setMasterRpcServices((MasterRpcServices)rpcServices);<a name="line.764"></a>
<span class="sourceLineNo">765</span>    this.loadBalancerTracker = new LoadBalancerTracker(zooKeeper, this);<a name="line.765"></a>
<span class="sourceLineNo">766</span>    this.loadBalancerTracker.start();<a name="line.766"></a>
<span class="sourceLineNo">767</span><a name="line.767"></a>
<span class="sourceLineNo">768</span>    this.regionNormalizerTracker = new RegionNormalizerTracker(zooKeeper, this);<a name="line.768"></a>
<span class="sourceLineNo">769</span>    this.regionNormalizerTracker.start();<a name="line.769"></a>
<span class="sourceLineNo">770</span><a name="line.770"></a>
<span class="sourceLineNo">771</span>    this.splitOrMergeTracker = new SplitOrMergeTracker(zooKeeper, conf, this);<a name="line.771"></a>
<span class="sourceLineNo">772</span>    this.splitOrMergeTracker.start();<a name="line.772"></a>
<span class="sourceLineNo">773</span><a name="line.773"></a>
<span class="sourceLineNo">774</span>    this.replicationPeerManager = ReplicationPeerManager.create(zooKeeper, conf);<a name="line.774"></a>
<span class="sourceLineNo">775</span><a name="line.775"></a>
<span class="sourceLineNo">776</span>    this.drainingServerTracker = new DrainingServerTracker(zooKeeper, this, this.serverManager);<a name="line.776"></a>
<span class="sourceLineNo">777</span>    this.drainingServerTracker.start();<a name="line.777"></a>
<span class="sourceLineNo">778</span><a name="line.778"></a>
<span class="sourceLineNo">779</span>    String clientQuorumServers = conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.779"></a>
<span class="sourceLineNo">780</span>    boolean clientZkObserverMode = conf.getBoolean(HConstants.CLIENT_ZOOKEEPER_OBSERVER_MODE,<a name="line.780"></a>
<span class="sourceLineNo">781</span>      HConstants.DEFAULT_CLIENT_ZOOKEEPER_OBSERVER_MODE);<a name="line.781"></a>
<span class="sourceLineNo">782</span>    if (clientQuorumServers != null &amp;&amp; !clientZkObserverMode) {<a name="line.782"></a>
<span class="sourceLineNo">783</span>      // we need to take care of the ZK information synchronization<a name="line.783"></a>
<span class="sourceLineNo">784</span>      // if given client ZK are not observer nodes<a name="line.784"></a>
<span class="sourceLineNo">785</span>      ZKWatcher clientZkWatcher = new ZKWatcher(conf,<a name="line.785"></a>
<span class="sourceLineNo">786</span>          getProcessName() + ":" + rpcServices.getSocketAddress().getPort() + "-clientZK", this,<a name="line.786"></a>
<span class="sourceLineNo">787</span>          false, true);<a name="line.787"></a>
<span class="sourceLineNo">788</span>      this.metaLocationSyncer = new MetaLocationSyncer(zooKeeper, clientZkWatcher, this);<a name="line.788"></a>
<span class="sourceLineNo">789</span>      this.metaLocationSyncer.start();<a name="line.789"></a>
<span class="sourceLineNo">790</span>      this.masterAddressSyncer = new MasterAddressSyncer(zooKeeper, clientZkWatcher, this);<a name="line.790"></a>
<span class="sourceLineNo">791</span>      this.masterAddressSyncer.start();<a name="line.791"></a>
<span class="sourceLineNo">792</span>      // set cluster id is a one-go effort<a name="line.792"></a>
<span class="sourceLineNo">793</span>      ZKClusterId.setClusterId(clientZkWatcher, fileSystemManager.getClusterId());<a name="line.793"></a>
<span class="sourceLineNo">794</span>    }<a name="line.794"></a>
<span class="sourceLineNo">795</span><a name="line.795"></a>
<span class="sourceLineNo">796</span>    // Set the cluster as up.  If new RSs, they'll be waiting on this before<a name="line.796"></a>
<span class="sourceLineNo">797</span>    // going ahead with their startup.<a name="line.797"></a>
<span class="sourceLineNo">798</span>    boolean wasUp = this.clusterStatusTracker.isClusterUp();<a name="line.798"></a>
<span class="sourceLineNo">799</span>    if (!wasUp) this.clusterStatusTracker.setClusterUp();<a name="line.799"></a>
<span class="sourceLineNo">800</span><a name="line.800"></a>
<span class="sourceLineNo">801</span>    LOG.info("Active/primary master=" + this.serverName +<a name="line.801"></a>
<span class="sourceLineNo">802</span>        ", sessionid=0x" +<a name="line.802"></a>
<span class="sourceLineNo">803</span>        Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()) +<a name="line.803"></a>
<span class="sourceLineNo">804</span>        ", setting cluster-up flag (Was=" + wasUp + ")");<a name="line.804"></a>
<span class="sourceLineNo">805</span><a name="line.805"></a>
<span class="sourceLineNo">806</span>    // create/initialize the snapshot manager and other procedure managers<a name="line.806"></a>
<span class="sourceLineNo">807</span>    this.snapshotManager = new SnapshotManager();<a name="line.807"></a>
<span class="sourceLineNo">808</span>    this.mpmHost = new MasterProcedureManagerHost();<a name="line.808"></a>
<span class="sourceLineNo">809</span>    this.mpmHost.register(this.snapshotManager);<a name="line.809"></a>
<span class="sourceLineNo">810</span>    this.mpmHost.register(new MasterFlushTableProcedureManager());<a name="line.810"></a>
<span class="sourceLineNo">811</span>    this.mpmHost.loadProcedures(conf);<a name="line.811"></a>
<span class="sourceLineNo">812</span>    this.mpmHost.initialize(this, this.metricsMaster);<a name="line.812"></a>
<span class="sourceLineNo">813</span>  }<a name="line.813"></a>
<span class="sourceLineNo">814</span><a name="line.814"></a>
<span class="sourceLineNo">815</span>  private static final ImmutableSet&lt;Class&lt;? extends Procedure&gt;&gt; UNSUPPORTED_PROCEDURES =<a name="line.815"></a>
<span class="sourceLineNo">816</span>    ImmutableSet.of(RecoverMetaProcedure.class, AssignProcedure.class, UnassignProcedure.class,<a name="line.816"></a>
<span class="sourceLineNo">817</span>      MoveRegionProcedure.class);<a name="line.817"></a>
<span class="sourceLineNo">818</span><a name="line.818"></a>
<span class="sourceLineNo">819</span>  /**<a name="line.819"></a>
<span class="sourceLineNo">820</span>   * In HBASE-20811, we have introduced a new TRSP to assign/unassign/move regions, and it is<a name="line.820"></a>
<span class="sourceLineNo">821</span>   * incompatible with the old AssignProcedure/UnassignProcedure/MoveRegionProcedure. So we need to<a name="line.821"></a>
<span class="sourceLineNo">822</span>   * make sure that there are none these procedures when upgrading. If there are, the master will<a name="line.822"></a>
<span class="sourceLineNo">823</span>   * quit, you need to go back to the old version to finish these procedures first before upgrading.<a name="line.823"></a>
<span class="sourceLineNo">824</span>   */<a name="line.824"></a>
<span class="sourceLineNo">825</span>  private void checkUnsupportedProcedure(<a name="line.825"></a>
<span class="sourceLineNo">826</span>      Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType)<a name="line.826"></a>
<span class="sourceLineNo">827</span>      throws HBaseIOException {<a name="line.827"></a>
<span class="sourceLineNo">828</span>    // Confirm that we do not have unfinished assign/unassign related procedures. It is not easy to<a name="line.828"></a>
<span class="sourceLineNo">829</span>    // support both the old assign/unassign procedures and the new TransitRegionStateProcedure as<a name="line.829"></a>
<span class="sourceLineNo">830</span>    // there will be conflict in the code for AM. We should finish all these procedures before<a name="line.830"></a>
<span class="sourceLineNo">831</span>    // upgrading.<a name="line.831"></a>
<span class="sourceLineNo">832</span>    for (Class&lt;? extends Procedure&gt; clazz : UNSUPPORTED_PROCEDURES) {<a name="line.832"></a>
<span class="sourceLineNo">833</span>      List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; procs = procsByType.get(clazz);<a name="line.833"></a>
<span class="sourceLineNo">834</span>      if (procs != null) {<a name="line.834"></a>
<span class="sourceLineNo">835</span>        LOG.error(<a name="line.835"></a>
<span class="sourceLineNo">836</span>          "Unsupported procedure type {} found, please rollback your master to the old" +<a name="line.836"></a>
<span class="sourceLineNo">837</span>            " version to finish them, and then try to upgrade again. The full procedure list: {}",<a name="line.837"></a>
<span class="sourceLineNo">838</span>          clazz, procs);<a name="line.838"></a>
<span class="sourceLineNo">839</span>        throw new HBaseIOException("Unsupported procedure type " + clazz + " found");<a name="line.839"></a>
<span class="sourceLineNo">840</span>      }<a name="line.840"></a>
<span class="sourceLineNo">841</span>    }<a name="line.841"></a>
<span class="sourceLineNo">842</span>    // A special check for SCP, as we do not support RecoverMetaProcedure any more so we need to<a name="line.842"></a>
<span class="sourceLineNo">843</span>    // make sure that no one will try to schedule it but SCP does have a state which will schedule<a name="line.843"></a>
<span class="sourceLineNo">844</span>    // it.<a name="line.844"></a>
<span class="sourceLineNo">845</span>    if (procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.845"></a>
<span class="sourceLineNo">846</span>      .map(p -&gt; (ServerCrashProcedure) p).anyMatch(ServerCrashProcedure::isInRecoverMetaState)) {<a name="line.846"></a>
<span class="sourceLineNo">847</span>      LOG.error("At least one ServerCrashProcedure is going to schedule a RecoverMetaProcedure," +<a name="line.847"></a>
<span class="sourceLineNo">848</span>        " which is not supported any more. Please rollback your master to the old version to" +<a name="line.848"></a>
<span class="sourceLineNo">849</span>        " finish them, and then try to upgrade again.");<a name="line.849"></a>
<span class="sourceLineNo">850</span>      throw new HBaseIOException("Unsupported procedure state found for ServerCrashProcedure");<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><a name="line.853"></a>
<span class="sourceLineNo">854</span>  // Will be overriden in test to inject customized AssignmentManager<a name="line.854"></a>
<span class="sourceLineNo">855</span>  @VisibleForTesting<a name="line.855"></a>
<span class="sourceLineNo">856</span>  protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.856"></a>
<span class="sourceLineNo">857</span>    return new AssignmentManager(master);<a name="line.857"></a>
<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
<span class="sourceLineNo">859</span><a name="line.859"></a>
<span class="sourceLineNo">860</span>  /**<a name="line.860"></a>
<span class="sourceLineNo">861</span>   * Finish initialization of HMaster after becoming the primary master.<a name="line.861"></a>
<span class="sourceLineNo">862</span>   * &lt;p/&gt;<a name="line.862"></a>
<span class="sourceLineNo">863</span>   * The startup order is a bit complicated but very important, do not change it unless you know<a name="line.863"></a>
<span class="sourceLineNo">864</span>   * what you are doing.<a name="line.864"></a>
<span class="sourceLineNo">865</span>   * &lt;ol&gt;<a name="line.865"></a>
<span class="sourceLineNo">866</span>   * &lt;li&gt;Initialize file system based components - file system manager, wal manager, table<a name="line.866"></a>
<span class="sourceLineNo">867</span>   * descriptors, etc&lt;/li&gt;<a name="line.867"></a>
<span class="sourceLineNo">868</span>   * &lt;li&gt;Publish cluster id&lt;/li&gt;<a name="line.868"></a>
<span class="sourceLineNo">869</span>   * &lt;li&gt;Here comes the most complicated part - initialize server manager, assignment manager and<a name="line.869"></a>
<span class="sourceLineNo">870</span>   * region server tracker<a name="line.870"></a>
<span class="sourceLineNo">871</span>   * &lt;ol type='i'&gt;<a name="line.871"></a>
<span class="sourceLineNo">872</span>   * &lt;li&gt;Create server manager&lt;/li&gt;<a name="line.872"></a>
<span class="sourceLineNo">873</span>   * &lt;li&gt;Create procedure executor, load the procedures, but do not start workers. We will start it<a name="line.873"></a>
<span class="sourceLineNo">874</span>   * later after we finish scheduling SCPs to avoid scheduling duplicated SCPs for the same<a name="line.874"></a>
<span class="sourceLineNo">875</span>   * server&lt;/li&gt;<a name="line.875"></a>
<span class="sourceLineNo">876</span>   * &lt;li&gt;Create assignment manager and start it, load the meta region state, but do not load data<a name="line.876"></a>
<span class="sourceLineNo">877</span>   * from meta region&lt;/li&gt;<a name="line.877"></a>
<span class="sourceLineNo">878</span>   * &lt;li&gt;Start region server tracker, construct the online servers set and find out dead servers and<a name="line.878"></a>
<span class="sourceLineNo">879</span>   * schedule SCP for them. The online servers will be constructed by scanning zk, and we will also<a name="line.879"></a>
<span class="sourceLineNo">880</span>   * scan the wal directory to find out possible live region servers, and the differences between<a name="line.880"></a>
<span class="sourceLineNo">881</span>   * these two sets are the dead servers&lt;/li&gt;<a name="line.881"></a>
<span class="sourceLineNo">882</span>   * &lt;/ol&gt;<a name="line.882"></a>
<span class="sourceLineNo">883</span>   * &lt;/li&gt;<a name="line.883"></a>
<span class="sourceLineNo">884</span>   * &lt;li&gt;If this is a new deploy, schedule a InitMetaProcedure to initialize meta&lt;/li&gt;<a name="line.884"></a>
<span class="sourceLineNo">885</span>   * &lt;li&gt;Start necessary service threads - balancer, catalog janior, executor services, and also the<a name="line.885"></a>
<span class="sourceLineNo">886</span>   * procedure executor, etc. Notice that the balancer must be created first as assignment manager<a name="line.886"></a>
<span class="sourceLineNo">887</span>   * may use it when assigning regions.&lt;/li&gt;<a name="line.887"></a>
<span class="sourceLineNo">888</span>   * &lt;li&gt;Wait for meta to be initialized if necesssary, start table state manager.&lt;/li&gt;<a name="line.888"></a>
<span class="sourceLineNo">889</span>   * &lt;li&gt;Wait for enough region servers to check-in&lt;/li&gt;<a name="line.889"></a>
<span class="sourceLineNo">890</span>   * &lt;li&gt;Let assignment manager load data from meta and construct region states&lt;/li&gt;<a name="line.890"></a>
<span class="sourceLineNo">891</span>   * &lt;li&gt;Start all other things such as chore services, etc&lt;/li&gt;<a name="line.891"></a>
<span class="sourceLineNo">892</span>   * &lt;/ol&gt;<a name="line.892"></a>
<span class="sourceLineNo">893</span>   * &lt;p/&gt;<a name="line.893"></a>
<span class="sourceLineNo">894</span>   * Notice that now we will not schedule a special procedure to make meta online(unless the first<a name="line.894"></a>
<span class="sourceLineNo">895</span>   * time where meta has not been created yet), we will rely on SCP to bring meta online.<a name="line.895"></a>
<span class="sourceLineNo">896</span>   */<a name="line.896"></a>
<span class="sourceLineNo">897</span>  private void finishActiveMasterInitialization(MonitoredTask status) throws IOException,<a name="line.897"></a>
<span class="sourceLineNo">898</span>          InterruptedException, KeeperException, ReplicationException {<a name="line.898"></a>
<span class="sourceLineNo">899</span>    /*<a name="line.899"></a>
<span class="sourceLineNo">900</span>     * We are active master now... go initialize components we need to run.<a name="line.900"></a>
<span class="sourceLineNo">901</span>     */<a name="line.901"></a>
<span class="sourceLineNo">902</span>    status.setStatus("Initializing Master file system");<a name="line.902"></a>
<span class="sourceLineNo">903</span><a name="line.903"></a>
<span class="sourceLineNo">904</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.904"></a>
<span class="sourceLineNo">905</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.905"></a>
<span class="sourceLineNo">906</span><a name="line.906"></a>
<span class="sourceLineNo">907</span>    // Only initialize the MemStoreLAB when master carry table<a name="line.907"></a>
<span class="sourceLineNo">908</span>    if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.908"></a>
<span class="sourceLineNo">909</span>      initializeMemStoreChunkCreator();<a name="line.909"></a>
<span class="sourceLineNo">910</span>    }<a name="line.910"></a>
<span class="sourceLineNo">911</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.911"></a>
<span class="sourceLineNo">912</span>    this.walManager = new MasterWalManager(this);<a name="line.912"></a>
<span class="sourceLineNo">913</span><a name="line.913"></a>
<span class="sourceLineNo">914</span>    // enable table descriptors cache<a name="line.914"></a>
<span class="sourceLineNo">915</span>    this.tableDescriptors.setCacheOn();<a name="line.915"></a>
<span class="sourceLineNo">916</span><a name="line.916"></a>
<span class="sourceLineNo">917</span>    // warm-up HTDs cache on master initialization<a name="line.917"></a>
<span class="sourceLineNo">918</span>    if (preLoadTableDescriptors) {<a name="line.918"></a>
<span class="sourceLineNo">919</span>      status.setStatus("Pre-loading table descriptors");<a name="line.919"></a>
<span class="sourceLineNo">920</span>      this.tableDescriptors.getAll();<a name="line.920"></a>
<span class="sourceLineNo">921</span>    }<a name="line.921"></a>
<span class="sourceLineNo">922</span><a name="line.922"></a>
<span class="sourceLineNo">923</span>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.923"></a>
<span class="sourceLineNo">924</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.924"></a>
<span class="sourceLineNo">925</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.925"></a>
<span class="sourceLineNo">926</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.926"></a>
<span class="sourceLineNo">927</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.927"></a>
<span class="sourceLineNo">928</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.928"></a>
<span class="sourceLineNo">929</span>    this.clusterId = clusterId.toString();<a name="line.929"></a>
<span class="sourceLineNo">930</span><a name="line.930"></a>
<span class="sourceLineNo">931</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.931"></a>
<span class="sourceLineNo">932</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.932"></a>
<span class="sourceLineNo">933</span>    // hbase.write.hbck1.lock.file to false.<a name="line.933"></a>
<span class="sourceLineNo">934</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.934"></a>
<span class="sourceLineNo">935</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.935"></a>
<span class="sourceLineNo">936</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.936"></a>
<span class="sourceLineNo">937</span>    }<a name="line.937"></a>
<span class="sourceLineNo">938</span><a name="line.938"></a>
<span class="sourceLineNo">939</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.939"></a>
<span class="sourceLineNo">940</span>    // The below two managers must be created before loading procedures, as they will be used during<a name="line.940"></a>
<span class="sourceLineNo">941</span>    // loading.<a name="line.941"></a>
<span class="sourceLineNo">942</span>    this.serverManager = createServerManager(this);<a name="line.942"></a>
<span class="sourceLineNo">943</span>    this.syncReplicationReplayWALManager = new SyncReplicationReplayWALManager(this);<a name="line.943"></a>
<span class="sourceLineNo">944</span>    if (!conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.944"></a>
<span class="sourceLineNo">945</span>      DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.945"></a>
<span class="sourceLineNo">946</span>      this.splitWALManager = new SplitWALManager(this);<a name="line.946"></a>
<span class="sourceLineNo">947</span>    }<a name="line.947"></a>
<span class="sourceLineNo">948</span>    createProcedureExecutor();<a name="line.948"></a>
<span class="sourceLineNo">949</span>    @SuppressWarnings("rawtypes")<a name="line.949"></a>
<span class="sourceLineNo">950</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.950"></a>
<span class="sourceLineNo">951</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.951"></a>
<span class="sourceLineNo">952</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.952"></a>
<span class="sourceLineNo">953</span><a name="line.953"></a>
<span class="sourceLineNo">954</span>    checkUnsupportedProcedure(procsByType);<a name="line.954"></a>
<span class="sourceLineNo">955</span><a name="line.955"></a>
<span class="sourceLineNo">956</span>    // Create Assignment Manager<a name="line.956"></a>
<span class="sourceLineNo">957</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.957"></a>
<span class="sourceLineNo">958</span>    this.assignmentManager.start();<a name="line.958"></a>
<span class="sourceLineNo">959</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.959"></a>
<span class="sourceLineNo">960</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.960"></a>
<span class="sourceLineNo">961</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.961"></a>
<span class="sourceLineNo">962</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.962"></a>
<span class="sourceLineNo">963</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.963"></a>
<span class="sourceLineNo">964</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.964"></a>
<span class="sourceLineNo">965</span>        .collect(Collectors.toList());<a name="line.965"></a>
<span class="sourceLineNo">966</span>    this.assignmentManager.setupRIT(ritList);<a name="line.966"></a>
<span class="sourceLineNo">967</span><a name="line.967"></a>
<span class="sourceLineNo">968</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.968"></a>
<span class="sourceLineNo">969</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.969"></a>
<span class="sourceLineNo">970</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.970"></a>
<span class="sourceLineNo">971</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.971"></a>
<span class="sourceLineNo">972</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.972"></a>
<span class="sourceLineNo">973</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.973"></a>
<span class="sourceLineNo">974</span>    this.regionServerTracker.start(<a name="line.974"></a>
<span class="sourceLineNo">975</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.975"></a>
<span class="sourceLineNo">976</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.976"></a>
<span class="sourceLineNo">977</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.977"></a>
<span class="sourceLineNo">978</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.978"></a>
<span class="sourceLineNo">979</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.979"></a>
<span class="sourceLineNo">980</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.980"></a>
<span class="sourceLineNo">981</span>    this.tableStateManager =<a name="line.981"></a>
<span class="sourceLineNo">982</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.982"></a>
<span class="sourceLineNo">983</span>        ?<a name="line.983"></a>
<span class="sourceLineNo">984</span>        new MirroringTableStateManager(this):<a name="line.984"></a>
<span class="sourceLineNo">985</span>        new TableStateManager(this);<a name="line.985"></a>
<span class="sourceLineNo">986</span><a name="line.986"></a>
<span class="sourceLineNo">987</span>    status.setStatus("Initializing ZK system trackers");<a name="line.987"></a>
<span class="sourceLineNo">988</span>    initializeZKBasedSystemTrackers();<a name="line.988"></a>
<span class="sourceLineNo">989</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.989"></a>
<span class="sourceLineNo">990</span>    try {<a name="line.990"></a>
<span class="sourceLineNo">991</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.991"></a>
<span class="sourceLineNo">992</span>    } catch (IOException e) {<a name="line.992"></a>
<span class="sourceLineNo">993</span>      LOG.info("Failed to load last flushed sequence id of regions"<a name="line.993"></a>
<span class="sourceLineNo">994</span>          + " from file system", e);<a name="line.994"></a>
<span class="sourceLineNo">995</span>    }<a name="line.995"></a>
<span class="sourceLineNo">996</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.996"></a>
<span class="sourceLineNo">997</span>    this.activeMaster = true;<a name="line.997"></a>
<span class="sourceLineNo">998</span><a name="line.998"></a>
<span class="sourceLineNo">999</span>    // Start the Zombie master detector after setting master as active, see HBASE-21535<a name="line.999"></a>
<span class="sourceLineNo">1000</span>    Thread zombieDetector = new Thread(new InitializationMonitor(this),<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>        "ActiveMasterInitializationMonitor-" + System.currentTimeMillis());<a name="line.1001"></a>
<span class="sourceLineNo">1002</span>    zombieDetector.setDaemon(true);<a name="line.1002"></a>
<span class="sourceLineNo">1003</span>    zombieDetector.start();<a name="line.1003"></a>
<span class="sourceLineNo">1004</span><a name="line.1004"></a>
<span class="sourceLineNo">1005</span>    // This is for backwards compatibility<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>    // See HBASE-11393<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1007"></a>
<span class="sourceLineNo">1008</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1009"></a>
<span class="sourceLineNo">1010</span>    tableCFsUpdater.copyTableCFs();<a name="line.1010"></a>
<span class="sourceLineNo">1011</span><a name="line.1011"></a>
<span class="sourceLineNo">1012</span>    if (!maintenanceMode) {<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1015"></a>
<span class="sourceLineNo">1016</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>      }<a name="line.1017"></a>
<span class="sourceLineNo">1018</span>      // initialize master side coprocessors before we start handling requests<a name="line.1018"></a>
<span class="sourceLineNo">1019</span>      status.setStatus("Initializing master coprocessors");<a name="line.1019"></a>
<span class="sourceLineNo">1020</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<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>    // Checking if meta needs initializing.<a name="line.1023"></a>
<span class="sourceLineNo">1024</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>    InitMetaProcedure initMetaProc = null;<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1026"></a>
<span class="sourceLineNo">1027</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1027"></a>
<span class="sourceLineNo">1028</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>    LOG.info("hbase:meta {}", rs);<a name="line.1029"></a>
<span class="sourceLineNo">1030</span>    if (rs.isOffline()) {<a name="line.1030"></a>
<span class="sourceLineNo">1031</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1033"></a>
<span class="sourceLineNo">1034</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>        procedureExecutor.submitProcedure(temp);<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>        return temp;<a name="line.1037"></a>
<span class="sourceLineNo">1038</span>      });<a name="line.1038"></a>
<span class="sourceLineNo">1039</span>    }<a name="line.1039"></a>
<span class="sourceLineNo">1040</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1041"></a>
<span class="sourceLineNo">1042</span>    }<a name="line.1042"></a>
<span class="sourceLineNo">1043</span><a name="line.1043"></a>
<span class="sourceLineNo">1044</span>    // initialize load balancer<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>    this.balancer.setMasterServices(this);<a name="line.1045"></a>
<span class="sourceLineNo">1046</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1046"></a>
<span class="sourceLineNo">1047</span>    this.balancer.initialize();<a name="line.1047"></a>
<span class="sourceLineNo">1048</span><a name="line.1048"></a>
<span class="sourceLineNo">1049</span>    // start up all service threads.<a name="line.1049"></a>
<span class="sourceLineNo">1050</span>    status.setStatus("Initializing master service threads");<a name="line.1050"></a>
<span class="sourceLineNo">1051</span>    startServiceThreads();<a name="line.1051"></a>
<span class="sourceLineNo">1052</span>    // wait meta to be initialized after we start procedure executor<a name="line.1052"></a>
<span class="sourceLineNo">1053</span>    if (initMetaProc != null) {<a name="line.1053"></a>
<span class="sourceLineNo">1054</span>      initMetaProc.await();<a name="line.1054"></a>
<span class="sourceLineNo">1055</span>    }<a name="line.1055"></a>
<span class="sourceLineNo">1056</span>    // Wake up this server to check in<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>    sleeper.skipSleepCycle();<a name="line.1057"></a>
<span class="sourceLineNo">1058</span><a name="line.1058"></a>
<span class="sourceLineNo">1059</span>    // Wait for region servers to report in.<a name="line.1059"></a>
<span class="sourceLineNo">1060</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1060"></a>
<span class="sourceLineNo">1061</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1061"></a>
<span class="sourceLineNo">1062</span>    String statusStr = "Wait for region servers to report in";<a name="line.1062"></a>
<span class="sourceLineNo">1063</span>    status.setStatus(statusStr);<a name="line.1063"></a>
<span class="sourceLineNo">1064</span>    LOG.info(Objects.toString(status));<a name="line.1064"></a>
<span class="sourceLineNo">1065</span>    waitForRegionServers(status);<a name="line.1065"></a>
<span class="sourceLineNo">1066</span><a name="line.1066"></a>
<span class="sourceLineNo">1067</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1067"></a>
<span class="sourceLineNo">1068</span>    if (isStopped()) {<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>      return;<a name="line.1069"></a>
<span class="sourceLineNo">1070</span>    }<a name="line.1070"></a>
<span class="sourceLineNo">1071</span><a name="line.1071"></a>
<span class="sourceLineNo">1072</span>    status.setStatus("Starting assignment manager");<a name="line.1072"></a>
<span class="sourceLineNo">1073</span>    // FIRST HBASE:META READ!!!!<a name="line.1073"></a>
<span class="sourceLineNo">1074</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1074"></a>
<span class="sourceLineNo">1075</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1075"></a>
<span class="sourceLineNo">1076</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1076"></a>
<span class="sourceLineNo">1077</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1077"></a>
<span class="sourceLineNo">1078</span>    // available. That's what waitForMetaOnline does.<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>    if (!waitForMetaOnline()) {<a name="line.1079"></a>
<span class="sourceLineNo">1080</span>      return;<a name="line.1080"></a>
<span class="sourceLineNo">1081</span>    }<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>    this.assignmentManager.joinCluster();<a name="line.1082"></a>
<span class="sourceLineNo">1083</span>    // The below depends on hbase:meta being online.<a name="line.1083"></a>
<span class="sourceLineNo">1084</span>    this.tableStateManager.start();<a name="line.1084"></a>
<span class="sourceLineNo">1085</span>    // Below has to happen after tablestatemanager has started in the case where this hbase-2.x<a name="line.1085"></a>
<span class="sourceLineNo">1086</span>    // is being started over an hbase-1.x dataset. tablestatemanager runs a migration as part<a name="line.1086"></a>
<span class="sourceLineNo">1087</span>    // of its 'start' moving table state from zookeeper to hbase:meta. This migration needs to<a name="line.1087"></a>
<span class="sourceLineNo">1088</span>    // complete before we do this next step processing offline regions else it fails reading<a name="line.1088"></a>
<span class="sourceLineNo">1089</span>    // table states messing up master launch (namespace table, etc., are not assigned).<a name="line.1089"></a>
<span class="sourceLineNo">1090</span>    this.assignmentManager.processOfflineRegions();<a name="line.1090"></a>
<span class="sourceLineNo">1091</span>    // Initialize after meta is up as below scans meta<a name="line.1091"></a>
<span class="sourceLineNo">1092</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1094"></a>
<span class="sourceLineNo">1095</span>      snapshotOfRegionAssignment.initialize();<a name="line.1095"></a>
<span class="sourceLineNo">1096</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1096"></a>
<span class="sourceLineNo">1097</span>    }<a name="line.1097"></a>
<span class="sourceLineNo">1098</span><a name="line.1098"></a>
<span class="sourceLineNo">1099</span>    // set cluster status again after user regions are assigned<a name="line.1099"></a>
<span class="sourceLineNo">1100</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1100"></a>
<span class="sourceLineNo">1101</span><a name="line.1101"></a>
<span class="sourceLineNo">1102</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1102"></a>
<span class="sourceLineNo">1103</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1103"></a>
<span class="sourceLineNo">1104</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1104"></a>
<span class="sourceLineNo">1105</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1105"></a>
<span class="sourceLineNo">1106</span>    this.balancerChore = new BalancerChore(this);<a name="line.1106"></a>
<span class="sourceLineNo">1107</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1107"></a>
<span class="sourceLineNo">1108</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1110"></a>
<span class="sourceLineNo">1111</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1111"></a>
<span class="sourceLineNo">1112</span>    this.hbckChore = new HbckChore(this);<a name="line.1112"></a>
<span class="sourceLineNo">1113</span>    getChoreService().scheduleChore(hbckChore);<a name="line.1113"></a>
<span class="sourceLineNo">1114</span>    this.serverManager.startChore();<a name="line.1114"></a>
<span class="sourceLineNo">1115</span><a name="line.1115"></a>
<span class="sourceLineNo">1116</span>    // Only for rolling upgrade, where we need to migrate the data in namespace table to meta table.<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>    if (!waitForNamespaceOnline()) {<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>      return;<a name="line.1118"></a>
<span class="sourceLineNo">1119</span>    }<a name="line.1119"></a>
<span class="sourceLineNo">1120</span>    status.setStatus("Starting cluster schema service");<a name="line.1120"></a>
<span class="sourceLineNo">1121</span>    initClusterSchemaService();<a name="line.1121"></a>
<span class="sourceLineNo">1122</span><a name="line.1122"></a>
<span class="sourceLineNo">1123</span>    if (this.cpHost != null) {<a name="line.1123"></a>
<span class="sourceLineNo">1124</span>      try {<a name="line.1124"></a>
<span class="sourceLineNo">1125</span>        this.cpHost.preMasterInitialization();<a name="line.1125"></a>
<span class="sourceLineNo">1126</span>      } catch (IOException e) {<a name="line.1126"></a>
<span class="sourceLineNo">1127</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<a name="line.1127"></a>
<span class="sourceLineNo">1128</span>      }<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>    }<a name="line.1129"></a>
<span class="sourceLineNo">1130</span><a name="line.1130"></a>
<span class="sourceLineNo">1131</span>    status.markComplete("Initialization successful");<a name="line.1131"></a>
<span class="sourceLineNo">1132</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1133"></a>
<span class="sourceLineNo">1134</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1134"></a>
<span class="sourceLineNo">1135</span>    configurationManager.registerObserver(this.balancer);<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1136"></a>
<span class="sourceLineNo">1137</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1137"></a>
<span class="sourceLineNo">1138</span>    // Set master as 'initialized'.<a name="line.1138"></a>
<span class="sourceLineNo">1139</span>    setInitialized(true);<a name="line.1139"></a>
<span class="sourceLineNo">1140</span><a name="line.1140"></a>
<span class="sourceLineNo">1141</span>    if (maintenanceMode) {<a name="line.1141"></a>
<span class="sourceLineNo">1142</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1142"></a>
<span class="sourceLineNo">1143</span>      return;<a name="line.1143"></a>
<span class="sourceLineNo">1144</span>    }<a name="line.1144"></a>
<span class="sourceLineNo">1145</span><a name="line.1145"></a>
<span class="sourceLineNo">1146</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>    status.setStatus("Assign meta replicas");<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1148"></a>
<span class="sourceLineNo">1149</span>    metaBootstrap.assignMetaReplicas();<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>    status.setStatus("Starting quota manager");<a name="line.1150"></a>
<span class="sourceLineNo">1151</span>    initQuotaManager();<a name="line.1151"></a>
<span class="sourceLineNo">1152</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1152"></a>
<span class="sourceLineNo">1153</span>      // Create the quota snapshot notifier<a name="line.1153"></a>
<span class="sourceLineNo">1154</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1154"></a>
<span class="sourceLineNo">1155</span>      spaceQuotaSnapshotNotifier.initialize(getConnection());<a name="line.1155"></a>
<span class="sourceLineNo">1156</span>      this.quotaObserverChore = new QuotaObserverChore(this, getMasterMetrics());<a name="line.1156"></a>
<span class="sourceLineNo">1157</span>      // Start the chore to read the region FS space reports and act on them<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>      getChoreService().scheduleChore(quotaObserverChore);<a name="line.1158"></a>
<span class="sourceLineNo">1159</span><a name="line.1159"></a>
<span class="sourceLineNo">1160</span>      this.snapshotQuotaChore = new SnapshotQuotaObserverChore(this, getMasterMetrics());<a name="line.1160"></a>
<span class="sourceLineNo">1161</span>      // Start the chore to read snapshots and add their usage to table/NS quotas<a name="line.1161"></a>
<span class="sourceLineNo">1162</span>      getChoreService().scheduleChore(snapshotQuotaChore);<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>    }<a name="line.1163"></a>
<span class="sourceLineNo">1164</span><a name="line.1164"></a>
<span class="sourceLineNo">1165</span>    // clear the dead servers with same host name and port of online server because we are not<a name="line.1165"></a>
<span class="sourceLineNo">1166</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.1166"></a>
<span class="sourceLineNo">1167</span>    // master initialization. See HBASE-5916.<a name="line.1167"></a>
<span class="sourceLineNo">1168</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.1168"></a>
<span class="sourceLineNo">1169</span><a name="line.1169"></a>
<span class="sourceLineNo">1170</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.1170"></a>
<span class="sourceLineNo">1171</span>    status.setStatus("Checking ZNode ACLs");<a name="line.1171"></a>
<span class="sourceLineNo">1172</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.1172"></a>
<span class="sourceLineNo">1173</span><a name="line.1173"></a>
<span class="sourceLineNo">1174</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>    initMobCleaner();<a name="line.1175"></a>
<span class="sourceLineNo">1176</span><a name="line.1176"></a>
<span class="sourceLineNo">1177</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.1177"></a>
<span class="sourceLineNo">1178</span>    if (this.cpHost != null) {<a name="line.1178"></a>
<span class="sourceLineNo">1179</span>      // don't let cp initialization errors kill the master<a name="line.1179"></a>
<span class="sourceLineNo">1180</span>      try {<a name="line.1180"></a>
<span class="sourceLineNo">1181</span>        this.cpHost.postStartMaster();<a name="line.1181"></a>
<span class="sourceLineNo">1182</span>      } catch (IOException ioe) {<a name="line.1182"></a>
<span class="sourceLineNo">1183</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>      }<a name="line.1184"></a>
<span class="sourceLineNo">1185</span>    }<a name="line.1185"></a>
<span class="sourceLineNo">1186</span><a name="line.1186"></a>
<span class="sourceLineNo">1187</span>    zombieDetector.interrupt();<a name="line.1187"></a>
<span class="sourceLineNo">1188</span><a name="line.1188"></a>
<span class="sourceLineNo">1189</span>    /*<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>     * After master has started up, lets do balancer post startup initialization. Since this runs<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>     * in activeMasterManager thread, it should be fine.<a name="line.1191"></a>
<span class="sourceLineNo">1192</span>     */<a name="line.1192"></a>
<span class="sourceLineNo">1193</span>    long start = System.currentTimeMillis();<a name="line.1193"></a>
<span class="sourceLineNo">1194</span>    this.balancer.postMasterStartupInitialize();<a name="line.1194"></a>
<span class="sourceLineNo">1195</span>    if (LOG.isDebugEnabled()) {<a name="line.1195"></a>
<span class="sourceLineNo">1196</span>      LOG.debug("Balancer post startup initialization complete, took " + (<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>          (System.currentTimeMillis() - start) / 1000) + " seconds");<a name="line.1197"></a>
<span class="sourceLineNo">1198</span>    }<a name="line.1198"></a>
<span class="sourceLineNo">1199</span>  }<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>   * Check hbase:meta is up and ready for reading. For use during Master startup only.<a name="line.1202"></a>
<span class="sourceLineNo">1203</span>   * @return True if meta is UP and online and startup can progress. Otherwise, meta is not online<a name="line.1203"></a>
<span class="sourceLineNo">1204</span>   *   and we will hold here until operator intervention.<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>   */<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>  @VisibleForTesting<a name="line.1206"></a>
<span class="sourceLineNo">1207</span>  public boolean waitForMetaOnline() throws InterruptedException {<a name="line.1207"></a>
<span class="sourceLineNo">1208</span>    return isRegionOnline(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1208"></a>
<span class="sourceLineNo">1209</span>  }<a name="line.1209"></a>
<span class="sourceLineNo">1210</span><a name="line.1210"></a>
<span class="sourceLineNo">1211</span>  /**<a name="line.1211"></a>
<span class="sourceLineNo">1212</span>   * @return True if region is online and scannable else false if an error or shutdown (Otherwise<a name="line.1212"></a>
<span class="sourceLineNo">1213</span>   *   we just block in here holding up all forward-progess).<a name="line.1213"></a>
<span class="sourceLineNo">1214</span>   */<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>  private boolean isRegionOnline(RegionInfo ri) throws InterruptedException {<a name="line.1215"></a>
<span class="sourceLineNo">1216</span>    RetryCounter rc = null;<a name="line.1216"></a>
<span class="sourceLineNo">1217</span>    while (!isStopped()) {<a name="line.1217"></a>
<span class="sourceLineNo">1218</span>      RegionState rs = this.assignmentManager.getRegionStates().getRegionState(ri);<a name="line.1218"></a>
<span class="sourceLineNo">1219</span>      if (rs.isOpened()) {<a name="line.1219"></a>
<span class="sourceLineNo">1220</span>        if (this.getServerManager().isServerOnline(rs.getServerName())) {<a name="line.1220"></a>
<span class="sourceLineNo">1221</span>          return true;<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>      // Region is not OPEN.<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>      Optional&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; optProc = this.procedureExecutor.getProcedures().<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>          stream().filter(p -&gt; p instanceof ServerCrashProcedure).findAny();<a name="line.1226"></a>
<span class="sourceLineNo">1227</span>      // TODO: Add a page to refguide on how to do repair. Have this log message point to it.<a name="line.1227"></a>
<span class="sourceLineNo">1228</span>      // Page will talk about loss of edits, how to schedule at least the meta WAL recovery, and<a name="line.1228"></a>
<span class="sourceLineNo">1229</span>      // then how to assign including how to break region lock if one held.<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>      LOG.warn("{} is NOT online; state={}; ServerCrashProcedures={}. Master startup cannot " +<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>          "progress, in holding-pattern until region onlined.",<a name="line.1231"></a>
<span class="sourceLineNo">1232</span>          ri.getRegionNameAsString(), rs, optProc.isPresent());<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>      // Check once-a-minute.<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>      if (rc == null) {<a name="line.1234"></a>
<span class="sourceLineNo">1235</span>        rc = new RetryCounterFactory(1000).create();<a name="line.1235"></a>
<span class="sourceLineNo">1236</span>      }<a name="line.1236"></a>
<span class="sourceLineNo">1237</span>      Threads.sleep(rc.getBackoffTimeAndIncrementAttempts());<a name="line.1237"></a>
<span class="sourceLineNo">1238</span>    }<a name="line.1238"></a>
<span class="sourceLineNo">1239</span>    return false;<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>   * Check hbase:namespace table is assigned. If not, startup will hang looking for the ns table<a name="line.1243"></a>
<span class="sourceLineNo">1244</span>   * &lt;p/&gt;<a name="line.1244"></a>
<span class="sourceLineNo">1245</span>   * This is for rolling upgrading, later we will migrate the data in ns table to the ns family of<a name="line.1245"></a>
<span class="sourceLineNo">1246</span>   * meta table. And if this is a new clsuter, this method will return immediately as there will be<a name="line.1246"></a>
<span class="sourceLineNo">1247</span>   * no namespace table/region.<a name="line.1247"></a>
<span class="sourceLineNo">1248</span>   * @return True if namespace table is up/online.<a name="line.1248"></a>
<span class="sourceLineNo">1249</span>   */<a name="line.1249"></a>
<span class="sourceLineNo">1250</span>  private boolean waitForNamespaceOnline() throws InterruptedException, IOException {<a name="line.1250"></a>
<span class="sourceLineNo">1251</span>    TableState nsTableState =<a name="line.1251"></a>
<span class="sourceLineNo">1252</span>      MetaTableAccessor.getTableState(getConnection(), TableName.NAMESPACE_TABLE_NAME);<a name="line.1252"></a>
<span class="sourceLineNo">1253</span>    if (nsTableState == null || nsTableState.isDisabled()) {<a name="line.1253"></a>
<span class="sourceLineNo">1254</span>      // this means we have already migrated the data and disabled or deleted the namespace table,<a name="line.1254"></a>
<span class="sourceLineNo">1255</span>      // or this is a new depliy which does not have a namespace table from the beginning.<a name="line.1255"></a>
<span class="sourceLineNo">1256</span>      return true;<a name="line.1256"></a>
<span class="sourceLineNo">1257</span>    }<a name="line.1257"></a>
<span class="sourceLineNo">1258</span>    List&lt;RegionInfo&gt; ris =<a name="line.1258"></a>
<span class="sourceLineNo">1259</span>      this.assignmentManager.getRegionStates().getRegionsOfTable(TableName.NAMESPACE_TABLE_NAME);<a name="line.1259"></a>
<span class="sourceLineNo">1260</span>    if (ris.isEmpty()) {<a name="line.1260"></a>
<span class="sourceLineNo">1261</span>      // maybe this will not happen any more, but anyway, no harm to add a check here...<a name="line.1261"></a>
<span class="sourceLineNo">1262</span>      return true;<a name="line.1262"></a>
<span class="sourceLineNo">1263</span>    }<a name="line.1263"></a>
<span class="sourceLineNo">1264</span>    // Else there are namespace regions up in meta. Ensure they are assigned before we go on.<a name="line.1264"></a>
<span class="sourceLineNo">1265</span>    for (RegionInfo ri : ris) {<a name="line.1265"></a>
<span class="sourceLineNo">1266</span>      isRegionOnline(ri);<a name="line.1266"></a>
<span class="sourceLineNo">1267</span>    }<a name="line.1267"></a>
<span class="sourceLineNo">1268</span>    return true;<a name="line.1268"></a>
<span class="sourceLineNo">1269</span>  }<a name="line.1269"></a>
<span class="sourceLineNo">1270</span><a name="line.1270"></a>
<span class="sourceLineNo">1271</span>  /**<a name="line.1271"></a>
<span class="sourceLineNo">1272</span>   * Adds the {@code MasterQuotasObserver} to the list of configured Master observers to<a name="line.1272"></a>
<span class="sourceLineNo">1273</span>   * automatically remove quotas for a table when that table is deleted.<a name="line.1273"></a>
<span class="sourceLineNo">1274</span>   */<a name="line.1274"></a>
<span class="sourceLineNo">1275</span>  @VisibleForTesting<a name="line.1275"></a>
<span class="sourceLineNo">1276</span>  public void updateConfigurationForQuotasObserver(Configuration conf) {<a name="line.1276"></a>
<span class="sourceLineNo">1277</span>    // We're configured to not delete quotas on table deletion, so we don't need to add the obs.<a name="line.1277"></a>
<span class="sourceLineNo">1278</span>    if (!conf.getBoolean(<a name="line.1278"></a>
<span class="sourceLineNo">1279</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE,<a name="line.1279"></a>
<span class="sourceLineNo">1280</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE_DEFAULT)) {<a name="line.1280"></a>
<span class="sourceLineNo">1281</span>      return;<a name="line.1281"></a>
<span class="sourceLineNo">1282</span>    }<a name="line.1282"></a>
<span class="sourceLineNo">1283</span>    String[] masterCoprocs = conf.getStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY);<a name="line.1283"></a>
<span class="sourceLineNo">1284</span>    final int length = null == masterCoprocs ? 0 : masterCoprocs.length;<a name="line.1284"></a>
<span class="sourceLineNo">1285</span>    String[] updatedCoprocs = new String[length + 1];<a name="line.1285"></a>
<span class="sourceLineNo">1286</span>    if (length &gt; 0) {<a name="line.1286"></a>
<span class="sourceLineNo">1287</span>      System.arraycopy(masterCoprocs, 0, updatedCoprocs, 0, masterCoprocs.length);<a name="line.1287"></a>
<span class="sourceLineNo">1288</span>    }<a name="line.1288"></a>
<span class="sourceLineNo">1289</span>    updatedCoprocs[length] = MasterQuotasObserver.class.getName();<a name="line.1289"></a>
<span class="sourceLineNo">1290</span>    conf.setStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, updatedCoprocs);<a name="line.1290"></a>
<span class="sourceLineNo">1291</span>  }<a name="line.1291"></a>
<span class="sourceLineNo">1292</span><a name="line.1292"></a>
<span class="sourceLineNo">1293</span>  private void initMobCleaner() {<a name="line.1293"></a>
<span class="sourceLineNo">1294</span>    this.expiredMobFileCleanerChore = new ExpiredMobFileCleanerChore(this);<a name="line.1294"></a>
<span class="sourceLineNo">1295</span>    getChoreService().scheduleChore(expiredMobFileCleanerChore);<a name="line.1295"></a>
<span class="sourceLineNo">1296</span><a name="line.1296"></a>
<span class="sourceLineNo">1297</span>    int mobCompactionPeriod = conf.getInt(MobConstants.MOB_COMPACTION_CHORE_PERIOD,<a name="line.1297"></a>
<span class="sourceLineNo">1298</span>        MobConstants.DEFAULT_MOB_COMPACTION_CHORE_PERIOD);<a name="line.1298"></a>
<span class="sourceLineNo">1299</span>    if (mobCompactionPeriod &gt; 0) {<a name="line.1299"></a>
<span class="sourceLineNo">1300</span>      this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.1300"></a>
<span class="sourceLineNo">1301</span>      getChoreService().scheduleChore(mobCompactChore);<a name="line.1301"></a>
<span class="sourceLineNo">1302</span>    } else {<a name="line.1302"></a>
<span class="sourceLineNo">1303</span>      LOG<a name="line.1303"></a>
<span class="sourceLineNo">1304</span>        .info("The period is " + mobCompactionPeriod + " seconds, MobCompactionChore is disabled");<a name="line.1304"></a>
<span class="sourceLineNo">1305</span>    }<a name="line.1305"></a>
<span class="sourceLineNo">1306</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<a name="line.1306"></a>
<span class="sourceLineNo">1307</span>  }<a name="line.1307"></a>
<span class="sourceLineNo">1308</span><a name="line.1308"></a>
<span class="sourceLineNo">1309</span>  /**<a name="line.1309"></a>
<span class="sourceLineNo">1310</span>   * &lt;p&gt;<a name="line.1310"></a>
<span class="sourceLineNo">1311</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.1311"></a>
<span class="sourceLineNo">1312</span>   * &lt;/p&gt;<a name="line.1312"></a>
<span class="sourceLineNo">1313</span>   * &lt;p&gt;<a name="line.1313"></a>
<span class="sourceLineNo">1314</span>   * Will be overridden in tests.<a name="line.1314"></a>
<span class="sourceLineNo">1315</span>   * &lt;/p&gt;<a name="line.1315"></a>
<span class="sourceLineNo">1316</span>   */<a name="line.1316"></a>
<span class="sourceLineNo">1317</span>  @VisibleForTesting<a name="line.1317"></a>
<span class="sourceLineNo">1318</span>  protected MasterMetaBootstrap createMetaBootstrap() {<a name="line.1318"></a>
<span class="sourceLineNo">1319</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1319"></a>
<span class="sourceLineNo">1320</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.1320"></a>
<span class="sourceLineNo">1321</span>    return new MasterMetaBootstrap(this);<a name="line.1321"></a>
<span class="sourceLineNo">1322</span>  }<a name="line.1322"></a>
<span class="sourceLineNo">1323</span><a name="line.1323"></a>
<span class="sourceLineNo">1324</span>  /**<a name="line.1324"></a>
<span class="sourceLineNo">1325</span>   * &lt;p&gt;<a name="line.1325"></a>
<span class="sourceLineNo">1326</span>   * Create a {@link ServerManager} instance.<a name="line.1326"></a>
<span class="sourceLineNo">1327</span>   * &lt;/p&gt;<a name="line.1327"></a>
<span class="sourceLineNo">1328</span>   * &lt;p&gt;<a name="line.1328"></a>
<span class="sourceLineNo">1329</span>   * Will be overridden in tests.<a name="line.1329"></a>
<span class="sourceLineNo">1330</span>   * &lt;/p&gt;<a name="line.1330"></a>
<span class="sourceLineNo">1331</span>   */<a name="line.1331"></a>
<span class="sourceLineNo">1332</span>  @VisibleForTesting<a name="line.1332"></a>
<span class="sourceLineNo">1333</span>  protected ServerManager createServerManager(final MasterServices master) throws IOException {<a name="line.1333"></a>
<span class="sourceLineNo">1334</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1334"></a>
<span class="sourceLineNo">1335</span>    // w/ a mocked up ServerManager.<a name="line.1335"></a>
<span class="sourceLineNo">1336</span>    setupClusterConnection();<a name="line.1336"></a>
<span class="sourceLineNo">1337</span>    return new ServerManager(master);<a name="line.1337"></a>
<span class="sourceLineNo">1338</span>  }<a name="line.1338"></a>
<span class="sourceLineNo">1339</span><a name="line.1339"></a>
<span class="sourceLineNo">1340</span>  private void waitForRegionServers(final MonitoredTask status)<a name="line.1340"></a>
<span class="sourceLineNo">1341</span>      throws IOException, InterruptedException {<a name="line.1341"></a>
<span class="sourceLineNo">1342</span>    this.serverManager.waitForRegionServers(status);<a name="line.1342"></a>
<span class="sourceLineNo">1343</span>  }<a name="line.1343"></a>
<span class="sourceLineNo">1344</span><a name="line.1344"></a>
<span class="sourceLineNo">1345</span>  // Will be overridden in tests<a name="line.1345"></a>
<span class="sourceLineNo">1346</span>  @VisibleForTesting<a name="line.1346"></a>
<span class="sourceLineNo">1347</span>  protected void initClusterSchemaService() throws IOException, InterruptedException {<a name="line.1347"></a>
<span class="sourceLineNo">1348</span>    this.clusterSchemaService = new ClusterSchemaServiceImpl(this);<a name="line.1348"></a>
<span class="sourceLineNo">1349</span>    this.clusterSchemaService.startAsync();<a name="line.1349"></a>
<span class="sourceLineNo">1350</span>    try {<a name="line.1350"></a>
<span class="sourceLineNo">1351</span>      this.clusterSchemaService.awaitRunning(getConfiguration().getInt(<a name="line.1351"></a>
<span class="sourceLineNo">1352</span>        HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS,<a name="line.1352"></a>
<span class="sourceLineNo">1353</span>        DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS), TimeUnit.SECONDS);<a name="line.1353"></a>
<span class="sourceLineNo">1354</span>    } catch (TimeoutException toe) {<a name="line.1354"></a>
<span class="sourceLineNo">1355</span>      throw new IOException("Timedout starting ClusterSchemaService", toe);<a name="line.1355"></a>
<span class="sourceLineNo">1356</span>    }<a name="line.1356"></a>
<span class="sourceLineNo">1357</span>  }<a name="line.1357"></a>
<span class="sourceLineNo">1358</span><a name="line.1358"></a>
<span class="sourceLineNo">1359</span>  private void initQuotaManager() throws IOException {<a name="line.1359"></a>
<span class="sourceLineNo">1360</span>    MasterQuotaManager quotaManager = new MasterQuotaManager(this);<a name="line.1360"></a>
<span class="sourceLineNo">1361</span>    quotaManager.start();<a name="line.1361"></a>
<span class="sourceLineNo">1362</span>    this.quotaManager = quotaManager;<a name="line.1362"></a>
<span class="sourceLineNo">1363</span>  }<a name="line.1363"></a>
<span class="sourceLineNo">1364</span><a name="line.1364"></a>
<span class="sourceLineNo">1365</span>  private SpaceQuotaSnapshotNotifier createQuotaSnapshotNotifier() {<a name="line.1365"></a>
<span class="sourceLineNo">1366</span>    SpaceQuotaSnapshotNotifier notifier =<a name="line.1366"></a>
<span class="sourceLineNo">1367</span>        SpaceQuotaSnapshotNotifierFactory.getInstance().create(getConfiguration());<a name="line.1367"></a>
<span class="sourceLineNo">1368</span>    return notifier;<a name="line.1368"></a>
<span class="sourceLineNo">1369</span>  }<a name="line.1369"></a>
<span class="sourceLineNo">1370</span><a name="line.1370"></a>
<span class="sourceLineNo">1371</span>  boolean isCatalogJanitorEnabled() {<a name="line.1371"></a>
<span class="sourceLineNo">1372</span>    return catalogJanitorChore != null ?<a name="line.1372"></a>
<span class="sourceLineNo">1373</span>      catalogJanitorChore.getEnabled() : false;<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>  boolean isCleanerChoreEnabled() {<a name="line.1376"></a>
<span class="sourceLineNo">1377</span>    boolean hfileCleanerFlag = true, logCleanerFlag = true;<a name="line.1377"></a>
<span class="sourceLineNo">1378</span><a name="line.1378"></a>
<span class="sourceLineNo">1379</span>    if (hfileCleaner != null) {<a name="line.1379"></a>
<span class="sourceLineNo">1380</span>      hfileCleanerFlag = hfileCleaner.getEnabled();<a name="line.1380"></a>
<span class="sourceLineNo">1381</span>    }<a name="line.1381"></a>
<span class="sourceLineNo">1382</span><a name="line.1382"></a>
<span class="sourceLineNo">1383</span>    if (logCleaner != null) {<a name="line.1383"></a>
<span class="sourceLineNo">1384</span>      logCleanerFlag = logCleaner.getEnabled();<a name="line.1384"></a>
<span class="sourceLineNo">1385</span>    }<a name="line.1385"></a>
<span class="sourceLineNo">1386</span><a name="line.1386"></a>
<span class="sourceLineNo">1387</span>    return (hfileCleanerFlag &amp;&amp; logCleanerFlag);<a name="line.1387"></a>
<span class="sourceLineNo">1388</span>  }<a name="line.1388"></a>
<span class="sourceLineNo">1389</span><a name="line.1389"></a>
<span class="sourceLineNo">1390</span>  @Override<a name="line.1390"></a>
<span class="sourceLineNo">1391</span>  public ServerManager getServerManager() {<a name="line.1391"></a>
<span class="sourceLineNo">1392</span>    return this.serverManager;<a name="line.1392"></a>
<span class="sourceLineNo">1393</span>  }<a name="line.1393"></a>
<span class="sourceLineNo">1394</span><a name="line.1394"></a>
<span class="sourceLineNo">1395</span>  @Override<a name="line.1395"></a>
<span class="sourceLineNo">1396</span>  public MasterFileSystem getMasterFileSystem() {<a name="line.1396"></a>
<span class="sourceLineNo">1397</span>    return this.fileSystemManager;<a name="line.1397"></a>
<span class="sourceLineNo">1398</span>  }<a name="line.1398"></a>
<span class="sourceLineNo">1399</span><a name="line.1399"></a>
<span class="sourceLineNo">1400</span>  @Override<a name="line.1400"></a>
<span class="sourceLineNo">1401</span>  public MasterWalManager getMasterWalManager() {<a name="line.1401"></a>
<span class="sourceLineNo">1402</span>    return this.walManager;<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>  public SplitWALManager getSplitWALManager() {<a name="line.1406"></a>
<span class="sourceLineNo">1407</span>    return splitWALManager;<a name="line.1407"></a>
<span class="sourceLineNo">1408</span>  }<a name="line.1408"></a>
<span class="sourceLineNo">1409</span><a name="line.1409"></a>
<span class="sourceLineNo">1410</span>  @Override<a name="line.1410"></a>
<span class="sourceLineNo">1411</span>  public TableStateManager getTableStateManager() {<a name="line.1411"></a>
<span class="sourceLineNo">1412</span>    return tableStateManager;<a name="line.1412"></a>
<span class="sourceLineNo">1413</span>  }<a name="line.1413"></a>
<span class="sourceLineNo">1414</span><a name="line.1414"></a>
<span class="sourceLineNo">1415</span>  /*<a name="line.1415"></a>
<span class="sourceLineNo">1416</span>   * Start up all services. If any of these threads gets an unhandled exception<a name="line.1416"></a>
<span class="sourceLineNo">1417</span>   * then they just die with a logged message.  This should be fine because<a name="line.1417"></a>
<span class="sourceLineNo">1418</span>   * in general, we do not expect the master to get such unhandled exceptions<a name="line.1418"></a>
<span class="sourceLineNo">1419</span>   *  as OOMEs; it should be lightly loaded. See what HRegionServer does if<a name="line.1419"></a>
<span class="sourceLineNo">1420</span>   *  need to install an unexpected exception handler.<a name="line.1420"></a>
<span class="sourceLineNo">1421</span>   */<a name="line.1421"></a>
<span class="sourceLineNo">1422</span>  private void startServiceThreads() throws IOException {<a name="line.1422"></a>
<span class="sourceLineNo">1423</span>    // Start the executor service pools<a name="line.1423"></a>
<span class="sourceLineNo">1424</span>    this.executorService.startExecutorService(ExecutorType.MASTER_OPEN_REGION, conf.getInt(<a name="line.1424"></a>
<span class="sourceLineNo">1425</span>      HConstants.MASTER_OPEN_REGION_THREADS, HConstants.MASTER_OPEN_REGION_THREADS_DEFAULT));<a name="line.1425"></a>
<span class="sourceLineNo">1426</span>    this.executorService.startExecutorService(ExecutorType.MASTER_CLOSE_REGION, conf.getInt(<a name="line.1426"></a>
<span class="sourceLineNo">1427</span>      HConstants.MASTER_CLOSE_REGION_THREADS, HConstants.MASTER_CLOSE_REGION_THREADS_DEFAULT));<a name="line.1427"></a>
<span class="sourceLineNo">1428</span>    this.executorService.startExecutorService(ExecutorType.MASTER_SERVER_OPERATIONS,<a name="line.1428"></a>
<span class="sourceLineNo">1429</span>      conf.getInt(HConstants.MASTER_SERVER_OPERATIONS_THREADS,<a name="line.1429"></a>
<span class="sourceLineNo">1430</span>        HConstants.MASTER_SERVER_OPERATIONS_THREADS_DEFAULT));<a name="line.1430"></a>
<span class="sourceLineNo">1431</span>    this.executorService.startExecutorService(ExecutorType.MASTER_META_SERVER_OPERATIONS,<a name="line.1431"></a>
<span class="sourceLineNo">1432</span>      conf.getInt(HConstants.MASTER_META_SERVER_OPERATIONS_THREADS,<a name="line.1432"></a>
<span class="sourceLineNo">1433</span>        HConstants.MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT));<a name="line.1433"></a>
<span class="sourceLineNo">1434</span>    this.executorService.startExecutorService(ExecutorType.M_LOG_REPLAY_OPS, conf.getInt(<a name="line.1434"></a>
<span class="sourceLineNo">1435</span>      HConstants.MASTER_LOG_REPLAY_OPS_THREADS, HConstants.MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT));<a name="line.1435"></a>
<span class="sourceLineNo">1436</span>    this.executorService.startExecutorService(ExecutorType.MASTER_SNAPSHOT_OPERATIONS,<a name="line.1436"></a>
<span class="sourceLineNo">1437</span>      conf.getInt(HConstants.MASTER_SNAPSHOT_OPERATIONS_THREADS,<a name="line.1437"></a>
<span class="sourceLineNo">1438</span>        HConstants.MASTER_SNAPSHOT_OPERATIONS_THREADS_DEFAULT));<a name="line.1438"></a>
<span class="sourceLineNo">1439</span><a name="line.1439"></a>
<span class="sourceLineNo">1440</span>   // We depend on there being only one instance of this executor running<a name="line.1440"></a>
<span class="sourceLineNo">1441</span>   // at a time.  To do concurrency, would need fencing of enable/disable of<a name="line.1441"></a>
<span class="sourceLineNo">1442</span>   // tables.<a name="line.1442"></a>
<span class="sourceLineNo">1443</span>   // Any time changing this maxThreads to &gt; 1, pls see the comment at<a name="line.1443"></a>
<span class="sourceLineNo">1444</span>   // AccessController#postCompletedCreateTableAction<a name="line.1444"></a>
<span class="sourceLineNo">1445</span>   this.executorService.startExecutorService(ExecutorType.MASTER_TABLE_OPERATIONS, 1);<a name="line.1445"></a>
<span class="sourceLineNo">1446</span>   startProcedureExecutor();<a name="line.1446"></a>
<span class="sourceLineNo">1447</span><a name="line.1447"></a>
<span class="sourceLineNo">1448</span>    // Initial cleaner chore<a name="line.1448"></a>
<span class="sourceLineNo">1449</span>    CleanerChore.initChorePool(conf);<a name="line.1449"></a>
<span class="sourceLineNo">1450</span>   // Start log cleaner thread<a name="line.1450"></a>
<span class="sourceLineNo">1451</span>   int cleanerInterval = conf.getInt("hbase.master.cleaner.interval", 600 * 1000);<a name="line.1451"></a>
<span class="sourceLineNo">1452</span>   this.logCleaner =<a name="line.1452"></a>
<span class="sourceLineNo">1453</span>      new LogCleaner(cleanerInterval,<a name="line.1453"></a>
<span class="sourceLineNo">1454</span>         this, conf, getMasterWalManager().getFileSystem(),<a name="line.1454"></a>
<span class="sourceLineNo">1455</span>         getMasterWalManager().getOldLogDir());<a name="line.1455"></a>
<span class="sourceLineNo">1456</span>    getChoreService().scheduleChore(logCleaner);<a name="line.1456"></a>
<span class="sourceLineNo">1457</span><a name="line.1457"></a>
<span class="sourceLineNo">1458</span>    // start the hfile archive cleaner thread<a name="line.1458"></a>
<span class="sourceLineNo">1459</span>    Path archiveDir = HFileArchiveUtil.getArchivePath(conf);<a name="line.1459"></a>
<span class="sourceLineNo">1460</span>    Map&lt;String, Object&gt; params = new HashMap&lt;&gt;();<a name="line.1460"></a>
<span class="sourceLineNo">1461</span>    params.put(MASTER, this);<a name="line.1461"></a>
<span class="sourceLineNo">1462</span>    this.hfileCleaner = new HFileCleaner(cleanerInterval, this, conf, getMasterFileSystem()<a name="line.1462"></a>
<span class="sourceLineNo">1463</span>        .getFileSystem(), archiveDir, params);<a name="line.1463"></a>
<span class="sourceLineNo">1464</span>    getChoreService().scheduleChore(hfileCleaner);<a name="line.1464"></a>
<span class="sourceLineNo">1465</span><a name="line.1465"></a>
<span class="sourceLineNo">1466</span>    replicationBarrierCleaner = new ReplicationBarrierCleaner(conf, this, getConnection(),<a name="line.1466"></a>
<span class="sourceLineNo">1467</span>      replicationPeerManager);<a name="line.1467"></a>
<span class="sourceLineNo">1468</span>    getChoreService().scheduleChore(replicationBarrierCleaner);<a name="line.1468"></a>
<span class="sourceLineNo">1469</span><a name="line.1469"></a>
<span class="sourceLineNo">1470</span>    final boolean isSnapshotChoreDisabled = conf.getBoolean(HConstants.SNAPSHOT_CLEANER_DISABLE,<a name="line.1470"></a>
<span class="sourceLineNo">1471</span>        false);<a name="line.1471"></a>
<span class="sourceLineNo">1472</span>    if (isSnapshotChoreDisabled) {<a name="line.1472"></a>
<span class="sourceLineNo">1473</span>      if (LOG.isTraceEnabled()) {<a name="line.1473"></a>
<span class="sourceLineNo">1474</span>        LOG.trace("Snapshot Cleaner Chore is disabled. Not starting up the chore..");<a name="line.1474"></a>
<span class="sourceLineNo">1475</span>      }<a name="line.1475"></a>
<span class="sourceLineNo">1476</span>    } else {<a name="line.1476"></a>
<span class="sourceLineNo">1477</span>      this.snapshotCleanerChore = new SnapshotCleanerChore(this, conf, getSnapshotManager());<a name="line.1477"></a>
<span class="sourceLineNo">1478</span>      getChoreService().scheduleChore(this.snapshotCleanerChore);<a name="line.1478"></a>
<span class="sourceLineNo">1479</span>    }<a name="line.1479"></a>
<span class="sourceLineNo">1480</span>    serviceStarted = true;<a name="line.1480"></a>
<span class="sourceLineNo">1481</span>    if (LOG.isTraceEnabled()) {<a name="line.1481"></a>
<span class="sourceLineNo">1482</span>      LOG.trace("Started service threads");<a name="line.1482"></a>
<span class="sourceLineNo">1483</span>    }<a name="line.1483"></a>
<span class="sourceLineNo">1484</span>  }<a name="line.1484"></a>
<span class="sourceLineNo">1485</span><a name="line.1485"></a>
<span class="sourceLineNo">1486</span>  @Override<a name="line.1486"></a>
<span class="sourceLineNo">1487</span>  protected void stopServiceThreads() {<a name="line.1487"></a>
<span class="sourceLineNo">1488</span>    if (masterJettyServer != null) {<a name="line.1488"></a>
<span class="sourceLineNo">1489</span>      LOG.info("Stopping master jetty server");<a name="line.1489"></a>
<span class="sourceLineNo">1490</span>      try {<a name="line.1490"></a>
<span class="sourceLineNo">1491</span>        masterJettyServer.stop();<a name="line.1491"></a>
<span class="sourceLineNo">1492</span>      } catch (Exception e) {<a name="line.1492"></a>
<span class="sourceLineNo">1493</span>        LOG.error("Failed to stop master jetty server", e);<a name="line.1493"></a>
<span class="sourceLineNo">1494</span>      }<a name="line.1494"></a>
<span class="sourceLineNo">1495</span>    }<a name="line.1495"></a>
<span class="sourceLineNo">1496</span>    stopChores();<a name="line.1496"></a>
<span class="sourceLineNo">1497</span>    if (this.mobCompactThread != null) {<a name="line.1497"></a>
<span class="sourceLineNo">1498</span>      this.mobCompactThread.close();<a name="line.1498"></a>
<span class="sourceLineNo">1499</span>    }<a name="line.1499"></a>
<span class="sourceLineNo">1500</span>    super.stopServiceThreads();<a name="line.1500"></a>
<span class="sourceLineNo">1501</span>    CleanerChore.shutDownChorePool();<a name="line.1501"></a>
<span class="sourceLineNo">1502</span><a name="line.1502"></a>
<span class="sourceLineNo">1503</span>    LOG.debug("Stopping service threads");<a name="line.1503"></a>
<span class="sourceLineNo">1504</span><a name="line.1504"></a>
<span class="sourceLineNo">1505</span>    if (this.quotaManager != null) {<a name="line.1505"></a>
<span class="sourceLineNo">1506</span>      this.quotaManager.stop();<a name="line.1506"></a>
<span class="sourceLineNo">1507</span>    }<a name="line.1507"></a>
<span class="sourceLineNo">1508</span><a name="line.1508"></a>
<span class="sourceLineNo">1509</span>    if (this.activeMasterManager != null) {<a name="line.1509"></a>
<span class="sourceLineNo">1510</span>      this.activeMasterManager.stop();<a name="line.1510"></a>
<span class="sourceLineNo">1511</span>    }<a name="line.1511"></a>
<span class="sourceLineNo">1512</span>    if (this.serverManager != null) {<a name="line.1512"></a>
<span class="sourceLineNo">1513</span>      this.serverManager.stop();<a name="line.1513"></a>
<span class="sourceLineNo">1514</span>    }<a name="line.1514"></a>
<span class="sourceLineNo">1515</span>    if (this.assignmentManager != null) {<a name="line.1515"></a>
<span class="sourceLineNo">1516</span>      this.assignmentManager.stop();<a name="line.1516"></a>
<span class="sourceLineNo">1517</span>    }<a name="line.1517"></a>
<span class="sourceLineNo">1518</span><a name="line.1518"></a>
<span class="sourceLineNo">1519</span>    stopProcedureExecutor();<a name="line.1519"></a>
<span class="sourceLineNo">1520</span><a name="line.1520"></a>
<span class="sourceLineNo">1521</span>    if (this.walManager != null) {<a name="line.1521"></a>
<span class="sourceLineNo">1522</span>      this.walManager.stop();<a name="line.1522"></a>
<span class="sourceLineNo">1523</span>    }<a name="line.1523"></a>
<span class="sourceLineNo">1524</span>    if (this.fileSystemManager != null) {<a name="line.1524"></a>
<span class="sourceLineNo">1525</span>      this.fileSystemManager.stop();<a name="line.1525"></a>
<span class="sourceLineNo">1526</span>    }<a name="line.1526"></a>
<span class="sourceLineNo">1527</span>    if (this.mpmHost != null) {<a name="line.1527"></a>
<span class="sourceLineNo">1528</span>      this.mpmHost.stop("server shutting down.");<a name="line.1528"></a>
<span class="sourceLineNo">1529</span>    }<a name="line.1529"></a>
<span class="sourceLineNo">1530</span>    if (this.regionServerTracker != null) {<a name="line.1530"></a>
<span class="sourceLineNo">1531</span>      this.regionServerTracker.stop();<a name="line.1531"></a>
<span class="sourceLineNo">1532</span>    }<a name="line.1532"></a>
<span class="sourceLineNo">1533</span>  }<a name="line.1533"></a>
<span class="sourceLineNo">1534</span><a name="line.1534"></a>
<span class="sourceLineNo">1535</span>  private void createProcedureExecutor() throws IOException {<a name="line.1535"></a>
<span class="sourceLineNo">1536</span>    MasterProcedureEnv procEnv = new MasterProcedureEnv(this);<a name="line.1536"></a>
<span class="sourceLineNo">1537</span>    procedureStore =<a name="line.1537"></a>
<span class="sourceLineNo">1538</span>      new WALProcedureStore(conf, new MasterProcedureEnv.WALStoreLeaseRecovery(this));<a name="line.1538"></a>
<span class="sourceLineNo">1539</span>    procedureStore.registerListener(new ProcedureStoreListener() {<a name="line.1539"></a>
<span class="sourceLineNo">1540</span><a name="line.1540"></a>
<span class="sourceLineNo">1541</span>      @Override<a name="line.1541"></a>
<span class="sourceLineNo">1542</span>      public void abortProcess() {<a name="line.1542"></a>
<span class="sourceLineNo">1543</span>        abort("The Procedure Store lost the lease", null);<a name="line.1543"></a>
<span class="sourceLineNo">1544</span>      }<a name="line.1544"></a>
<span class="sourceLineNo">1545</span>    });<a name="line.1545"></a>
<span class="sourceLineNo">1546</span>    MasterProcedureScheduler procedureScheduler = procEnv.getProcedureScheduler();<a name="line.1546"></a>
<span class="sourceLineNo">1547</span>    procedureExecutor = new ProcedureExecutor&lt;&gt;(conf, procEnv, procedureStore, procedureScheduler);<a name="line.1547"></a>
<span class="sourceLineNo">1548</span>    configurationManager.registerObserver(procEnv);<a name="line.1548"></a>
<span class="sourceLineNo">1549</span><a name="line.1549"></a>
<span class="sourceLineNo">1550</span>    int cpus = Runtime.getRuntime().availableProcessors();<a name="line.1550"></a>
<span class="sourceLineNo">1551</span>    final int numThreads = conf.getInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, Math.max(<a name="line.1551"></a>
<span class="sourceLineNo">1552</span>      (cpus &gt; 0 ? cpus / 4 : 0), MasterProcedureConstants.DEFAULT_MIN_MASTER_PROCEDURE_THREADS));<a name="line.1552"></a>
<span class="sourceLineNo">1553</span>    final boolean abortOnCorruption =<a name="line.1553"></a>
<span class="sourceLineNo">1554</span>      conf.getBoolean(MasterProcedureConstants.EXECUTOR_ABORT_ON_CORRUPTION,<a name="line.1554"></a>
<span class="sourceLineNo">1555</span>        MasterProcedureConstants.DEFAULT_EXECUTOR_ABORT_ON_CORRUPTION);<a name="line.1555"></a>
<span class="sourceLineNo">1556</span>    procedureStore.start(numThreads);<a name="line.1556"></a>
<span class="sourceLineNo">1557</span>    // Just initialize it but do not start the workers, we will start the workers later by calling<a name="line.1557"></a>
<span class="sourceLineNo">1558</span>    // startProcedureExecutor. See the javadoc for finishActiveMasterInitialization for more<a name="line.1558"></a>
<span class="sourceLineNo">1559</span>    // details.<a name="line.1559"></a>
<span class="sourceLineNo">1560</span>    procedureExecutor.init(numThreads, abortOnCorruption);<a name="line.1560"></a>
<span class="sourceLineNo">1561</span>    procEnv.getRemoteDispatcher().start();<a name="line.1561"></a>
<span class="sourceLineNo">1562</span>  }<a name="line.1562"></a>
<span class="sourceLineNo">1563</span><a name="line.1563"></a>
<span class="sourceLineNo">1564</span>  private void startProcedureExecutor() throws IOException {<a name="line.1564"></a>
<span class="sourceLineNo">1565</span>    procedureExecutor.startWorkers();<a name="line.1565"></a>
<span class="sourceLineNo">1566</span>  }<a name="line.1566"></a>
<span class="sourceLineNo">1567</span><a name="line.1567"></a>
<span class="sourceLineNo">1568</span>  private void stopProcedureExecutor() {<a name="line.1568"></a>
<span class="sourceLineNo">1569</span>    if (procedureExecutor != null) {<a name="line.1569"></a>
<span class="sourceLineNo">1570</span>      configurationManager.deregisterObserver(procedureExecutor.getEnvironment());<a name="line.1570"></a>
<span class="sourceLineNo">1571</span>      procedureExecutor.getEnvironment().getRemoteDispatcher().stop();<a name="line.1571"></a>
<span class="sourceLineNo">1572</span>      procedureExecutor.stop();<a name="line.1572"></a>
<span class="sourceLineNo">1573</span>      procedureExecutor.join();<a name="line.1573"></a>
<span class="sourceLineNo">1574</span>      procedureExecutor = null;<a name="line.1574"></a>
<span class="sourceLineNo">1575</span>    }<a name="line.1575"></a>
<span class="sourceLineNo">1576</span><a name="line.1576"></a>
<span class="sourceLineNo">1577</span>    if (procedureStore != null) {<a name="line.1577"></a>
<span class="sourceLineNo">1578</span>      procedureStore.stop(isAborted());<a name="line.1578"></a>
<span class="sourceLineNo">1579</span>      procedureStore = null;<a name="line.1579"></a>
<span class="sourceLineNo">1580</span>    }<a name="line.1580"></a>
<span class="sourceLineNo">1581</span>  }<a name="line.1581"></a>
<span class="sourceLineNo">1582</span><a name="line.1582"></a>
<span class="sourceLineNo">1583</span>  private void stopChores() {<a name="line.1583"></a>
<span class="sourceLineNo">1584</span>    ChoreService choreService = getChoreService();<a name="line.1584"></a>
<span class="sourceLineNo">1585</span>    if (choreService != null) {<a name="line.1585"></a>
<span class="sourceLineNo">1586</span>      choreService.cancelChore(this.expiredMobFileCleanerChore);<a name="line.1586"></a>
<span class="sourceLineNo">1587</span>      choreService.cancelChore(this.mobCompactChore);<a name="line.1587"></a>
<span class="sourceLineNo">1588</span>      choreService.cancelChore(this.balancerChore);<a name="line.1588"></a>
<span class="sourceLineNo">1589</span>      choreService.cancelChore(this.normalizerChore);<a name="line.1589"></a>
<span class="sourceLineNo">1590</span>      choreService.cancelChore(this.clusterStatusChore);<a name="line.1590"></a>
<span class="sourceLineNo">1591</span>      choreService.cancelChore(this.catalogJanitorChore);<a name="line.1591"></a>
<span class="sourceLineNo">1592</span>      choreService.cancelChore(this.clusterStatusPublisherChore);<a name="line.1592"></a>
<span class="sourceLineNo">1593</span>      choreService.cancelChore(this.snapshotQuotaChore);<a name="line.1593"></a>
<span class="sourceLineNo">1594</span>      choreService.cancelChore(this.logCleaner);<a name="line.1594"></a>
<span class="sourceLineNo">1595</span>      choreService.cancelChore(this.hfileCleaner);<a name="line.1595"></a>
<span class="sourceLineNo">1596</span>      choreService.cancelChore(this.replicationBarrierCleaner);<a name="line.1596"></a>
<span class="sourceLineNo">1597</span>      choreService.cancelChore(this.snapshotCleanerChore);<a name="line.1597"></a>
<span class="sourceLineNo">1598</span>      choreService.cancelChore(this.hbckChore);<a name="line.1598"></a>
<span class="sourceLineNo">1599</span>    }<a name="line.1599"></a>
<span class="sourceLineNo">1600</span>  }<a name="line.1600"></a>
<span class="sourceLineNo">1601</span><a name="line.1601"></a>
<span class="sourceLineNo">1602</span>  /**<a name="line.1602"></a>
<span class="sourceLineNo">1603</span>   * @return Get remote side's InetAddress<a name="line.1603"></a>
<span class="sourceLineNo">1604</span>   */<a name="line.1604"></a>
<span class="sourceLineNo">1605</span>  InetAddress getRemoteInetAddress(final int port,<a name="line.1605"></a>
<span class="sourceLineNo">1606</span>      final long serverStartCode) throws UnknownHostException {<a name="line.1606"></a>
<span class="sourceLineNo">1607</span>    // Do it out here in its own little method so can fake an address when<a name="line.1607"></a>
<span class="sourceLineNo">1608</span>    // mocking up in tests.<a name="line.1608"></a>
<span class="sourceLineNo">1609</span>    InetAddress ia = RpcServer.getRemoteIp();<a name="line.1609"></a>
<span class="sourceLineNo">1610</span><a name="line.1610"></a>
<span class="sourceLineNo">1611</span>    // The call could be from the local regionserver,<a name="line.1611"></a>
<span class="sourceLineNo">1612</span>    // in which case, there is no remote address.<a name="line.1612"></a>
<span class="sourceLineNo">1613</span>    if (ia == null &amp;&amp; serverStartCode == startcode) {<a name="line.1613"></a>
<span class="sourceLineNo">1614</span>      InetSocketAddress isa = rpcServices.getSocketAddress();<a name="line.1614"></a>
<span class="sourceLineNo">1615</span>      if (isa != null &amp;&amp; isa.getPort() == port) {<a name="line.1615"></a>
<span class="sourceLineNo">1616</span>        ia = isa.getAddress();<a name="line.1616"></a>
<span class="sourceLineNo">1617</span>      }<a name="line.1617"></a>
<span class="sourceLineNo">1618</span>    }<a name="line.1618"></a>
<span class="sourceLineNo">1619</span>    return ia;<a name="line.1619"></a>
<span class="sourceLineNo">1620</span>  }<a name="line.1620"></a>
<span class="sourceLineNo">1621</span><a name="line.1621"></a>
<span class="sourceLineNo">1622</span>  /**<a name="line.1622"></a>
<span class="sourceLineNo">1623</span>   * @return Maximum time we should run balancer for<a name="line.1623"></a>
<span class="sourceLineNo">1624</span>   */<a name="line.1624"></a>
<span class="sourceLineNo">1625</span>  private int getMaxBalancingTime() {<a name="line.1625"></a>
<span class="sourceLineNo">1626</span>    int maxBalancingTime = getConfiguration().getInt(HConstants.HBASE_BALANCER_MAX_BALANCING, -1);<a name="line.1626"></a>
<span class="sourceLineNo">1627</span>    if (maxBalancingTime == -1) {<a name="line.1627"></a>
<span class="sourceLineNo">1628</span>      // if max balancing time isn't set, defaulting it to period time<a name="line.1628"></a>
<span class="sourceLineNo">1629</span>      maxBalancingTime = getConfiguration().getInt(HConstants.HBASE_BALANCER_PERIOD,<a name="line.1629"></a>
<span class="sourceLineNo">1630</span>        HConstants.DEFAULT_HBASE_BALANCER_PERIOD);<a name="line.1630"></a>
<span class="sourceLineNo">1631</span>    }<a name="line.1631"></a>
<span class="sourceLineNo">1632</span>    return maxBalancingTime;<a name="line.1632"></a>
<span class="sourceLineNo">1633</span>  }<a name="line.1633"></a>
<span class="sourceLineNo">1634</span><a name="line.1634"></a>
<span class="sourceLineNo">1635</span>  /**<a name="line.1635"></a>
<span class="sourceLineNo">1636</span>   * @return Maximum number of regions in transition<a name="line.1636"></a>
<span class="sourceLineNo">1637</span>   */<a name="line.1637"></a>
<span class="sourceLineNo">1638</span>  private int getMaxRegionsInTransition() {<a name="line.1638"></a>
<span class="sourceLineNo">1639</span>    int numRegions = this.assignmentManager.getRegionStates().getRegionAssignments().size();<a name="line.1639"></a>
<span class="sourceLineNo">1640</span>    return Math.max((int) Math.floor(numRegions * this.maxRitPercent), 1);<a name="line.1640"></a>
<span class="sourceLineNo">1641</span>  }<a name="line.1641"></a>
<span class="sourceLineNo">1642</span><a name="line.1642"></a>
<span class="sourceLineNo">1643</span>  /**<a name="line.1643"></a>
<span class="sourceLineNo">1644</span>   * It first sleep to the next balance plan start time. Meanwhile, throttling by the max<a name="line.1644"></a>
<span class="sourceLineNo">1645</span>   * number regions in transition to protect availability.<a name="line.1645"></a>
<span class="sourceLineNo">1646</span>   * @param nextBalanceStartTime The next balance plan start time<a name="line.1646"></a>
<span class="sourceLineNo">1647</span>   * @param maxRegionsInTransition max number of regions in transition<a name="line.1647"></a>
<span class="sourceLineNo">1648</span>   * @param cutoffTime when to exit balancer<a name="line.1648"></a>
<span class="sourceLineNo">1649</span>   */<a name="line.1649"></a>
<span class="sourceLineNo">1650</span>  private void balanceThrottling(long nextBalanceStartTime, int maxRegionsInTransition,<a name="line.1650"></a>
<span class="sourceLineNo">1651</span>      long cutoffTime) {<a name="line.1651"></a>
<span class="sourceLineNo">1652</span>    boolean interrupted = false;<a name="line.1652"></a>
<span class="sourceLineNo">1653</span><a name="line.1653"></a>
<span class="sourceLineNo">1654</span>    // Sleep to next balance plan start time<a name="line.1654"></a>
<span class="sourceLineNo">1655</span>    // But if there are zero regions in transition, it can skip sleep to speed up.<a name="line.1655"></a>
<span class="sourceLineNo">1656</span>    while (!interrupted &amp;&amp; System.currentTimeMillis() &lt; nextBalanceStartTime<a name="line.1656"></a>
<span class="sourceLineNo">1657</span>        &amp;&amp; this.assignmentManager.getRegionStates().hasRegionsInTransition()) {<a name="line.1657"></a>
<span class="sourceLineNo">1658</span>      try {<a name="line.1658"></a>
<span class="sourceLineNo">1659</span>        Thread.sleep(100);<a name="line.1659"></a>
<span class="sourceLineNo">1660</span>      } catch (InterruptedException ie) {<a name="line.1660"></a>
<span class="sourceLineNo">1661</span>        interrupted = true;<a name="line.1661"></a>
<span class="sourceLineNo">1662</span>      }<a name="line.1662"></a>
<span class="sourceLineNo">1663</span>    }<a name="line.1663"></a>
<span class="sourceLineNo">1664</span><a name="line.1664"></a>
<span class="sourceLineNo">1665</span>    // Throttling by max number regions in transition<a name="line.1665"></a>
<span class="sourceLineNo">1666</span>    while (!interrupted<a name="line.1666"></a>
<span class="sourceLineNo">1667</span>        &amp;&amp; maxRegionsInTransition &gt; 0<a name="line.1667"></a>
<span class="sourceLineNo">1668</span>        &amp;&amp; this.assignmentManager.getRegionStates().getRegionsInTransitionCount()<a name="line.1668"></a>
<span class="sourceLineNo">1669</span>        &gt;= maxRegionsInTransition &amp;&amp; System.currentTimeMillis() &lt;= cutoffTime) {<a name="line.1669"></a>
<span class="sourceLineNo">1670</span>      try {<a name="line.1670"></a>
<span class="sourceLineNo">1671</span>        // sleep if the number of regions in transition exceeds the limit<a name="line.1671"></a>
<span class="sourceLineNo">1672</span>        Thread.sleep(100);<a name="line.1672"></a>
<span class="sourceLineNo">1673</span>      } catch (InterruptedException ie) {<a name="line.1673"></a>
<span class="sourceLineNo">1674</span>        interrupted = true;<a name="line.1674"></a>
<span class="sourceLineNo">1675</span>      }<a name="line.1675"></a>
<span class="sourceLineNo">1676</span>    }<a name="line.1676"></a>
<span class="sourceLineNo">1677</span><a name="line.1677"></a>
<span class="sourceLineNo">1678</span>    if (interrupted) Thread.currentThread().interrupt();<a name="line.1678"></a>
<span class="sourceLineNo">1679</span>  }<a name="line.1679"></a>
<span class="sourceLineNo">1680</span><a name="line.1680"></a>
<span class="sourceLineNo">1681</span>  public boolean balance() throws IOException {<a name="line.1681"></a>
<span class="sourceLineNo">1682</span>    return balance(false);<a name="line.1682"></a>
<span class="sourceLineNo">1683</span>  }<a name="line.1683"></a>
<span class="sourceLineNo">1684</span><a name="line.1684"></a>
<span class="sourceLineNo">1685</span>  public boolean balance(boolean force) throws IOException {<a name="line.1685"></a>
<span class="sourceLineNo">1686</span>    // if master not initialized, don't run balancer.<a name="line.1686"></a>
<span class="sourceLineNo">1687</span>    if (!isInitialized()) {<a name="line.1687"></a>
<span class="sourceLineNo">1688</span>      LOG.debug("Master has not been initialized, don't run balancer.");<a name="line.1688"></a>
<span class="sourceLineNo">1689</span>      return false;<a name="line.1689"></a>
<span class="sourceLineNo">1690</span>    }<a name="line.1690"></a>
<span class="sourceLineNo">1691</span><a name="line.1691"></a>
<span class="sourceLineNo">1692</span>    if (isInMaintenanceMode()) {<a name="line.1692"></a>
<span class="sourceLineNo">1693</span>      LOG.info("Master is in maintenanceMode mode, don't run balancer.");<a name="line.1693"></a>
<span class="sourceLineNo">1694</span>      return false;<a name="line.1694"></a>
<span class="sourceLineNo">1695</span>    }<a name="line.1695"></a>
<span class="sourceLineNo">1696</span><a name="line.1696"></a>
<span class="sourceLineNo">1697</span>    synchronized (this.balancer) {<a name="line.1697"></a>
<span class="sourceLineNo">1698</span>      // If balance not true, don't run balancer.<a name="line.1698"></a>
<span class="sourceLineNo">1699</span>      if (!this.loadBalancerTracker.isBalancerOn()) return false;<a name="line.1699"></a>
<span class="sourceLineNo">1700</span>        // Only allow one balance run at at time.<a name="line.1700"></a>
<span class="sourceLineNo">1701</span>      if (this.assignmentManager.hasRegionsInTransition()) {<a name="line.1701"></a>
<span class="sourceLineNo">1702</span>        List&lt;RegionStateNode&gt; regionsInTransition = assignmentManager.getRegionsInTransition();<a name="line.1702"></a>
<span class="sourceLineNo">1703</span>        // if hbase:meta region is in transition, result of assignment cannot be recorded<a name="line.1703"></a>
<span class="sourceLineNo">1704</span>        // ignore the force flag in that case<a name="line.1704"></a>
<span class="sourceLineNo">1705</span>        boolean metaInTransition = assignmentManager.isMetaRegionInTransition();<a name="line.1705"></a>
<span class="sourceLineNo">1706</span>        String prefix = force &amp;&amp; !metaInTransition ? "R" : "Not r";<a name="line.1706"></a>
<span class="sourceLineNo">1707</span>        List&lt;RegionStateNode&gt; toPrint = regionsInTransition;<a name="line.1707"></a>
<span class="sourceLineNo">1708</span>        int max = 5;<a name="line.1708"></a>
<span class="sourceLineNo">1709</span>        boolean truncated = false;<a name="line.1709"></a>
<span class="sourceLineNo">1710</span>        if (regionsInTransition.size() &gt; max) {<a name="line.1710"></a>
<span class="sourceLineNo">1711</span>          toPrint = regionsInTransition.subList(0, max);<a name="line.1711"></a>
<span class="sourceLineNo">1712</span>          truncated = true;<a name="line.1712"></a>
<span class="sourceLineNo">1713</span>        }<a name="line.1713"></a>
<span class="sourceLineNo">1714</span>        LOG.info(prefix + "unning balancer because " + regionsInTransition.size() +<a name="line.1714"></a>
<span class="sourceLineNo">1715</span>          " region(s) in transition: " + toPrint + (truncated? "(truncated list)": ""));<a name="line.1715"></a>
<span class="sourceLineNo">1716</span>        if (!force || metaInTransition) return false;<a name="line.1716"></a>
<span class="sourceLineNo">1717</span>      }<a name="line.1717"></a>
<span class="sourceLineNo">1718</span>      if (this.serverManager.areDeadServersInProgress()) {<a name="line.1718"></a>
<span class="sourceLineNo">1719</span>        LOG.info("Not running balancer because processing dead regionserver(s): " +<a name="line.1719"></a>
<span class="sourceLineNo">1720</span>          this.serverManager.getDeadServers());<a name="line.1720"></a>
<span class="sourceLineNo">1721</span>        return false;<a name="line.1721"></a>
<span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
<span class="sourceLineNo">1723</span><a name="line.1723"></a>
<span class="sourceLineNo">1724</span>      if (this.cpHost != null) {<a name="line.1724"></a>
<span class="sourceLineNo">1725</span>        try {<a name="line.1725"></a>
<span class="sourceLineNo">1726</span>          if (this.cpHost.preBalance()) {<a name="line.1726"></a>
<span class="sourceLineNo">1727</span>            LOG.debug("Coprocessor bypassing balancer request");<a name="line.1727"></a>
<span class="sourceLineNo">1728</span>            return false;<a name="line.1728"></a>
<span class="sourceLineNo">1729</span>          }<a name="line.1729"></a>
<span class="sourceLineNo">1730</span>        } catch (IOException ioe) {<a name="line.1730"></a>
<span class="sourceLineNo">1731</span>          LOG.error("Error invoking master coprocessor preBalance()", ioe);<a name="line.1731"></a>
<span class="sourceLineNo">1732</span>          return false;<a name="line.1732"></a>
<span class="sourceLineNo">1733</span>        }<a name="line.1733"></a>
<span class="sourceLineNo">1734</span>      }<a name="line.1734"></a>
<span class="sourceLineNo">1735</span><a name="line.1735"></a>
<span class="sourceLineNo">1736</span>      boolean isByTable = getConfiguration().getBoolean("hbase.master.loadbalance.bytable", false);<a name="line.1736"></a>
<span class="sourceLineNo">1737</span>      Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; assignments =<a name="line.1737"></a>
<span class="sourceLineNo">1738</span>          this.assignmentManager.getRegionStates().getAssignmentsForBalancer(isByTable);<a name="line.1738"></a>
<span class="sourceLineNo">1739</span>      for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; serverMap : assignments.values()) {<a name="line.1739"></a>
<span class="sourceLineNo">1740</span>        serverMap.keySet().removeAll(this.serverManager.getDrainingServersList());<a name="line.1740"></a>
<span class="sourceLineNo">1741</span>      }<a name="line.1741"></a>
<span class="sourceLineNo">1742</span><a name="line.1742"></a>
<span class="sourceLineNo">1743</span>      //Give the balancer the current cluster state.<a name="line.1743"></a>
<span class="sourceLineNo">1744</span>      this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1744"></a>
<span class="sourceLineNo">1745</span>      this.balancer.setClusterLoad(assignments);<a name="line.1745"></a>
<span class="sourceLineNo">1746</span><a name="line.1746"></a>
<span class="sourceLineNo">1747</span>      List&lt;RegionPlan&gt; plans = new ArrayList&lt;&gt;();<a name="line.1747"></a>
<span class="sourceLineNo">1748</span>      for (Entry&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; e : assignments.entrySet()) {<a name="line.1748"></a>
<span class="sourceLineNo">1749</span>        List&lt;RegionPlan&gt; partialPlans = this.balancer.balanceCluster(e.getKey(), e.getValue());<a name="line.1749"></a>
<span class="sourceLineNo">1750</span>        if (partialPlans != null) {<a name="line.1750"></a>
<span class="sourceLineNo">1751</span>          plans.addAll(partialPlans);<a name="line.1751"></a>
<span class="sourceLineNo">1752</span>        }<a name="line.1752"></a>
<span class="sourceLineNo">1753</span>      }<a name="line.1753"></a>
<span class="sourceLineNo">1754</span><a name="line.1754"></a>
<span class="sourceLineNo">1755</span>      List&lt;RegionPlan&gt; sucRPs = executeRegionPlansWithThrottling(plans);<a name="line.1755"></a>
<span class="sourceLineNo">1756</span><a name="line.1756"></a>
<span class="sourceLineNo">1757</span>      if (this.cpHost != null) {<a name="line.1757"></a>
<span class="sourceLineNo">1758</span>        try {<a name="line.1758"></a>
<span class="sourceLineNo">1759</span>          this.cpHost.postBalance(sucRPs);<a name="line.1759"></a>
<span class="sourceLineNo">1760</span>        } catch (IOException ioe) {<a name="line.1760"></a>
<span class="sourceLineNo">1761</span>          // balancing already succeeded so don't change the result<a name="line.1761"></a>
<span class="sourceLineNo">1762</span>          LOG.error("Error invoking master coprocessor postBalance()", ioe);<a name="line.1762"></a>
<span class="sourceLineNo">1763</span>        }<a name="line.1763"></a>
<span class="sourceLineNo">1764</span>      }<a name="line.1764"></a>
<span class="sourceLineNo">1765</span>    }<a name="line.1765"></a>
<span class="sourceLineNo">1766</span>    // If LoadBalancer did not generate any plans, it means the cluster is already balanced.<a name="line.1766"></a>
<span class="sourceLineNo">1767</span>    // Return true indicating a success.<a name="line.1767"></a>
<span class="sourceLineNo">1768</span>    return true;<a name="line.1768"></a>
<span class="sourceLineNo">1769</span>  }<a name="line.1769"></a>
<span class="sourceLineNo">1770</span><a name="line.1770"></a>
<span class="sourceLineNo">1771</span>  public List&lt;RegionPlan&gt; executeRegionPlansWithThrottling(List&lt;RegionPlan&gt; plans) {<a name="line.1771"></a>
<span class="sourceLineNo">1772</span>    List&lt;RegionPlan&gt; sucRPs = new ArrayList&lt;&gt;();<a name="line.1772"></a>
<span class="sourceLineNo">1773</span>    int maxRegionsInTransition = getMaxRegionsInTransition();<a name="line.1773"></a>
<span class="sourceLineNo">1774</span>    long balanceStartTime = System.currentTimeMillis();<a name="line.1774"></a>
<span class="sourceLineNo">1775</span>    long cutoffTime = balanceStartTime + this.maxBlancingTime;<a name="line.1775"></a>
<span class="sourceLineNo">1776</span>    int rpCount = 0;  // number of RegionPlans balanced so far<a name="line.1776"></a>
<span class="sourceLineNo">1777</span>    if (plans != null &amp;&amp; !plans.isEmpty()) {<a name="line.1777"></a>
<span class="sourceLineNo">1778</span>      int balanceInterval = this.maxBlancingTime / plans.size();<a name="line.1778"></a>
<span class="sourceLineNo">1779</span>      LOG.info("Balancer plans size is " + plans.size() + ", the balance interval is "<a name="line.1779"></a>
<span class="sourceLineNo">1780</span>          + balanceInterval + " ms, and the max number regions in transition is "<a name="line.1780"></a>
<span class="sourceLineNo">1781</span>          + maxRegionsInTransition);<a name="line.1781"></a>
<span class="sourceLineNo">1782</span><a name="line.1782"></a>
<span class="sourceLineNo">1783</span>      for (RegionPlan plan: plans) {<a name="line.1783"></a>
<span class="sourceLineNo">1784</span>        LOG.info("balance " + plan);<a name="line.1784"></a>
<span class="sourceLineNo">1785</span>        //TODO: bulk assign<a name="line.1785"></a>
<span class="sourceLineNo">1786</span>        try {<a name="line.1786"></a>
<span class="sourceLineNo">1787</span>          this.assignmentManager.moveAsync(plan);<a name="line.1787"></a>
<span class="sourceLineNo">1788</span>        } catch (HBaseIOException hioe) {<a name="line.1788"></a>
<span class="sourceLineNo">1789</span>          //should ignore failed plans here, avoiding the whole balance plans be aborted<a name="line.1789"></a>
<span class="sourceLineNo">1790</span>          //later calls of balance() can fetch up the failed and skipped plans<a name="line.1790"></a>
<span class="sourceLineNo">1791</span>          LOG.warn("Failed balance plan: {}, just skip it", plan, hioe);<a name="line.1791"></a>
<span class="sourceLineNo">1792</span>        }<a name="line.1792"></a>
<span class="sourceLineNo">1793</span>        //rpCount records balance plans processed, does not care if a plan succeeds<a name="line.1793"></a>
<span class="sourceLineNo">1794</span>        rpCount++;<a name="line.1794"></a>
<span class="sourceLineNo">1795</span><a name="line.1795"></a>
<span class="sourceLineNo">1796</span>        balanceThrottling(balanceStartTime + rpCount * balanceInterval, maxRegionsInTransition,<a name="line.1796"></a>
<span class="sourceLineNo">1797</span>            cutoffTime);<a name="line.1797"></a>
<span class="sourceLineNo">1798</span><a name="line.1798"></a>
<span class="sourceLineNo">1799</span>        // if performing next balance exceeds cutoff time, exit the loop<a name="line.1799"></a>
<span class="sourceLineNo">1800</span>        if (rpCount &lt; plans.size() &amp;&amp; System.currentTimeMillis() &gt; cutoffTime) {<a name="line.1800"></a>
<span class="sourceLineNo">1801</span>          // TODO: After balance, there should not be a cutoff time (keeping it as<a name="line.1801"></a>
<span class="sourceLineNo">1802</span>          // a security net for now)<a name="line.1802"></a>
<span class="sourceLineNo">1803</span>          LOG.debug("No more balancing till next balance run; maxBalanceTime="<a name="line.1803"></a>
<span class="sourceLineNo">1804</span>              + this.maxBlancingTime);<a name="line.1804"></a>
<span class="sourceLineNo">1805</span>          break;<a name="line.1805"></a>
<span class="sourceLineNo">1806</span>        }<a name="line.1806"></a>
<span class="sourceLineNo">1807</span>      }<a name="line.1807"></a>
<span class="sourceLineNo">1808</span>    }<a name="line.1808"></a>
<span class="sourceLineNo">1809</span>    return sucRPs;<a name="line.1809"></a>
<span class="sourceLineNo">1810</span>  }<a name="line.1810"></a>
<span class="sourceLineNo">1811</span><a name="line.1811"></a>
<span class="sourceLineNo">1812</span>  @Override<a name="line.1812"></a>
<span class="sourceLineNo">1813</span>  @VisibleForTesting<a name="line.1813"></a>
<span class="sourceLineNo">1814</span>  public RegionNormalizer getRegionNormalizer() {<a name="line.1814"></a>
<span class="sourceLineNo">1815</span>    return this.normalizer;<a name="line.1815"></a>
<span class="sourceLineNo">1816</span>  }<a name="line.1816"></a>
<span class="sourceLineNo">1817</span><a name="line.1817"></a>
<span class="sourceLineNo">1818</span>  /**<a name="line.1818"></a>
<span class="sourceLineNo">1819</span>   * Perform normalization of cluster (invoked by {@link RegionNormalizerChore}).<a name="line.1819"></a>
<span class="sourceLineNo">1820</span>   *<a name="line.1820"></a>
<span class="sourceLineNo">1821</span>   * @return true if normalization step was performed successfully, false otherwise<a name="line.1821"></a>
<span class="sourceLineNo">1822</span>   *    (specifically, if HMaster hasn't been initialized properly or normalization<a name="line.1822"></a>
<span class="sourceLineNo">1823</span>   *    is globally disabled)<a name="line.1823"></a>
<span class="sourceLineNo">1824</span>   */<a name="line.1824"></a>
<span class="sourceLineNo">1825</span>  public boolean normalizeRegions() throws IOException {<a name="line.1825"></a>
<span class="sourceLineNo">1826</span>    if (!isInitialized()) {<a name="line.1826"></a>
<span class="sourceLineNo">1827</span>      LOG.debug("Master has not been initialized, don't run region normalizer.");<a name="line.1827"></a>
<span class="sourceLineNo">1828</span>      return false;<a name="line.1828"></a>
<span class="sourceLineNo">1829</span>    }<a name="line.1829"></a>
<span class="sourceLineNo">1830</span>    if (this.getServerManager().isClusterShutdown()) {<a name="line.1830"></a>
<span class="sourceLineNo">1831</span>      LOG.info("Cluster is shutting down, don't run region normalizer.");<a name="line.1831"></a>
<span class="sourceLineNo">1832</span>      return false;<a name="line.1832"></a>
<span class="sourceLineNo">1833</span>    }<a name="line.1833"></a>
<span class="sourceLineNo">1834</span>    if (isInMaintenanceMode()) {<a name="line.1834"></a>
<span class="sourceLineNo">1835</span>      LOG.info("Master is in maintenance mode, don't run region normalizer.");<a name="line.1835"></a>
<span class="sourceLineNo">1836</span>      return false;<a name="line.1836"></a>
<span class="sourceLineNo">1837</span>    }<a name="line.1837"></a>
<span class="sourceLineNo">1838</span>    if (!this.regionNormalizerTracker.isNormalizerOn()) {<a name="line.1838"></a>
<span class="sourceLineNo">1839</span>      LOG.debug("Region normalization is disabled, don't run region normalizer.");<a name="line.1839"></a>
<span class="sourceLineNo">1840</span>      return false;<a name="line.1840"></a>
<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
<span class="sourceLineNo">1842</span><a name="line.1842"></a>
<span class="sourceLineNo">1843</span>    synchronized (this.normalizer) {<a name="line.1843"></a>
<span class="sourceLineNo">1844</span>      // Don't run the normalizer concurrently<a name="line.1844"></a>
<span class="sourceLineNo">1845</span>      List&lt;TableName&gt; allEnabledTables = new ArrayList&lt;&gt;(<a name="line.1845"></a>
<span class="sourceLineNo">1846</span>        this.tableStateManager.getTablesInStates(TableState.State.ENABLED));<a name="line.1846"></a>
<span class="sourceLineNo">1847</span><a name="line.1847"></a>
<span class="sourceLineNo">1848</span>      Collections.shuffle(allEnabledTables);<a name="line.1848"></a>
<span class="sourceLineNo">1849</span><a name="line.1849"></a>
<span class="sourceLineNo">1850</span>      for (TableName table : allEnabledTables) {<a name="line.1850"></a>
<span class="sourceLineNo">1851</span>        if (isInMaintenanceMode()) {<a name="line.1851"></a>
<span class="sourceLineNo">1852</span>          LOG.debug("Master is in maintenance mode, stop running region normalizer.");<a name="line.1852"></a>
<span class="sourceLineNo">1853</span>          return false;<a name="line.1853"></a>
<span class="sourceLineNo">1854</span>        }<a name="line.1854"></a>
<span class="sourceLineNo">1855</span><a name="line.1855"></a>
<span class="sourceLineNo">1856</span>        TableDescriptor tblDesc = getTableDescriptors().get(table);<a name="line.1856"></a>
<span class="sourceLineNo">1857</span>        if (table.isSystemTable() || (tblDesc != null &amp;&amp;<a name="line.1857"></a>
<span class="sourceLineNo">1858</span>            !tblDesc.isNormalizationEnabled())) {<a name="line.1858"></a>
<span class="sourceLineNo">1859</span>          LOG.trace("Skipping normalization for {}, as it's either system"<a name="line.1859"></a>
<span class="sourceLineNo">1860</span>              + " table or doesn't have auto normalization turned on", table);<a name="line.1860"></a>
<span class="sourceLineNo">1861</span>          continue;<a name="line.1861"></a>
<span class="sourceLineNo">1862</span>        }<a name="line.1862"></a>
<span class="sourceLineNo">1863</span>        List&lt;NormalizationPlan&gt; plans = this.normalizer.computePlanForTable(table);<a name="line.1863"></a>
<span class="sourceLineNo">1864</span>        if (plans != null) {<a name="line.1864"></a>
<span class="sourceLineNo">1865</span>          for (NormalizationPlan plan : plans) {<a name="line.1865"></a>
<span class="sourceLineNo">1866</span>            plan.execute(asyncClusterConnection.toConnection().getAdmin());<a name="line.1866"></a>
<span class="sourceLineNo">1867</span>            if (plan.getType() == PlanType.SPLIT) {<a name="line.1867"></a>
<span class="sourceLineNo">1868</span>              splitPlanCount++;<a name="line.1868"></a>
<span class="sourceLineNo">1869</span>            } else if (plan.getType() == PlanType.MERGE) {<a name="line.1869"></a>
<span class="sourceLineNo">1870</span>              mergePlanCount++;<a name="line.1870"></a>
<span class="sourceLineNo">1871</span>            }<a name="line.1871"></a>
<span class="sourceLineNo">1872</span>          }<a name="line.1872"></a>
<span class="sourceLineNo">1873</span>        }<a name="line.1873"></a>
<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
<span class="sourceLineNo">1876</span>    // If Region did not generate any plans, it means the cluster is already balanced.<a name="line.1876"></a>
<span class="sourceLineNo">1877</span>    // Return true indicating a success.<a name="line.1877"></a>
<span class="sourceLineNo">1878</span>    return true;<a name="line.1878"></a>
<span class="sourceLineNo">1879</span>  }<a name="line.1879"></a>
<span class="sourceLineNo">1880</span><a name="line.1880"></a>
<span class="sourceLineNo">1881</span>  /**<a name="line.1881"></a>
<span class="sourceLineNo">1882</span>   * @return Client info for use as prefix on an audit log string; who did an action<a name="line.1882"></a>
<span class="sourceLineNo">1883</span>   */<a name="line.1883"></a>
<span class="sourceLineNo">1884</span>  @Override<a name="line.1884"></a>
<span class="sourceLineNo">1885</span>  public String getClientIdAuditPrefix() {<a name="line.1885"></a>
<span class="sourceLineNo">1886</span>    return "Client=" + RpcServer.getRequestUserName().orElse(null)<a name="line.1886"></a>
<span class="sourceLineNo">1887</span>        + "/" + RpcServer.getRemoteAddress().orElse(null);<a name="line.1887"></a>
<span class="sourceLineNo">1888</span>  }<a name="line.1888"></a>
<span class="sourceLineNo">1889</span><a name="line.1889"></a>
<span class="sourceLineNo">1890</span>  /**<a name="line.1890"></a>
<span class="sourceLineNo">1891</span>   * Switch for the background CatalogJanitor thread.<a name="line.1891"></a>
<span class="sourceLineNo">1892</span>   * Used for testing.  The thread will continue to run.  It will just be a noop<a name="line.1892"></a>
<span class="sourceLineNo">1893</span>   * if disabled.<a name="line.1893"></a>
<span class="sourceLineNo">1894</span>   * @param b If false, the catalog janitor won't do anything.<a name="line.1894"></a>
<span class="sourceLineNo">1895</span>   */<a name="line.1895"></a>
<span class="sourceLineNo">1896</span>  public void setCatalogJanitorEnabled(final boolean b) {<a name="line.1896"></a>
<span class="sourceLineNo">1897</span>    this.catalogJanitorChore.setEnabled(b);<a name="line.1897"></a>
<span class="sourceLineNo">1898</span>  }<a name="line.1898"></a>
<span class="sourceLineNo">1899</span><a name="line.1899"></a>
<span class="sourceLineNo">1900</span>  @Override<a name="line.1900"></a>
<span class="sourceLineNo">1901</span>  public long mergeRegions(<a name="line.1901"></a>
<span class="sourceLineNo">1902</span>      final RegionInfo[] regionsToMerge,<a name="line.1902"></a>
<span class="sourceLineNo">1903</span>      final boolean forcible,<a name="line.1903"></a>
<span class="sourceLineNo">1904</span>      final long ng,<a name="line.1904"></a>
<span class="sourceLineNo">1905</span>      final long nonce) throws IOException {<a name="line.1905"></a>
<span class="sourceLineNo">1906</span>    checkInitialized();<a name="line.1906"></a>
<span class="sourceLineNo">1907</span><a name="line.1907"></a>
<span class="sourceLineNo">1908</span>    final String mergeRegionsStr = Arrays.stream(regionsToMerge).<a name="line.1908"></a>
<span class="sourceLineNo">1909</span>      map(r -&gt; RegionInfo.getShortNameToLog(r)).collect(Collectors.joining(", "));<a name="line.1909"></a>
<span class="sourceLineNo">1910</span>    return MasterProcedureUtil.submitProcedure(new NonceProcedureRunnable(this, ng, nonce) {<a name="line.1910"></a>
<span class="sourceLineNo">1911</span>      @Override<a name="line.1911"></a>
<span class="sourceLineNo">1912</span>      protected void run() throws IOException {<a name="line.1912"></a>
<span class="sourceLineNo">1913</span>        getMaster().getMasterCoprocessorHost().preMergeRegions(regionsToMerge);<a name="line.1913"></a>
<span class="sourceLineNo">1914</span>        String aid = getClientIdAuditPrefix();<a name="line.1914"></a>
<span class="sourceLineNo">1915</span>        LOG.info("{} merge regions {}", aid, mergeRegionsStr);<a name="line.1915"></a>
<span class="sourceLineNo">1916</span>        submitProcedure(new MergeTableRegionsProcedure(procedureExecutor.getEnvironment(),<a name="line.1916"></a>
<span class="sourceLineNo">1917</span>            regionsToMerge, forcible));<a name="line.1917"></a>
<span class="sourceLineNo">1918</span>        getMaster().getMasterCoprocessorHost().postMergeRegions(regionsToMerge);<a name="line.1918"></a>
<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
<span class="sourceLineNo">1920</span><a name="line.1920"></a>
<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
<span class="sourceLineNo">1922</span>      protected String getDescription() {<a name="line.1922"></a>
<span class="sourceLineNo">1923</span>        return "MergeTableProcedure";<a name="line.1923"></a>
<span class="sourceLineNo">1924</span>      }<a name="line.1924"></a>
<span class="sourceLineNo">1925</span>    });<a name="line.1925"></a>
<span class="sourceLineNo">1926</span>  }<a name="line.1926"></a>
<span class="sourceLineNo">1927</span><a name="line.1927"></a>
<span class="sourceLineNo">1928</span>  @Override<a name="line.1928"></a>
<span class="sourceLineNo">1929</span>  public long splitRegion(final RegionInfo regionInfo, final byte[] splitRow,<a name="line.1929"></a>
<span class="sourceLineNo">1930</span>      final long nonceGroup, final long nonce)<a name="line.1930"></a>
<span class="sourceLineNo">1931</span>  throws IOException {<a name="line.1931"></a>
<span class="sourceLineNo">1932</span>    checkInitialized();<a name="line.1932"></a>
<span class="sourceLineNo">1933</span>    return MasterProcedureUtil.submitProcedure(<a name="line.1933"></a>
<span class="sourceLineNo">1934</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.1934"></a>
<span class="sourceLineNo">1935</span>      @Override<a name="line.1935"></a>
<span class="sourceLineNo">1936</span>      protected void run() throws IOException {<a name="line.1936"></a>
<span class="sourceLineNo">1937</span>        getMaster().getMasterCoprocessorHost().preSplitRegion(regionInfo.getTable(), splitRow);<a name="line.1937"></a>
<span class="sourceLineNo">1938</span>        LOG.info(getClientIdAuditPrefix() + " split " + regionInfo.getRegionNameAsString());<a name="line.1938"></a>
<span class="sourceLineNo">1939</span><a name="line.1939"></a>
<span class="sourceLineNo">1940</span>        // Execute the operation asynchronously<a name="line.1940"></a>
<span class="sourceLineNo">1941</span>        submitProcedure(getAssignmentManager().createSplitProcedure(regionInfo, splitRow));<a name="line.1941"></a>
<span class="sourceLineNo">1942</span>      }<a name="line.1942"></a>
<span class="sourceLineNo">1943</span><a name="line.1943"></a>
<span class="sourceLineNo">1944</span>      @Override<a name="line.1944"></a>
<span class="sourceLineNo">1945</span>      protected String getDescription() {<a name="line.1945"></a>
<span class="sourceLineNo">1946</span>        return "SplitTableProcedure";<a name="line.1946"></a>
<span class="sourceLineNo">1947</span>      }<a name="line.1947"></a>
<span class="sourceLineNo">1948</span>    });<a name="line.1948"></a>
<span class="sourceLineNo">1949</span>  }<a name="line.1949"></a>
<span class="sourceLineNo">1950</span><a name="line.1950"></a>
<span class="sourceLineNo">1951</span>  private void warmUpRegion(ServerName server, RegionInfo region) {<a name="line.1951"></a>
<span class="sourceLineNo">1952</span>    FutureUtils.addListener(asyncClusterConnection.getRegionServerAdmin(server)<a name="line.1952"></a>
<span class="sourceLineNo">1953</span>      .warmupRegion(RequestConverter.buildWarmupRegionRequest(region)), (r, e) -&gt; {<a name="line.1953"></a>
<span class="sourceLineNo">1954</span>        if (e != null) {<a name="line.1954"></a>
<span class="sourceLineNo">1955</span>          LOG.warn("Failed to warm up region {} on server {}", region, server, e);<a name="line.1955"></a>
<span class="sourceLineNo">1956</span>        }<a name="line.1956"></a>
<span class="sourceLineNo">1957</span>      });<a name="line.1957"></a>
<span class="sourceLineNo">1958</span>  }<a name="line.1958"></a>
<span class="sourceLineNo">1959</span><a name="line.1959"></a>
<span class="sourceLineNo">1960</span>  // Public so can be accessed by tests. Blocks until move is done.<a name="line.1960"></a>
<span class="sourceLineNo">1961</span>  // Replace with an async implementation from which you can get<a name="line.1961"></a>
<span class="sourceLineNo">1962</span>  // a success/failure result.<a name="line.1962"></a>
<span class="sourceLineNo">1963</span>  @VisibleForTesting<a name="line.1963"></a>
<span class="sourceLineNo">1964</span>  public void move(final byte[] encodedRegionName, byte[] destServerName) throws HBaseIOException {<a name="line.1964"></a>
<span class="sourceLineNo">1965</span>    RegionState regionState = assignmentManager.getRegionStates().<a name="line.1965"></a>
<span class="sourceLineNo">1966</span>      getRegionState(Bytes.toString(encodedRegionName));<a name="line.1966"></a>
<span class="sourceLineNo">1967</span><a name="line.1967"></a>
<span class="sourceLineNo">1968</span>    RegionInfo hri;<a name="line.1968"></a>
<span class="sourceLineNo">1969</span>    if (regionState != null) {<a name="line.1969"></a>
<span class="sourceLineNo">1970</span>      hri = regionState.getRegion();<a name="line.1970"></a>
<span class="sourceLineNo">1971</span>    } else {<a name="line.1971"></a>
<span class="sourceLineNo">1972</span>      throw new UnknownRegionException(Bytes.toStringBinary(encodedRegionName));<a name="line.1972"></a>
<span class="sourceLineNo">1973</span>    }<a name="line.1973"></a>
<span class="sourceLineNo">1974</span><a name="line.1974"></a>
<span class="sourceLineNo">1975</span>    ServerName dest;<a name="line.1975"></a>
<span class="sourceLineNo">1976</span>    List&lt;ServerName&gt; exclude = hri.getTable().isSystemTable() ? assignmentManager.getExcludedServersForSystemTable()<a name="line.1976"></a>
<span class="sourceLineNo">1977</span>        : new ArrayList&lt;&gt;(1);<a name="line.1977"></a>
<span class="sourceLineNo">1978</span>    if (destServerName != null &amp;&amp; exclude.contains(ServerName.valueOf(Bytes.toString(destServerName)))) {<a name="line.1978"></a>
<span class="sourceLineNo">1979</span>      LOG.info(<a name="line.1979"></a>
<span class="sourceLineNo">1980</span>          Bytes.toString(encodedRegionName) + " can not move to " + Bytes.toString(destServerName)<a name="line.1980"></a>
<span class="sourceLineNo">1981</span>              + " because the server is in exclude list");<a name="line.1981"></a>
<span class="sourceLineNo">1982</span>      destServerName = null;<a name="line.1982"></a>
<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
<span class="sourceLineNo">1984</span>    if (destServerName == null || destServerName.length == 0) {<a name="line.1984"></a>
<span class="sourceLineNo">1985</span>      LOG.info("Passed destination servername is null/empty so " +<a name="line.1985"></a>
<span class="sourceLineNo">1986</span>        "choosing a server at random");<a name="line.1986"></a>
<span class="sourceLineNo">1987</span>      exclude.add(regionState.getServerName());<a name="line.1987"></a>
<span class="sourceLineNo">1988</span>      final List&lt;ServerName&gt; destServers = this.serverManager.createDestinationServersList(exclude);<a name="line.1988"></a>
<span class="sourceLineNo">1989</span>      dest = balancer.randomAssignment(hri, destServers);<a name="line.1989"></a>
<span class="sourceLineNo">1990</span>      if (dest == null) {<a name="line.1990"></a>
<span class="sourceLineNo">1991</span>        LOG.debug("Unable to determine a plan to assign " + hri);<a name="line.1991"></a>
<span class="sourceLineNo">1992</span>        return;<a name="line.1992"></a>
<span class="sourceLineNo">1993</span>      }<a name="line.1993"></a>
<span class="sourceLineNo">1994</span>    } else {<a name="line.1994"></a>
<span class="sourceLineNo">1995</span>      ServerName candidate = ServerName.valueOf(Bytes.toString(destServerName));<a name="line.1995"></a>
<span class="sourceLineNo">1996</span>      dest = balancer.randomAssignment(hri, Lists.newArrayList(candidate));<a name="line.1996"></a>
<span class="sourceLineNo">1997</span>      if (dest == null) {<a name="line.1997"></a>
<span class="sourceLineNo">1998</span>        LOG.debug("Unable to determine a plan to assign " + hri);<a name="line.1998"></a>
<span class="sourceLineNo">1999</span>        return;<a name="line.1999"></a>
<span class="sourceLineNo">2000</span>      }<a name="line.2000"></a>
<span class="sourceLineNo">2001</span>      // TODO: What is this? I don't get it.<a name="line.2001"></a>
<span class="sourceLineNo">2002</span>      if (dest.equals(serverName) &amp;&amp; balancer instanceof BaseLoadBalancer<a name="line.2002"></a>
<span class="sourceLineNo">2003</span>          &amp;&amp; !((BaseLoadBalancer)balancer).shouldBeOnMaster(hri)) {<a name="line.2003"></a>
<span class="sourceLineNo">2004</span>        // To avoid unnecessary region moving later by balancer. Don't put user<a name="line.2004"></a>
<span class="sourceLineNo">2005</span>        // regions on master.<a name="line.2005"></a>
<span class="sourceLineNo">2006</span>        LOG.debug("Skipping move of region " + hri.getRegionNameAsString()<a name="line.2006"></a>
<span class="sourceLineNo">2007</span>          + " to avoid unnecessary region moving later by load balancer,"<a name="line.2007"></a>
<span class="sourceLineNo">2008</span>          + " because it should not be on master");<a name="line.2008"></a>
<span class="sourceLineNo">2009</span>        return;<a name="line.2009"></a>
<span class="sourceLineNo">2010</span>      }<a name="line.2010"></a>
<span class="sourceLineNo">2011</span>    }<a name="line.2011"></a>
<span class="sourceLineNo">2012</span><a name="line.2012"></a>
<span class="sourceLineNo">2013</span>    if (dest.equals(regionState.getServerName())) {<a name="line.2013"></a>
<span class="sourceLineNo">2014</span>      LOG.debug("Skipping move of region " + hri.getRegionNameAsString()<a name="line.2014"></a>
<span class="sourceLineNo">2015</span>        + " because region already assigned to the same server " + dest + ".");<a name="line.2015"></a>
<span class="sourceLineNo">2016</span>      return;<a name="line.2016"></a>
<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
<span class="sourceLineNo">2018</span><a name="line.2018"></a>
<span class="sourceLineNo">2019</span>    // Now we can do the move<a name="line.2019"></a>
<span class="sourceLineNo">2020</span>    RegionPlan rp = new RegionPlan(hri, regionState.getServerName(), dest);<a name="line.2020"></a>
<span class="sourceLineNo">2021</span>    assert rp.getDestination() != null: rp.toString() + " " + dest;<a name="line.2021"></a>
<span class="sourceLineNo">2022</span><a name="line.2022"></a>
<span class="sourceLineNo">2023</span>    try {<a name="line.2023"></a>
<span class="sourceLineNo">2024</span>      checkInitialized();<a name="line.2024"></a>
<span class="sourceLineNo">2025</span>      if (this.cpHost != null) {<a name="line.2025"></a>
<span class="sourceLineNo">2026</span>        this.cpHost.preMove(hri, rp.getSource(), rp.getDestination());<a name="line.2026"></a>
<span class="sourceLineNo">2027</span>      }<a name="line.2027"></a>
<span class="sourceLineNo">2028</span><a name="line.2028"></a>
<span class="sourceLineNo">2029</span>      TransitRegionStateProcedure proc =<a name="line.2029"></a>
<span class="sourceLineNo">2030</span>        this.assignmentManager.createMoveRegionProcedure(rp.getRegionInfo(), rp.getDestination());<a name="line.2030"></a>
<span class="sourceLineNo">2031</span>      // Warmup the region on the destination before initiating the move.<a name="line.2031"></a>
<span class="sourceLineNo">2032</span>      // A region server could reject the close request because it either does not<a name="line.2032"></a>
<span class="sourceLineNo">2033</span>      // have the specified region or the region is being split.<a name="line.2033"></a>
<span class="sourceLineNo">2034</span>      warmUpRegion(rp.getDestination(), hri);<a name="line.2034"></a>
<span class="sourceLineNo">2035</span><a name="line.2035"></a>
<span class="sourceLineNo">2036</span>      LOG.info(getClientIdAuditPrefix() + " move " + rp + ", running balancer");<a name="line.2036"></a>
<span class="sourceLineNo">2037</span>      Future&lt;byte[]&gt; future = ProcedureSyncWait.submitProcedure(this.procedureExecutor, proc);<a name="line.2037"></a>
<span class="sourceLineNo">2038</span>      try {<a name="line.2038"></a>
<span class="sourceLineNo">2039</span>        // Is this going to work? Will we throw exception on error?<a name="line.2039"></a>
<span class="sourceLineNo">2040</span>        // TODO: CompletableFuture rather than this stunted Future.<a name="line.2040"></a>
<span class="sourceLineNo">2041</span>        future.get();<a name="line.2041"></a>
<span class="sourceLineNo">2042</span>      } catch (InterruptedException | ExecutionException e) {<a name="line.2042"></a>
<span class="sourceLineNo">2043</span>        throw new HBaseIOException(e);<a name="line.2043"></a>
<span class="sourceLineNo">2044</span>      }<a name="line.2044"></a>
<span class="sourceLineNo">2045</span>      if (this.cpHost != null) {<a name="line.2045"></a>
<span class="sourceLineNo">2046</span>        this.cpHost.postMove(hri, rp.getSource(), rp.getDestination());<a name="line.2046"></a>
<span class="sourceLineNo">2047</span>      }<a name="line.2047"></a>
<span class="sourceLineNo">2048</span>    } catch (IOException ioe) {<a name="line.2048"></a>
<span class="sourceLineNo">2049</span>      if (ioe instanceof HBaseIOException) {<a name="line.2049"></a>
<span class="sourceLineNo">2050</span>        throw (HBaseIOException)ioe;<a name="line.2050"></a>
<span class="sourceLineNo">2051</span>      }<a name="line.2051"></a>
<span class="sourceLineNo">2052</span>      throw new HBaseIOException(ioe);<a name="line.2052"></a>
<span class="sourceLineNo">2053</span>    }<a name="line.2053"></a>
<span class="sourceLineNo">2054</span>  }<a name="line.2054"></a>
<span class="sourceLineNo">2055</span><a name="line.2055"></a>
<span class="sourceLineNo">2056</span>  @Override<a name="line.2056"></a>
<span class="sourceLineNo">2057</span>  public long createTable(final TableDescriptor tableDescriptor, final byte[][] splitKeys,<a name="line.2057"></a>
<span class="sourceLineNo">2058</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2058"></a>
<span class="sourceLineNo">2059</span>    checkInitialized();<a name="line.2059"></a>
<span class="sourceLineNo">2060</span>    TableDescriptor desc = getMasterCoprocessorHost().preCreateTableRegionsInfos(tableDescriptor);<a name="line.2060"></a>
<span class="sourceLineNo">2061</span>    if (desc == null) {<a name="line.2061"></a>
<span class="sourceLineNo">2062</span>      throw new IOException("Creation for " + tableDescriptor + " is canceled by CP");<a name="line.2062"></a>
<span class="sourceLineNo">2063</span>    }<a name="line.2063"></a>
<span class="sourceLineNo">2064</span>    String namespace = desc.getTableName().getNamespaceAsString();<a name="line.2064"></a>
<span class="sourceLineNo">2065</span>    this.clusterSchemaService.getNamespace(namespace);<a name="line.2065"></a>
<span class="sourceLineNo">2066</span><a name="line.2066"></a>
<span class="sourceLineNo">2067</span>    RegionInfo[] newRegions = ModifyRegionUtils.createRegionInfos(desc, splitKeys);<a name="line.2067"></a>
<span class="sourceLineNo">2068</span>    TableDescriptorChecker.sanityCheck(conf, desc);<a name="line.2068"></a>
<span class="sourceLineNo">2069</span><a name="line.2069"></a>
<span class="sourceLineNo">2070</span>    return MasterProcedureUtil<a name="line.2070"></a>
<span class="sourceLineNo">2071</span>      .submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2071"></a>
<span class="sourceLineNo">2072</span>        @Override<a name="line.2072"></a>
<span class="sourceLineNo">2073</span>        protected void run() throws IOException {<a name="line.2073"></a>
<span class="sourceLineNo">2074</span>          getMaster().getMasterCoprocessorHost().preCreateTable(desc, newRegions);<a name="line.2074"></a>
<span class="sourceLineNo">2075</span><a name="line.2075"></a>
<span class="sourceLineNo">2076</span>          LOG.info(getClientIdAuditPrefix() + " create " + desc);<a name="line.2076"></a>
<span class="sourceLineNo">2077</span><a name="line.2077"></a>
<span class="sourceLineNo">2078</span>          // TODO: We can handle/merge duplicate requests, and differentiate the case of<a name="line.2078"></a>
<span class="sourceLineNo">2079</span>          // TableExistsException by saying if the schema is the same or not.<a name="line.2079"></a>
<span class="sourceLineNo">2080</span>          //<a name="line.2080"></a>
<span class="sourceLineNo">2081</span>          // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2081"></a>
<span class="sourceLineNo">2082</span>          // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2082"></a>
<span class="sourceLineNo">2083</span>          ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2083"></a>
<span class="sourceLineNo">2084</span>          submitProcedure(<a name="line.2084"></a>
<span class="sourceLineNo">2085</span>            new CreateTableProcedure(procedureExecutor.getEnvironment(), desc, newRegions, latch));<a name="line.2085"></a>
<span class="sourceLineNo">2086</span>          latch.await();<a name="line.2086"></a>
<span class="sourceLineNo">2087</span><a name="line.2087"></a>
<span class="sourceLineNo">2088</span>          getMaster().getMasterCoprocessorHost().postCreateTable(desc, newRegions);<a name="line.2088"></a>
<span class="sourceLineNo">2089</span>        }<a name="line.2089"></a>
<span class="sourceLineNo">2090</span><a name="line.2090"></a>
<span class="sourceLineNo">2091</span>        @Override<a name="line.2091"></a>
<span class="sourceLineNo">2092</span>        protected String getDescription() {<a name="line.2092"></a>
<span class="sourceLineNo">2093</span>          return "CreateTableProcedure";<a name="line.2093"></a>
<span class="sourceLineNo">2094</span>        }<a name="line.2094"></a>
<span class="sourceLineNo">2095</span>      });<a name="line.2095"></a>
<span class="sourceLineNo">2096</span>  }<a name="line.2096"></a>
<span class="sourceLineNo">2097</span><a name="line.2097"></a>
<span class="sourceLineNo">2098</span>  @Override<a name="line.2098"></a>
<span class="sourceLineNo">2099</span>  public long createSystemTable(final TableDescriptor tableDescriptor) throws IOException {<a name="line.2099"></a>
<span class="sourceLineNo">2100</span>    if (isStopped()) {<a name="line.2100"></a>
<span class="sourceLineNo">2101</span>      throw new MasterNotRunningException();<a name="line.2101"></a>
<span class="sourceLineNo">2102</span>    }<a name="line.2102"></a>
<span class="sourceLineNo">2103</span><a name="line.2103"></a>
<span class="sourceLineNo">2104</span>    TableName tableName = tableDescriptor.getTableName();<a name="line.2104"></a>
<span class="sourceLineNo">2105</span>    if (!(tableName.isSystemTable())) {<a name="line.2105"></a>
<span class="sourceLineNo">2106</span>      throw new IllegalArgumentException(<a name="line.2106"></a>
<span class="sourceLineNo">2107</span>        "Only system table creation can use this createSystemTable API");<a name="line.2107"></a>
<span class="sourceLineNo">2108</span>    }<a name="line.2108"></a>
<span class="sourceLineNo">2109</span><a name="line.2109"></a>
<span class="sourceLineNo">2110</span>    RegionInfo[] newRegions = ModifyRegionUtils.createRegionInfos(tableDescriptor, null);<a name="line.2110"></a>
<span class="sourceLineNo">2111</span><a name="line.2111"></a>
<span class="sourceLineNo">2112</span>    LOG.info(getClientIdAuditPrefix() + " create " + tableDescriptor);<a name="line.2112"></a>
<span class="sourceLineNo">2113</span><a name="line.2113"></a>
<span class="sourceLineNo">2114</span>    // This special create table is called locally to master.  Therefore, no RPC means no need<a name="line.2114"></a>
<span class="sourceLineNo">2115</span>    // to use nonce to detect duplicated RPC call.<a name="line.2115"></a>
<span class="sourceLineNo">2116</span>    long procId = this.procedureExecutor.submitProcedure(<a name="line.2116"></a>
<span class="sourceLineNo">2117</span>      new CreateTableProcedure(procedureExecutor.getEnvironment(), tableDescriptor, newRegions));<a name="line.2117"></a>
<span class="sourceLineNo">2118</span><a name="line.2118"></a>
<span class="sourceLineNo">2119</span>    return procId;<a name="line.2119"></a>
<span class="sourceLineNo">2120</span>  }<a name="line.2120"></a>
<span class="sourceLineNo">2121</span><a name="line.2121"></a>
<span class="sourceLineNo">2122</span>  private void startActiveMasterManager(int infoPort) throws KeeperException {<a name="line.2122"></a>
<span class="sourceLineNo">2123</span>    String backupZNode = ZNodePaths.joinZNode(<a name="line.2123"></a>
<span class="sourceLineNo">2124</span>      zooKeeper.getZNodePaths().backupMasterAddressesZNode, serverName.toString());<a name="line.2124"></a>
<span class="sourceLineNo">2125</span>    /*<a name="line.2125"></a>
<span class="sourceLineNo">2126</span>    * Add a ZNode for ourselves in the backup master directory since we<a name="line.2126"></a>
<span class="sourceLineNo">2127</span>    * may not become the active master. If so, we want the actual active<a name="line.2127"></a>
<span class="sourceLineNo">2128</span>    * master to know we are backup masters, so that it won't assign<a name="line.2128"></a>
<span class="sourceLineNo">2129</span>    * regions to us if so configured.<a name="line.2129"></a>
<span class="sourceLineNo">2130</span>    *<a name="line.2130"></a>
<span class="sourceLineNo">2131</span>    * If we become the active master later, ActiveMasterManager will delete<a name="line.2131"></a>
<span class="sourceLineNo">2132</span>    * this node explicitly.  If we crash before then, ZooKeeper will delete<a name="line.2132"></a>
<span class="sourceLineNo">2133</span>    * this node for us since it is ephemeral.<a name="line.2133"></a>
<span class="sourceLineNo">2134</span>    */<a name="line.2134"></a>
<span class="sourceLineNo">2135</span>    LOG.info("Adding backup master ZNode " + backupZNode);<a name="line.2135"></a>
<span class="sourceLineNo">2136</span>    if (!MasterAddressTracker.setMasterAddress(zooKeeper, backupZNode, serverName, infoPort)) {<a name="line.2136"></a>
<span class="sourceLineNo">2137</span>      LOG.warn("Failed create of " + backupZNode + " by " + serverName);<a name="line.2137"></a>
<span class="sourceLineNo">2138</span>    }<a name="line.2138"></a>
<span class="sourceLineNo">2139</span>    this.activeMasterManager.setInfoPort(infoPort);<a name="line.2139"></a>
<span class="sourceLineNo">2140</span>    int timeout = conf.getInt(HConstants.ZK_SESSION_TIMEOUT, HConstants.DEFAULT_ZK_SESSION_TIMEOUT);<a name="line.2140"></a>
<span class="sourceLineNo">2141</span>    // If we're a backup master, stall until a primary to write this address<a name="line.2141"></a>
<span class="sourceLineNo">2142</span>    if (conf.getBoolean(HConstants.MASTER_TYPE_BACKUP, HConstants.DEFAULT_MASTER_TYPE_BACKUP)) {<a name="line.2142"></a>
<span class="sourceLineNo">2143</span>      LOG.debug("HMaster started in backup mode. Stalling until master znode is written.");<a name="line.2143"></a>
<span class="sourceLineNo">2144</span>      // This will only be a minute or so while the cluster starts up,<a name="line.2144"></a>
<span class="sourceLineNo">2145</span>      // so don't worry about setting watches on the parent znode<a name="line.2145"></a>
<span class="sourceLineNo">2146</span>      while (!activeMasterManager.hasActiveMaster()) {<a name="line.2146"></a>
<span class="sourceLineNo">2147</span>        LOG.debug("Waiting for master address and cluster state znode to be written.");<a name="line.2147"></a>
<span class="sourceLineNo">2148</span>        Threads.sleep(timeout);<a name="line.2148"></a>
<span class="sourceLineNo">2149</span>      }<a name="line.2149"></a>
<span class="sourceLineNo">2150</span>    }<a name="line.2150"></a>
<span class="sourceLineNo">2151</span>    MonitoredTask status = TaskMonitor.get().createStatus("Master startup");<a name="line.2151"></a>
<span class="sourceLineNo">2152</span>    status.setDescription("Master startup");<a name="line.2152"></a>
<span class="sourceLineNo">2153</span>    try {<a name="line.2153"></a>
<span class="sourceLineNo">2154</span>      if (activeMasterManager.blockUntilBecomingActiveMaster(timeout, status)) {<a name="line.2154"></a>
<span class="sourceLineNo">2155</span>        finishActiveMasterInitialization(status);<a name="line.2155"></a>
<span class="sourceLineNo">2156</span>      }<a name="line.2156"></a>
<span class="sourceLineNo">2157</span>    } catch (Throwable t) {<a name="line.2157"></a>
<span class="sourceLineNo">2158</span>      status.setStatus("Failed to become active: " + t.getMessage());<a name="line.2158"></a>
<span class="sourceLineNo">2159</span>      LOG.error(HBaseMarkers.FATAL, "Failed to become active master", t);<a name="line.2159"></a>
<span class="sourceLineNo">2160</span>      // HBASE-5680: Likely hadoop23 vs hadoop 20.x/1.x incompatibility<a name="line.2160"></a>
<span class="sourceLineNo">2161</span>      if (t instanceof NoClassDefFoundError &amp;&amp; t.getMessage().<a name="line.2161"></a>
<span class="sourceLineNo">2162</span>          contains("org/apache/hadoop/hdfs/protocol/HdfsConstants$SafeModeAction")) {<a name="line.2162"></a>
<span class="sourceLineNo">2163</span>        // improved error message for this special case<a name="line.2163"></a>
<span class="sourceLineNo">2164</span>        abort("HBase is having a problem with its Hadoop jars.  You may need to recompile " +<a name="line.2164"></a>
<span class="sourceLineNo">2165</span>          "HBase against Hadoop version " + org.apache.hadoop.util.VersionInfo.getVersion() +<a name="line.2165"></a>
<span class="sourceLineNo">2166</span>          " or change your hadoop jars to start properly", t);<a name="line.2166"></a>
<span class="sourceLineNo">2167</span>      } else {<a name="line.2167"></a>
<span class="sourceLineNo">2168</span>        abort("Unhandled exception. Starting shutdown.", t);<a name="line.2168"></a>
<span class="sourceLineNo">2169</span>      }<a name="line.2169"></a>
<span class="sourceLineNo">2170</span>    } finally {<a name="line.2170"></a>
<span class="sourceLineNo">2171</span>      status.cleanup();<a name="line.2171"></a>
<span class="sourceLineNo">2172</span>    }<a name="line.2172"></a>
<span class="sourceLineNo">2173</span>  }<a name="line.2173"></a>
<span class="sourceLineNo">2174</span><a name="line.2174"></a>
<span class="sourceLineNo">2175</span>  private static boolean isCatalogTable(final TableName tableName) {<a name="line.2175"></a>
<span class="sourceLineNo">2176</span>    return tableName.equals(TableName.META_TABLE_NAME);<a name="line.2176"></a>
<span class="sourceLineNo">2177</span>  }<a name="line.2177"></a>
<span class="sourceLineNo">2178</span><a name="line.2178"></a>
<span class="sourceLineNo">2179</span>  @Override<a name="line.2179"></a>
<span class="sourceLineNo">2180</span>  public long deleteTable(<a name="line.2180"></a>
<span class="sourceLineNo">2181</span>      final TableName tableName,<a name="line.2181"></a>
<span class="sourceLineNo">2182</span>      final long nonceGroup,<a name="line.2182"></a>
<span class="sourceLineNo">2183</span>      final long nonce) throws IOException {<a name="line.2183"></a>
<span class="sourceLineNo">2184</span>    checkInitialized();<a name="line.2184"></a>
<span class="sourceLineNo">2185</span><a name="line.2185"></a>
<span class="sourceLineNo">2186</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2186"></a>
<span class="sourceLineNo">2187</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2187"></a>
<span class="sourceLineNo">2188</span>      @Override<a name="line.2188"></a>
<span class="sourceLineNo">2189</span>      protected void run() throws IOException {<a name="line.2189"></a>
<span class="sourceLineNo">2190</span>        getMaster().getMasterCoprocessorHost().preDeleteTable(tableName);<a name="line.2190"></a>
<span class="sourceLineNo">2191</span><a name="line.2191"></a>
<span class="sourceLineNo">2192</span>        LOG.info(getClientIdAuditPrefix() + " delete " + tableName);<a name="line.2192"></a>
<span class="sourceLineNo">2193</span><a name="line.2193"></a>
<span class="sourceLineNo">2194</span>        // TODO: We can handle/merge duplicate request<a name="line.2194"></a>
<span class="sourceLineNo">2195</span>        //<a name="line.2195"></a>
<span class="sourceLineNo">2196</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2196"></a>
<span class="sourceLineNo">2197</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2197"></a>
<span class="sourceLineNo">2198</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2198"></a>
<span class="sourceLineNo">2199</span>        submitProcedure(new DeleteTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2199"></a>
<span class="sourceLineNo">2200</span>            tableName, latch));<a name="line.2200"></a>
<span class="sourceLineNo">2201</span>        latch.await();<a name="line.2201"></a>
<span class="sourceLineNo">2202</span><a name="line.2202"></a>
<span class="sourceLineNo">2203</span>        getMaster().getMasterCoprocessorHost().postDeleteTable(tableName);<a name="line.2203"></a>
<span class="sourceLineNo">2204</span>      }<a name="line.2204"></a>
<span class="sourceLineNo">2205</span><a name="line.2205"></a>
<span class="sourceLineNo">2206</span>      @Override<a name="line.2206"></a>
<span class="sourceLineNo">2207</span>      protected String getDescription() {<a name="line.2207"></a>
<span class="sourceLineNo">2208</span>        return "DeleteTableProcedure";<a name="line.2208"></a>
<span class="sourceLineNo">2209</span>      }<a name="line.2209"></a>
<span class="sourceLineNo">2210</span>    });<a name="line.2210"></a>
<span class="sourceLineNo">2211</span>  }<a name="line.2211"></a>
<span class="sourceLineNo">2212</span><a name="line.2212"></a>
<span class="sourceLineNo">2213</span>  @Override<a name="line.2213"></a>
<span class="sourceLineNo">2214</span>  public long truncateTable(<a name="line.2214"></a>
<span class="sourceLineNo">2215</span>      final TableName tableName,<a name="line.2215"></a>
<span class="sourceLineNo">2216</span>      final boolean preserveSplits,<a name="line.2216"></a>
<span class="sourceLineNo">2217</span>      final long nonceGroup,<a name="line.2217"></a>
<span class="sourceLineNo">2218</span>      final long nonce) throws IOException {<a name="line.2218"></a>
<span class="sourceLineNo">2219</span>    checkInitialized();<a name="line.2219"></a>
<span class="sourceLineNo">2220</span><a name="line.2220"></a>
<span class="sourceLineNo">2221</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2221"></a>
<span class="sourceLineNo">2222</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2222"></a>
<span class="sourceLineNo">2223</span>      @Override<a name="line.2223"></a>
<span class="sourceLineNo">2224</span>      protected void run() throws IOException {<a name="line.2224"></a>
<span class="sourceLineNo">2225</span>        getMaster().getMasterCoprocessorHost().preTruncateTable(tableName);<a name="line.2225"></a>
<span class="sourceLineNo">2226</span><a name="line.2226"></a>
<span class="sourceLineNo">2227</span>        LOG.info(getClientIdAuditPrefix() + " truncate " + tableName);<a name="line.2227"></a>
<span class="sourceLineNo">2228</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createLatch(2, 0);<a name="line.2228"></a>
<span class="sourceLineNo">2229</span>        submitProcedure(new TruncateTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2229"></a>
<span class="sourceLineNo">2230</span>            tableName, preserveSplits, latch));<a name="line.2230"></a>
<span class="sourceLineNo">2231</span>        latch.await();<a name="line.2231"></a>
<span class="sourceLineNo">2232</span><a name="line.2232"></a>
<span class="sourceLineNo">2233</span>        getMaster().getMasterCoprocessorHost().postTruncateTable(tableName);<a name="line.2233"></a>
<span class="sourceLineNo">2234</span>      }<a name="line.2234"></a>
<span class="sourceLineNo">2235</span><a name="line.2235"></a>
<span class="sourceLineNo">2236</span>      @Override<a name="line.2236"></a>
<span class="sourceLineNo">2237</span>      protected String getDescription() {<a name="line.2237"></a>
<span class="sourceLineNo">2238</span>        return "TruncateTableProcedure";<a name="line.2238"></a>
<span class="sourceLineNo">2239</span>      }<a name="line.2239"></a>
<span class="sourceLineNo">2240</span>    });<a name="line.2240"></a>
<span class="sourceLineNo">2241</span>  }<a name="line.2241"></a>
<span class="sourceLineNo">2242</span><a name="line.2242"></a>
<span class="sourceLineNo">2243</span>  @Override<a name="line.2243"></a>
<span class="sourceLineNo">2244</span>  public long addColumn(final TableName tableName, final ColumnFamilyDescriptor column,<a name="line.2244"></a>
<span class="sourceLineNo">2245</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2245"></a>
<span class="sourceLineNo">2246</span>    checkInitialized();<a name="line.2246"></a>
<span class="sourceLineNo">2247</span>    checkTableExists(tableName);<a name="line.2247"></a>
<span class="sourceLineNo">2248</span><a name="line.2248"></a>
<span class="sourceLineNo">2249</span>    return modifyTable(tableName, new TableDescriptorGetter() {<a name="line.2249"></a>
<span class="sourceLineNo">2250</span><a name="line.2250"></a>
<span class="sourceLineNo">2251</span>      @Override<a name="line.2251"></a>
<span class="sourceLineNo">2252</span>      public TableDescriptor get() throws IOException {<a name="line.2252"></a>
<span class="sourceLineNo">2253</span>        TableDescriptor old = getTableDescriptors().get(tableName);<a name="line.2253"></a>
<span class="sourceLineNo">2254</span>        if (old.hasColumnFamily(column.getName())) {<a name="line.2254"></a>
<span class="sourceLineNo">2255</span>          throw new InvalidFamilyOperationException("Column family '" + column.getNameAsString()<a name="line.2255"></a>
<span class="sourceLineNo">2256</span>              + "' in table '" + tableName + "' already exists so cannot be added");<a name="line.2256"></a>
<span class="sourceLineNo">2257</span>        }<a name="line.2257"></a>
<span class="sourceLineNo">2258</span><a name="line.2258"></a>
<span class="sourceLineNo">2259</span>        return TableDescriptorBuilder.newBuilder(old).setColumnFamily(column).build();<a name="line.2259"></a>
<span class="sourceLineNo">2260</span>      }<a name="line.2260"></a>
<span class="sourceLineNo">2261</span>    }, nonceGroup, nonce, true);<a name="line.2261"></a>
<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
<span class="sourceLineNo">2263</span><a name="line.2263"></a>
<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
<span class="sourceLineNo">2265</span>   * Implement to return TableDescriptor after pre-checks<a name="line.2265"></a>
<span class="sourceLineNo">2266</span>   */<a name="line.2266"></a>
<span class="sourceLineNo">2267</span>  protected interface TableDescriptorGetter {<a name="line.2267"></a>
<span class="sourceLineNo">2268</span>    TableDescriptor get() throws IOException;<a name="line.2268"></a>
<span class="sourceLineNo">2269</span>  }<a name="line.2269"></a>
<span class="sourceLineNo">2270</span><a name="line.2270"></a>
<span class="sourceLineNo">2271</span>  @Override<a name="line.2271"></a>
<span class="sourceLineNo">2272</span>  public long modifyColumn(final TableName tableName, final ColumnFamilyDescriptor descriptor,<a name="line.2272"></a>
<span class="sourceLineNo">2273</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2273"></a>
<span class="sourceLineNo">2274</span>    checkInitialized();<a name="line.2274"></a>
<span class="sourceLineNo">2275</span>    checkTableExists(tableName);<a name="line.2275"></a>
<span class="sourceLineNo">2276</span>    return modifyTable(tableName, new TableDescriptorGetter() {<a name="line.2276"></a>
<span class="sourceLineNo">2277</span><a name="line.2277"></a>
<span class="sourceLineNo">2278</span>      @Override<a name="line.2278"></a>
<span class="sourceLineNo">2279</span>      public TableDescriptor get() throws IOException {<a name="line.2279"></a>
<span class="sourceLineNo">2280</span>        TableDescriptor old = getTableDescriptors().get(tableName);<a name="line.2280"></a>
<span class="sourceLineNo">2281</span>        if (!old.hasColumnFamily(descriptor.getName())) {<a name="line.2281"></a>
<span class="sourceLineNo">2282</span>          throw new InvalidFamilyOperationException("Family '" + descriptor.getNameAsString()<a name="line.2282"></a>
<span class="sourceLineNo">2283</span>              + "' does not exist, so it cannot be modified");<a name="line.2283"></a>
<span class="sourceLineNo">2284</span>        }<a name="line.2284"></a>
<span class="sourceLineNo">2285</span><a name="line.2285"></a>
<span class="sourceLineNo">2286</span>        return TableDescriptorBuilder.newBuilder(old).modifyColumnFamily(descriptor).build();<a name="line.2286"></a>
<span class="sourceLineNo">2287</span>      }<a name="line.2287"></a>
<span class="sourceLineNo">2288</span>    }, nonceGroup, nonce, true);<a name="line.2288"></a>
<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
<span class="sourceLineNo">2290</span><a name="line.2290"></a>
<span class="sourceLineNo">2291</span>  @Override<a name="line.2291"></a>
<span class="sourceLineNo">2292</span>  public long deleteColumn(final TableName tableName, final byte[] columnName,<a name="line.2292"></a>
<span class="sourceLineNo">2293</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2293"></a>
<span class="sourceLineNo">2294</span>    checkInitialized();<a name="line.2294"></a>
<span class="sourceLineNo">2295</span>    checkTableExists(tableName);<a name="line.2295"></a>
<span class="sourceLineNo">2296</span><a name="line.2296"></a>
<span class="sourceLineNo">2297</span>    return modifyTable(tableName, new TableDescriptorGetter() {<a name="line.2297"></a>
<span class="sourceLineNo">2298</span><a name="line.2298"></a>
<span class="sourceLineNo">2299</span>      @Override<a name="line.2299"></a>
<span class="sourceLineNo">2300</span>      public TableDescriptor get() throws IOException {<a name="line.2300"></a>
<span class="sourceLineNo">2301</span>        TableDescriptor old = getTableDescriptors().get(tableName);<a name="line.2301"></a>
<span class="sourceLineNo">2302</span><a name="line.2302"></a>
<span class="sourceLineNo">2303</span>        if (!old.hasColumnFamily(columnName)) {<a name="line.2303"></a>
<span class="sourceLineNo">2304</span>          throw new InvalidFamilyOperationException("Family '" + Bytes.toString(columnName)<a name="line.2304"></a>
<span class="sourceLineNo">2305</span>              + "' does not exist, so it cannot be deleted");<a name="line.2305"></a>
<span class="sourceLineNo">2306</span>        }<a name="line.2306"></a>
<span class="sourceLineNo">2307</span>        if (old.getColumnFamilyCount() == 1) {<a name="line.2307"></a>
<span class="sourceLineNo">2308</span>          throw new InvalidFamilyOperationException("Family '" + Bytes.toString(columnName)<a name="line.2308"></a>
<span class="sourceLineNo">2309</span>              + "' is the only column family in the table, so it cannot be deleted");<a name="line.2309"></a>
<span class="sourceLineNo">2310</span>        }<a name="line.2310"></a>
<span class="sourceLineNo">2311</span>        return TableDescriptorBuilder.newBuilder(old).removeColumnFamily(columnName).build();<a name="line.2311"></a>
<span class="sourceLineNo">2312</span>      }<a name="line.2312"></a>
<span class="sourceLineNo">2313</span>    }, nonceGroup, nonce, true);<a name="line.2313"></a>
<span class="sourceLineNo">2314</span>  }<a name="line.2314"></a>
<span class="sourceLineNo">2315</span><a name="line.2315"></a>
<span class="sourceLineNo">2316</span>  @Override<a name="line.2316"></a>
<span class="sourceLineNo">2317</span>  public long enableTable(final TableName tableName, final long nonceGroup, final long nonce)<a name="line.2317"></a>
<span class="sourceLineNo">2318</span>      throws IOException {<a name="line.2318"></a>
<span class="sourceLineNo">2319</span>    checkInitialized();<a name="line.2319"></a>
<span class="sourceLineNo">2320</span><a name="line.2320"></a>
<span class="sourceLineNo">2321</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2321"></a>
<span class="sourceLineNo">2322</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2322"></a>
<span class="sourceLineNo">2323</span>      @Override<a name="line.2323"></a>
<span class="sourceLineNo">2324</span>      protected void run() throws IOException {<a name="line.2324"></a>
<span class="sourceLineNo">2325</span>        getMaster().getMasterCoprocessorHost().preEnableTable(tableName);<a name="line.2325"></a>
<span class="sourceLineNo">2326</span><a name="line.2326"></a>
<span class="sourceLineNo">2327</span>        // Normally, it would make sense for this authorization check to exist inside<a name="line.2327"></a>
<span class="sourceLineNo">2328</span>        // AccessController, but because the authorization check is done based on internal state<a name="line.2328"></a>
<span class="sourceLineNo">2329</span>        // (rather than explicit permissions) we'll do the check here instead of in the<a name="line.2329"></a>
<span class="sourceLineNo">2330</span>        // coprocessor.<a name="line.2330"></a>
<span class="sourceLineNo">2331</span>        MasterQuotaManager quotaManager = getMasterQuotaManager();<a name="line.2331"></a>
<span class="sourceLineNo">2332</span>        if (quotaManager != null) {<a name="line.2332"></a>
<span class="sourceLineNo">2333</span>          if (quotaManager.isQuotaInitialized()) {<a name="line.2333"></a>
<span class="sourceLineNo">2334</span>              SpaceQuotaSnapshot currSnapshotOfTable =<a name="line.2334"></a>
<span class="sourceLineNo">2335</span>                  QuotaTableUtil.getCurrentSnapshotFromQuotaTable(getConnection(), tableName);<a name="line.2335"></a>
<span class="sourceLineNo">2336</span>              if (currSnapshotOfTable != null) {<a name="line.2336"></a>
<span class="sourceLineNo">2337</span>                SpaceQuotaStatus quotaStatus = currSnapshotOfTable.getQuotaStatus();<a name="line.2337"></a>
<span class="sourceLineNo">2338</span>                if (quotaStatus.isInViolation()<a name="line.2338"></a>
<span class="sourceLineNo">2339</span>                    &amp;&amp; SpaceViolationPolicy.DISABLE == quotaStatus.getPolicy().orElse(null)) {<a name="line.2339"></a>
<span class="sourceLineNo">2340</span>                throw new AccessDeniedException("Enabling the table '" + tableName<a name="line.2340"></a>
<span class="sourceLineNo">2341</span>                    + "' is disallowed due to a violated space quota.");<a name="line.2341"></a>
<span class="sourceLineNo">2342</span>              }<a name="line.2342"></a>
<span class="sourceLineNo">2343</span>            }<a name="line.2343"></a>
<span class="sourceLineNo">2344</span>          } else if (LOG.isTraceEnabled()) {<a name="line.2344"></a>
<span class="sourceLineNo">2345</span>            LOG.trace("Unable to check for space quotas as the MasterQuotaManager is not enabled");<a name="line.2345"></a>
<span class="sourceLineNo">2346</span>          }<a name="line.2346"></a>
<span class="sourceLineNo">2347</span>        }<a name="line.2347"></a>
<span class="sourceLineNo">2348</span><a name="line.2348"></a>
<span class="sourceLineNo">2349</span>        LOG.info(getClientIdAuditPrefix() + " enable " + tableName);<a name="line.2349"></a>
<span class="sourceLineNo">2350</span><a name="line.2350"></a>
<span class="sourceLineNo">2351</span>        // Execute the operation asynchronously - client will check the progress of the operation<a name="line.2351"></a>
<span class="sourceLineNo">2352</span>        // In case the request is from a &lt;1.1 client before returning,<a name="line.2352"></a>
<span class="sourceLineNo">2353</span>        // we want to make sure that the table is prepared to be<a name="line.2353"></a>
<span class="sourceLineNo">2354</span>        // enabled (the table is locked and the table state is set).<a name="line.2354"></a>
<span class="sourceLineNo">2355</span>        // Note: if the procedure throws exception, we will catch it and rethrow.<a name="line.2355"></a>
<span class="sourceLineNo">2356</span>        final ProcedurePrepareLatch prepareLatch = ProcedurePrepareLatch.createLatch();<a name="line.2356"></a>
<span class="sourceLineNo">2357</span>        submitProcedure(new EnableTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2357"></a>
<span class="sourceLineNo">2358</span>            tableName, prepareLatch));<a name="line.2358"></a>
<span class="sourceLineNo">2359</span>        prepareLatch.await();<a name="line.2359"></a>
<span class="sourceLineNo">2360</span><a name="line.2360"></a>
<span class="sourceLineNo">2361</span>        getMaster().getMasterCoprocessorHost().postEnableTable(tableName);<a name="line.2361"></a>
<span class="sourceLineNo">2362</span>      }<a name="line.2362"></a>
<span class="sourceLineNo">2363</span><a name="line.2363"></a>
<span class="sourceLineNo">2364</span>      @Override<a name="line.2364"></a>
<span class="sourceLineNo">2365</span>      protected String getDescription() {<a name="line.2365"></a>
<span class="sourceLineNo">2366</span>        return "EnableTableProcedure";<a name="line.2366"></a>
<span class="sourceLineNo">2367</span>      }<a name="line.2367"></a>
<span class="sourceLineNo">2368</span>    });<a name="line.2368"></a>
<span class="sourceLineNo">2369</span>  }<a name="line.2369"></a>
<span class="sourceLineNo">2370</span><a name="line.2370"></a>
<span class="sourceLineNo">2371</span>  @Override<a name="line.2371"></a>
<span class="sourceLineNo">2372</span>  public long disableTable(final TableName tableName, final long nonceGroup, final long nonce)<a name="line.2372"></a>
<span class="sourceLineNo">2373</span>      throws IOException {<a name="line.2373"></a>
<span class="sourceLineNo">2374</span>    checkInitialized();<a name="line.2374"></a>
<span class="sourceLineNo">2375</span><a name="line.2375"></a>
<span class="sourceLineNo">2376</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2376"></a>
<span class="sourceLineNo">2377</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2377"></a>
<span class="sourceLineNo">2378</span>      @Override<a name="line.2378"></a>
<span class="sourceLineNo">2379</span>      protected void run() throws IOException {<a name="line.2379"></a>
<span class="sourceLineNo">2380</span>        getMaster().getMasterCoprocessorHost().preDisableTable(tableName);<a name="line.2380"></a>
<span class="sourceLineNo">2381</span><a name="line.2381"></a>
<span class="sourceLineNo">2382</span>        LOG.info(getClientIdAuditPrefix() + " disable " + tableName);<a name="line.2382"></a>
<span class="sourceLineNo">2383</span><a name="line.2383"></a>
<span class="sourceLineNo">2384</span>        // Execute the operation asynchronously - client will check the progress of the operation<a name="line.2384"></a>
<span class="sourceLineNo">2385</span>        // In case the request is from a &lt;1.1 client before returning,<a name="line.2385"></a>
<span class="sourceLineNo">2386</span>        // we want to make sure that the table is prepared to be<a name="line.2386"></a>
<span class="sourceLineNo">2387</span>        // enabled (the table is locked and the table state is set).<a name="line.2387"></a>
<span class="sourceLineNo">2388</span>        // Note: if the procedure throws exception, we will catch it and rethrow.<a name="line.2388"></a>
<span class="sourceLineNo">2389</span>        //<a name="line.2389"></a>
<span class="sourceLineNo">2390</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2390"></a>
<span class="sourceLineNo">2391</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2391"></a>
<span class="sourceLineNo">2392</span>        final ProcedurePrepareLatch prepareLatch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2392"></a>
<span class="sourceLineNo">2393</span>        submitProcedure(new DisableTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2393"></a>
<span class="sourceLineNo">2394</span>            tableName, false, prepareLatch));<a name="line.2394"></a>
<span class="sourceLineNo">2395</span>        prepareLatch.await();<a name="line.2395"></a>
<span class="sourceLineNo">2396</span><a name="line.2396"></a>
<span class="sourceLineNo">2397</span>        getMaster().getMasterCoprocessorHost().postDisableTable(tableName);<a name="line.2397"></a>
<span class="sourceLineNo">2398</span>      }<a name="line.2398"></a>
<span class="sourceLineNo">2399</span><a name="line.2399"></a>
<span class="sourceLineNo">2400</span>      @Override<a name="line.2400"></a>
<span class="sourceLineNo">2401</span>      protected String getDescription() {<a name="line.2401"></a>
<span class="sourceLineNo">2402</span>        return "DisableTableProcedure";<a name="line.2402"></a>
<span class="sourceLineNo">2403</span>      }<a name="line.2403"></a>
<span class="sourceLineNo">2404</span>    });<a name="line.2404"></a>
<span class="sourceLineNo">2405</span>  }<a name="line.2405"></a>
<span class="sourceLineNo">2406</span><a name="line.2406"></a>
<span class="sourceLineNo">2407</span>  private long modifyTable(final TableName tableName,<a name="line.2407"></a>
<span class="sourceLineNo">2408</span>      final TableDescriptorGetter newDescriptorGetter, final long nonceGroup, final long nonce,<a name="line.2408"></a>
<span class="sourceLineNo">2409</span>      final boolean shouldCheckDescriptor) throws IOException {<a name="line.2409"></a>
<span class="sourceLineNo">2410</span>    return MasterProcedureUtil<a name="line.2410"></a>
<span class="sourceLineNo">2411</span>        .submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2411"></a>
<span class="sourceLineNo">2412</span>          @Override<a name="line.2412"></a>
<span class="sourceLineNo">2413</span>          protected void run() throws IOException {<a name="line.2413"></a>
<span class="sourceLineNo">2414</span>            TableDescriptor oldDescriptor = getMaster().getTableDescriptors().get(tableName);<a name="line.2414"></a>
<span class="sourceLineNo">2415</span>            TableDescriptor newDescriptor = getMaster().getMasterCoprocessorHost()<a name="line.2415"></a>
<span class="sourceLineNo">2416</span>                .preModifyTable(tableName, oldDescriptor, newDescriptorGetter.get());<a name="line.2416"></a>
<span class="sourceLineNo">2417</span>            TableDescriptorChecker.sanityCheck(conf, newDescriptor);<a name="line.2417"></a>
<span class="sourceLineNo">2418</span>            LOG.info("{} modify table {} from {} to {}", getClientIdAuditPrefix(), tableName,<a name="line.2418"></a>
<span class="sourceLineNo">2419</span>                oldDescriptor, newDescriptor);<a name="line.2419"></a>
<span class="sourceLineNo">2420</span><a name="line.2420"></a>
<span class="sourceLineNo">2421</span>            // Execute the operation synchronously - wait for the operation completes before<a name="line.2421"></a>
<span class="sourceLineNo">2422</span>            // continuing.<a name="line.2422"></a>
<span class="sourceLineNo">2423</span>            //<a name="line.2423"></a>
<span class="sourceLineNo">2424</span>            // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2424"></a>
<span class="sourceLineNo">2425</span>            // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2425"></a>
<span class="sourceLineNo">2426</span>            ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2426"></a>
<span class="sourceLineNo">2427</span>            submitProcedure(new ModifyTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2427"></a>
<span class="sourceLineNo">2428</span>                newDescriptor, latch, oldDescriptor, shouldCheckDescriptor));<a name="line.2428"></a>
<span class="sourceLineNo">2429</span>            latch.await();<a name="line.2429"></a>
<span class="sourceLineNo">2430</span><a name="line.2430"></a>
<span class="sourceLineNo">2431</span>            getMaster().getMasterCoprocessorHost().postModifyTable(tableName, oldDescriptor,<a name="line.2431"></a>
<span class="sourceLineNo">2432</span>              newDescriptor);<a name="line.2432"></a>
<span class="sourceLineNo">2433</span>          }<a name="line.2433"></a>
<span class="sourceLineNo">2434</span><a name="line.2434"></a>
<span class="sourceLineNo">2435</span>          @Override<a name="line.2435"></a>
<span class="sourceLineNo">2436</span>          protected String getDescription() {<a name="line.2436"></a>
<span class="sourceLineNo">2437</span>            return "ModifyTableProcedure";<a name="line.2437"></a>
<span class="sourceLineNo">2438</span>          }<a name="line.2438"></a>
<span class="sourceLineNo">2439</span>        });<a name="line.2439"></a>
<span class="sourceLineNo">2440</span><a name="line.2440"></a>
<span class="sourceLineNo">2441</span>  }<a name="line.2441"></a>
<span class="sourceLineNo">2442</span><a name="line.2442"></a>
<span class="sourceLineNo">2443</span>  @Override<a name="line.2443"></a>
<span class="sourceLineNo">2444</span>  public long modifyTable(final TableName tableName, final TableDescriptor newDescriptor,<a name="line.2444"></a>
<span class="sourceLineNo">2445</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2445"></a>
<span class="sourceLineNo">2446</span>    checkInitialized();<a name="line.2446"></a>
<span class="sourceLineNo">2447</span>    return modifyTable(tableName, new TableDescriptorGetter() {<a name="line.2447"></a>
<span class="sourceLineNo">2448</span>      @Override<a name="line.2448"></a>
<span class="sourceLineNo">2449</span>      public TableDescriptor get() throws IOException {<a name="line.2449"></a>
<span class="sourceLineNo">2450</span>        return newDescriptor;<a name="line.2450"></a>
<span class="sourceLineNo">2451</span>      }<a name="line.2451"></a>
<span class="sourceLineNo">2452</span>    }, nonceGroup, nonce, false);<a name="line.2452"></a>
<span class="sourceLineNo">2453</span><a name="line.2453"></a>
<span class="sourceLineNo">2454</span>  }<a name="line.2454"></a>
<span class="sourceLineNo">2455</span><a name="line.2455"></a>
<span class="sourceLineNo">2456</span>  public long restoreSnapshot(final SnapshotDescription snapshotDesc,<a name="line.2456"></a>
<span class="sourceLineNo">2457</span>      final long nonceGroup, final long nonce, final boolean restoreAcl) throws IOException {<a name="line.2457"></a>
<span class="sourceLineNo">2458</span>    checkInitialized();<a name="line.2458"></a>
<span class="sourceLineNo">2459</span>    getSnapshotManager().checkSnapshotSupport();<a name="line.2459"></a>
<span class="sourceLineNo">2460</span><a name="line.2460"></a>
<span class="sourceLineNo">2461</span>    // Ensure namespace exists. Will throw exception if non-known NS.<a name="line.2461"></a>
<span class="sourceLineNo">2462</span>    final TableName dstTable = TableName.valueOf(snapshotDesc.getTable());<a name="line.2462"></a>
<span class="sourceLineNo">2463</span>    getClusterSchema().getNamespace(dstTable.getNamespaceAsString());<a name="line.2463"></a>
<span class="sourceLineNo">2464</span><a name="line.2464"></a>
<span class="sourceLineNo">2465</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2465"></a>
<span class="sourceLineNo">2466</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2466"></a>
<span class="sourceLineNo">2467</span>      @Override<a name="line.2467"></a>
<span class="sourceLineNo">2468</span>      protected void run() throws IOException {<a name="line.2468"></a>
<span class="sourceLineNo">2469</span>          setProcId(<a name="line.2469"></a>
<span class="sourceLineNo">2470</span>            getSnapshotManager().restoreOrCloneSnapshot(snapshotDesc, getNonceKey(), restoreAcl));<a name="line.2470"></a>
<span class="sourceLineNo">2471</span>      }<a name="line.2471"></a>
<span class="sourceLineNo">2472</span><a name="line.2472"></a>
<span class="sourceLineNo">2473</span>      @Override<a name="line.2473"></a>
<span class="sourceLineNo">2474</span>      protected String getDescription() {<a name="line.2474"></a>
<span class="sourceLineNo">2475</span>        return "RestoreSnapshotProcedure";<a name="line.2475"></a>
<span class="sourceLineNo">2476</span>      }<a name="line.2476"></a>
<span class="sourceLineNo">2477</span>    });<a name="line.2477"></a>
<span class="sourceLineNo">2478</span>  }<a name="line.2478"></a>
<span class="sourceLineNo">2479</span><a name="line.2479"></a>
<span class="sourceLineNo">2480</span>  private void checkTableExists(final TableName tableName)<a name="line.2480"></a>
<span class="sourceLineNo">2481</span>      throws IOException, TableNotFoundException {<a name="line.2481"></a>
<span class="sourceLineNo">2482</span>    if (!MetaTableAccessor.tableExists(getConnection(), tableName)) {<a name="line.2482"></a>
<span class="sourceLineNo">2483</span>      throw new TableNotFoundException(tableName);<a name="line.2483"></a>
<span class="sourceLineNo">2484</span>    }<a name="line.2484"></a>
<span class="sourceLineNo">2485</span>  }<a name="line.2485"></a>
<span class="sourceLineNo">2486</span><a name="line.2486"></a>
<span class="sourceLineNo">2487</span>  @Override<a name="line.2487"></a>
<span class="sourceLineNo">2488</span>  public void checkTableModifiable(final TableName tableName)<a name="line.2488"></a>
<span class="sourceLineNo">2489</span>      throws IOException, TableNotFoundException, TableNotDisabledException {<a name="line.2489"></a>
<span class="sourceLineNo">2490</span>    if (isCatalogTable(tableName)) {<a name="line.2490"></a>
<span class="sourceLineNo">2491</span>      throw new IOException("Can't modify catalog tables");<a name="line.2491"></a>
<span class="sourceLineNo">2492</span>    }<a name="line.2492"></a>
<span class="sourceLineNo">2493</span>    checkTableExists(tableName);<a name="line.2493"></a>
<span class="sourceLineNo">2494</span>    TableState ts = getTableStateManager().getTableState(tableName);<a name="line.2494"></a>
<span class="sourceLineNo">2495</span>    if (!ts.isDisabled()) {<a name="line.2495"></a>
<span class="sourceLineNo">2496</span>      throw new TableNotDisabledException("Not DISABLED; " + ts);<a name="line.2496"></a>
<span class="sourceLineNo">2497</span>    }<a name="line.2497"></a>
<span class="sourceLineNo">2498</span>  }<a name="line.2498"></a>
<span class="sourceLineNo">2499</span><a name="line.2499"></a>
<span class="sourceLineNo">2500</span>  public ClusterMetrics getClusterMetricsWithoutCoprocessor() throws InterruptedIOException {<a name="line.2500"></a>
<span class="sourceLineNo">2501</span>    return getClusterMetricsWithoutCoprocessor(EnumSet.allOf(Option.class));<a name="line.2501"></a>
<span class="sourceLineNo">2502</span>  }<a name="line.2502"></a>
<span class="sourceLineNo">2503</span><a name="line.2503"></a>
<span class="sourceLineNo">2504</span>  public ClusterMetrics getClusterMetricsWithoutCoprocessor(EnumSet&lt;Option&gt; options)<a name="line.2504"></a>
<span class="sourceLineNo">2505</span>      throws InterruptedIOException {<a name="line.2505"></a>
<span class="sourceLineNo">2506</span>    ClusterMetricsBuilder builder = ClusterMetricsBuilder.newBuilder();<a name="line.2506"></a>
<span class="sourceLineNo">2507</span>    // given that hbase1 can't submit the request with Option,<a name="line.2507"></a>
<span class="sourceLineNo">2508</span>    // we return all information to client if the list of Option is empty.<a name="line.2508"></a>
<span class="sourceLineNo">2509</span>    if (options.isEmpty()) {<a name="line.2509"></a>
<span class="sourceLineNo">2510</span>      options = EnumSet.allOf(Option.class);<a name="line.2510"></a>
<span class="sourceLineNo">2511</span>    }<a name="line.2511"></a>
<span class="sourceLineNo">2512</span><a name="line.2512"></a>
<span class="sourceLineNo">2513</span>    for (Option opt : options) {<a name="line.2513"></a>
<span class="sourceLineNo">2514</span>      switch (opt) {<a name="line.2514"></a>
<span class="sourceLineNo">2515</span>        case HBASE_VERSION: builder.setHBaseVersion(VersionInfo.getVersion()); break;<a name="line.2515"></a>
<span class="sourceLineNo">2516</span>        case CLUSTER_ID: builder.setClusterId(getClusterId()); break;<a name="line.2516"></a>
<span class="sourceLineNo">2517</span>        case MASTER: builder.setMasterName(getServerName()); break;<a name="line.2517"></a>
<span class="sourceLineNo">2518</span>        case BACKUP_MASTERS: builder.setBackerMasterNames(getBackupMasters()); break;<a name="line.2518"></a>
<span class="sourceLineNo">2519</span>        case LIVE_SERVERS: {<a name="line.2519"></a>
<span class="sourceLineNo">2520</span>          if (serverManager != null) {<a name="line.2520"></a>
<span class="sourceLineNo">2521</span>            builder.setLiveServerMetrics(serverManager.getOnlineServers().entrySet().stream()<a name="line.2521"></a>
<span class="sourceLineNo">2522</span>              .collect(Collectors.toMap(e -&gt; e.getKey(), e -&gt; e.getValue())));<a name="line.2522"></a>
<span class="sourceLineNo">2523</span>          }<a name="line.2523"></a>
<span class="sourceLineNo">2524</span>          break;<a name="line.2524"></a>
<span class="sourceLineNo">2525</span>        }<a name="line.2525"></a>
<span class="sourceLineNo">2526</span>        case DEAD_SERVERS: {<a name="line.2526"></a>
<span class="sourceLineNo">2527</span>          if (serverManager != null) {<a name="line.2527"></a>
<span class="sourceLineNo">2528</span>            builder.setDeadServerNames(new ArrayList&lt;&gt;(<a name="line.2528"></a>
<span class="sourceLineNo">2529</span>              serverManager.getDeadServers().copyServerNames()));<a name="line.2529"></a>
<span class="sourceLineNo">2530</span>          }<a name="line.2530"></a>
<span class="sourceLineNo">2531</span>          break;<a name="line.2531"></a>
<span class="sourceLineNo">2532</span>        }<a name="line.2532"></a>
<span class="sourceLineNo">2533</span>        case MASTER_COPROCESSORS: {<a name="line.2533"></a>
<span class="sourceLineNo">2534</span>          if (cpHost != null) {<a name="line.2534"></a>
<span class="sourceLineNo">2535</span>            builder.setMasterCoprocessorNames(Arrays.asList(getMasterCoprocessors()));<a name="line.2535"></a>
<span class="sourceLineNo">2536</span>          }<a name="line.2536"></a>
<span class="sourceLineNo">2537</span>          break;<a name="line.2537"></a>
<span class="sourceLineNo">2538</span>        }<a name="line.2538"></a>
<span class="sourceLineNo">2539</span>        case REGIONS_IN_TRANSITION: {<a name="line.2539"></a>
<span class="sourceLineNo">2540</span>          if (assignmentManager != null) {<a name="line.2540"></a>
<span class="sourceLineNo">2541</span>            builder.setRegionsInTransition(assignmentManager.getRegionStates()<a name="line.2541"></a>
<span class="sourceLineNo">2542</span>                .getRegionsStateInTransition());<a name="line.2542"></a>
<span class="sourceLineNo">2543</span>          }<a name="line.2543"></a>
<span class="sourceLineNo">2544</span>          break;<a name="line.2544"></a>
<span class="sourceLineNo">2545</span>        }<a name="line.2545"></a>
<span class="sourceLineNo">2546</span>        case BALANCER_ON: {<a name="line.2546"></a>
<span class="sourceLineNo">2547</span>          if (loadBalancerTracker != null) {<a name="line.2547"></a>
<span class="sourceLineNo">2548</span>            builder.setBalancerOn(loadBalancerTracker.isBalancerOn());<a name="line.2548"></a>
<span class="sourceLineNo">2549</span>          }<a name="line.2549"></a>
<span class="sourceLineNo">2550</span>          break;<a name="line.2550"></a>
<span class="sourceLineNo">2551</span>        }<a name="line.2551"></a>
<span class="sourceLineNo">2552</span>        case MASTER_INFO_PORT: {<a name="line.2552"></a>
<span class="sourceLineNo">2553</span>          if (infoServer != null) {<a name="line.2553"></a>
<span class="sourceLineNo">2554</span>            builder.setMasterInfoPort(infoServer.getPort());<a name="line.2554"></a>
<span class="sourceLineNo">2555</span>          }<a name="line.2555"></a>
<span class="sourceLineNo">2556</span>          break;<a name="line.2556"></a>
<span class="sourceLineNo">2557</span>        }<a name="line.2557"></a>
<span class="sourceLineNo">2558</span>        case SERVERS_NAME: {<a name="line.2558"></a>
<span class="sourceLineNo">2559</span>          if (serverManager != null) {<a name="line.2559"></a>
<span class="sourceLineNo">2560</span>            builder.setServerNames(serverManager.getOnlineServersList());<a name="line.2560"></a>
<span class="sourceLineNo">2561</span>          }<a name="line.2561"></a>
<span class="sourceLineNo">2562</span>          break;<a name="line.2562"></a>
<span class="sourceLineNo">2563</span>        }<a name="line.2563"></a>
<span class="sourceLineNo">2564</span>      }<a name="line.2564"></a>
<span class="sourceLineNo">2565</span>    }<a name="line.2565"></a>
<span class="sourceLineNo">2566</span>    return builder.build();<a name="line.2566"></a>
<span class="sourceLineNo">2567</span>  }<a name="line.2567"></a>
<span class="sourceLineNo">2568</span><a name="line.2568"></a>
<span class="sourceLineNo">2569</span>  /**<a name="line.2569"></a>
<span class="sourceLineNo">2570</span>   * @return cluster status<a name="line.2570"></a>
<span class="sourceLineNo">2571</span>   */<a name="line.2571"></a>
<span class="sourceLineNo">2572</span>  public ClusterMetrics getClusterMetrics() throws IOException {<a name="line.2572"></a>
<span class="sourceLineNo">2573</span>    return getClusterMetrics(EnumSet.allOf(Option.class));<a name="line.2573"></a>
<span class="sourceLineNo">2574</span>  }<a name="line.2574"></a>
<span class="sourceLineNo">2575</span><a name="line.2575"></a>
<span class="sourceLineNo">2576</span>  public ClusterMetrics getClusterMetrics(EnumSet&lt;Option&gt; options) throws IOException {<a name="line.2576"></a>
<span class="sourceLineNo">2577</span>    if (cpHost != null) {<a name="line.2577"></a>
<span class="sourceLineNo">2578</span>      cpHost.preGetClusterMetrics();<a name="line.2578"></a>
<span class="sourceLineNo">2579</span>    }<a name="line.2579"></a>
<span class="sourceLineNo">2580</span>    ClusterMetrics status = getClusterMetricsWithoutCoprocessor(options);<a name="line.2580"></a>
<span class="sourceLineNo">2581</span>    if (cpHost != null) {<a name="line.2581"></a>
<span class="sourceLineNo">2582</span>      cpHost.postGetClusterMetrics(status);<a name="line.2582"></a>
<span class="sourceLineNo">2583</span>    }<a name="line.2583"></a>
<span class="sourceLineNo">2584</span>    return status;<a name="line.2584"></a>
<span class="sourceLineNo">2585</span>  }<a name="line.2585"></a>
<span class="sourceLineNo">2586</span><a name="line.2586"></a>
<span class="sourceLineNo">2587</span>  private List&lt;ServerName&gt; getBackupMasters() throws InterruptedIOException {<a name="line.2587"></a>
<span class="sourceLineNo">2588</span>    // Build Set of backup masters from ZK nodes<a name="line.2588"></a>
<span class="sourceLineNo">2589</span>    List&lt;String&gt; backupMasterStrings;<a name="line.2589"></a>
<span class="sourceLineNo">2590</span>    try {<a name="line.2590"></a>
<span class="sourceLineNo">2591</span>      backupMasterStrings = ZKUtil.listChildrenNoWatch(this.zooKeeper,<a name="line.2591"></a>
<span class="sourceLineNo">2592</span>        this.zooKeeper.getZNodePaths().backupMasterAddressesZNode);<a name="line.2592"></a>
<span class="sourceLineNo">2593</span>    } catch (KeeperException e) {<a name="line.2593"></a>
<span class="sourceLineNo">2594</span>      LOG.warn(this.zooKeeper.prefix("Unable to list backup servers"), e);<a name="line.2594"></a>
<span class="sourceLineNo">2595</span>      backupMasterStrings = null;<a name="line.2595"></a>
<span class="sourceLineNo">2596</span>    }<a name="line.2596"></a>
<span class="sourceLineNo">2597</span><a name="line.2597"></a>
<span class="sourceLineNo">2598</span>    List&lt;ServerName&gt; backupMasters = Collections.emptyList();<a name="line.2598"></a>
<span class="sourceLineNo">2599</span>    if (backupMasterStrings != null &amp;&amp; !backupMasterStrings.isEmpty()) {<a name="line.2599"></a>
<span class="sourceLineNo">2600</span>      backupMasters = new ArrayList&lt;&gt;(backupMasterStrings.size());<a name="line.2600"></a>
<span class="sourceLineNo">2601</span>      for (String s: backupMasterStrings) {<a name="line.2601"></a>
<span class="sourceLineNo">2602</span>        try {<a name="line.2602"></a>
<span class="sourceLineNo">2603</span>          byte [] bytes;<a name="line.2603"></a>
<span class="sourceLineNo">2604</span>          try {<a name="line.2604"></a>
<span class="sourceLineNo">2605</span>            bytes = ZKUtil.getData(this.zooKeeper, ZNodePaths.joinZNode(<a name="line.2605"></a>
<span class="sourceLineNo">2606</span>                this.zooKeeper.getZNodePaths().backupMasterAddressesZNode, s));<a name="line.2606"></a>
<span class="sourceLineNo">2607</span>          } catch (InterruptedException e) {<a name="line.2607"></a>
<span class="sourceLineNo">2608</span>            throw new InterruptedIOException();<a name="line.2608"></a>
<span class="sourceLineNo">2609</span>          }<a name="line.2609"></a>
<span class="sourceLineNo">2610</span>          if (bytes != null) {<a name="line.2610"></a>
<span class="sourceLineNo">2611</span>            ServerName sn;<a name="line.2611"></a>
<span class="sourceLineNo">2612</span>            try {<a name="line.2612"></a>
<span class="sourceLineNo">2613</span>              sn = ProtobufUtil.parseServerNameFrom(bytes);<a name="line.2613"></a>
<span class="sourceLineNo">2614</span>            } catch (DeserializationException e) {<a name="line.2614"></a>
<span class="sourceLineNo">2615</span>              LOG.warn("Failed parse, skipping registering backup server", e);<a name="line.2615"></a>
<span class="sourceLineNo">2616</span>              continue;<a name="line.2616"></a>
<span class="sourceLineNo">2617</span>            }<a name="line.2617"></a>
<span class="sourceLineNo">2618</span>            backupMasters.add(sn);<a name="line.2618"></a>
<span class="sourceLineNo">2619</span>          }<a name="line.2619"></a>
<span class="sourceLineNo">2620</span>        } catch (KeeperException e) {<a name="line.2620"></a>
<span class="sourceLineNo">2621</span>          LOG.warn(this.zooKeeper.prefix("Unable to get information about " +<a name="line.2621"></a>
<span class="sourceLineNo">2622</span>                   "backup servers"), e);<a name="line.2622"></a>
<span class="sourceLineNo">2623</span>        }<a name="line.2623"></a>
<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
<span class="sourceLineNo">2625</span>      Collections.sort(backupMasters, new Comparator&lt;ServerName&gt;() {<a name="line.2625"></a>
<span class="sourceLineNo">2626</span>        @Override<a name="line.2626"></a>
<span class="sourceLineNo">2627</span>        public int compare(ServerName s1, ServerName s2) {<a name="line.2627"></a>
<span class="sourceLineNo">2628</span>          return s1.getServerName().compareTo(s2.getServerName());<a name="line.2628"></a>
<span class="sourceLineNo">2629</span>        }});<a name="line.2629"></a>
<span class="sourceLineNo">2630</span>    }<a name="line.2630"></a>
<span class="sourceLineNo">2631</span>    return backupMasters;<a name="line.2631"></a>
<span class="sourceLineNo">2632</span>  }<a name="line.2632"></a>
<span class="sourceLineNo">2633</span><a name="line.2633"></a>
<span class="sourceLineNo">2634</span>  /**<a name="line.2634"></a>
<span class="sourceLineNo">2635</span>   * The set of loaded coprocessors is stored in a static set. Since it's<a name="line.2635"></a>
<span class="sourceLineNo">2636</span>   * statically allocated, it does not require that HMaster's cpHost be<a name="line.2636"></a>
<span class="sourceLineNo">2637</span>   * initialized prior to accessing it.<a name="line.2637"></a>
<span class="sourceLineNo">2638</span>   * @return a String representation of the set of names of the loaded coprocessors.<a name="line.2638"></a>
<span class="sourceLineNo">2639</span>   */<a name="line.2639"></a>
<span class="sourceLineNo">2640</span>  public static String getLoadedCoprocessors() {<a name="line.2640"></a>
<span class="sourceLineNo">2641</span>    return CoprocessorHost.getLoadedCoprocessors().toString();<a name="line.2641"></a>
<span class="sourceLineNo">2642</span>  }<a name="line.2642"></a>
<span class="sourceLineNo">2643</span><a name="line.2643"></a>
<span class="sourceLineNo">2644</span>  /**<a name="line.2644"></a>
<span class="sourceLineNo">2645</span>   * @return timestamp in millis when HMaster was started.<a name="line.2645"></a>
<span class="sourceLineNo">2646</span>   */<a name="line.2646"></a>
<span class="sourceLineNo">2647</span>  public long getMasterStartTime() {<a name="line.2647"></a>
<span class="sourceLineNo">2648</span>    return startcode;<a name="line.2648"></a>
<span class="sourceLineNo">2649</span>  }<a name="line.2649"></a>
<span class="sourceLineNo">2650</span><a name="line.2650"></a>
<span class="sourceLineNo">2651</span>  /**<a name="line.2651"></a>
<span class="sourceLineNo">2652</span>   * @return timestamp in millis when HMaster became the active master.<a name="line.2652"></a>
<span class="sourceLineNo">2653</span>   */<a name="line.2653"></a>
<span class="sourceLineNo">2654</span>  public long getMasterActiveTime() {<a name="line.2654"></a>
<span class="sourceLineNo">2655</span>    return masterActiveTime;<a name="line.2655"></a>
<span class="sourceLineNo">2656</span>  }<a name="line.2656"></a>
<span class="sourceLineNo">2657</span><a name="line.2657"></a>
<span class="sourceLineNo">2658</span>  /**<a name="line.2658"></a>
<span class="sourceLineNo">2659</span>   * @return timestamp in millis when HMaster finished becoming the active master<a name="line.2659"></a>
<span class="sourceLineNo">2660</span>   */<a name="line.2660"></a>
<span class="sourceLineNo">2661</span>  public long getMasterFinishedInitializationTime() {<a name="line.2661"></a>
<span class="sourceLineNo">2662</span>    return masterFinishedInitializationTime;<a name="line.2662"></a>
<span class="sourceLineNo">2663</span>  }<a name="line.2663"></a>
<span class="sourceLineNo">2664</span><a name="line.2664"></a>
<span class="sourceLineNo">2665</span>  public int getNumWALFiles() {<a name="line.2665"></a>
<span class="sourceLineNo">2666</span>    return procedureStore != null ? procedureStore.getActiveLogs().size() : 0;<a name="line.2666"></a>
<span class="sourceLineNo">2667</span>  }<a name="line.2667"></a>
<span class="sourceLineNo">2668</span><a name="line.2668"></a>
<span class="sourceLineNo">2669</span>  public WALProcedureStore getWalProcedureStore() {<a name="line.2669"></a>
<span class="sourceLineNo">2670</span>    return procedureStore;<a name="line.2670"></a>
<span class="sourceLineNo">2671</span>  }<a name="line.2671"></a>
<span class="sourceLineNo">2672</span><a name="line.2672"></a>
<span class="sourceLineNo">2673</span>  public int getRegionServerInfoPort(final ServerName sn) {<a name="line.2673"></a>
<span class="sourceLineNo">2674</span>    int port = this.serverManager.getInfoPort(sn);<a name="line.2674"></a>
<span class="sourceLineNo">2675</span>    return port == 0 ? conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.2675"></a>
<span class="sourceLineNo">2676</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT) : port;<a name="line.2676"></a>
<span class="sourceLineNo">2677</span>  }<a name="line.2677"></a>
<span class="sourceLineNo">2678</span><a name="line.2678"></a>
<span class="sourceLineNo">2679</span>  @Override<a name="line.2679"></a>
<span class="sourceLineNo">2680</span>  public String getRegionServerVersion(ServerName sn) {<a name="line.2680"></a>
<span class="sourceLineNo">2681</span>    // Will return "0.0.0" if the server is not online to prevent move system region to unknown<a name="line.2681"></a>
<span class="sourceLineNo">2682</span>    // version RS.<a name="line.2682"></a>
<span class="sourceLineNo">2683</span>    return this.serverManager.getVersion(sn);<a name="line.2683"></a>
<span class="sourceLineNo">2684</span>  }<a name="line.2684"></a>
<span class="sourceLineNo">2685</span><a name="line.2685"></a>
<span class="sourceLineNo">2686</span>  @Override<a name="line.2686"></a>
<span class="sourceLineNo">2687</span>  public void checkIfShouldMoveSystemRegionAsync() {<a name="line.2687"></a>
<span class="sourceLineNo">2688</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.2688"></a>
<span class="sourceLineNo">2689</span>  }<a name="line.2689"></a>
<span class="sourceLineNo">2690</span><a name="line.2690"></a>
<span class="sourceLineNo">2691</span>  /**<a name="line.2691"></a>
<span class="sourceLineNo">2692</span>   * @return array of coprocessor SimpleNames.<a name="line.2692"></a>
<span class="sourceLineNo">2693</span>   */<a name="line.2693"></a>
<span class="sourceLineNo">2694</span>  public String[] getMasterCoprocessors() {<a name="line.2694"></a>
<span class="sourceLineNo">2695</span>    Set&lt;String&gt; masterCoprocessors = getMasterCoprocessorHost().getCoprocessors();<a name="line.2695"></a>
<span class="sourceLineNo">2696</span>    return masterCoprocessors.toArray(new String[masterCoprocessors.size()]);<a name="line.2696"></a>
<span class="sourceLineNo">2697</span>  }<a name="line.2697"></a>
<span class="sourceLineNo">2698</span><a name="line.2698"></a>
<span class="sourceLineNo">2699</span>  @Override<a name="line.2699"></a>
<span class="sourceLineNo">2700</span>  public void abort(String reason, Throwable cause) {<a name="line.2700"></a>
<span class="sourceLineNo">2701</span>    if (isAborted() || isStopped()) {<a name="line.2701"></a>
<span class="sourceLineNo">2702</span>      return;<a name="line.2702"></a>
<span class="sourceLineNo">2703</span>    }<a name="line.2703"></a>
<span class="sourceLineNo">2704</span>    setAbortRequested();<a name="line.2704"></a>
<span class="sourceLineNo">2705</span>    if (cpHost != null) {<a name="line.2705"></a>
<span class="sourceLineNo">2706</span>      // HBASE-4014: dump a list of loaded coprocessors.<a name="line.2706"></a>
<span class="sourceLineNo">2707</span>      LOG.error(HBaseMarkers.FATAL, "Master server abort: loaded coprocessors are: " +<a name="line.2707"></a>
<span class="sourceLineNo">2708</span>          getLoadedCoprocessors());<a name="line.2708"></a>
<span class="sourceLineNo">2709</span>    }<a name="line.2709"></a>
<span class="sourceLineNo">2710</span>    String msg = "***** ABORTING master " + this + ": " + reason + " *****";<a name="line.2710"></a>
<span class="sourceLineNo">2711</span>    if (cause != null) {<a name="line.2711"></a>
<span class="sourceLineNo">2712</span>      LOG.error(HBaseMarkers.FATAL, msg, cause);<a name="line.2712"></a>
<span class="sourceLineNo">2713</span>    } else {<a name="line.2713"></a>
<span class="sourceLineNo">2714</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.2714"></a>
<span class="sourceLineNo">2715</span>    }<a name="line.2715"></a>
<span class="sourceLineNo">2716</span><a name="line.2716"></a>
<span class="sourceLineNo">2717</span>    try {<a name="line.2717"></a>
<span class="sourceLineNo">2718</span>      stopMaster();<a name="line.2718"></a>
<span class="sourceLineNo">2719</span>    } catch (IOException e) {<a name="line.2719"></a>
<span class="sourceLineNo">2720</span>      LOG.error("Exception occurred while stopping master", e);<a name="line.2720"></a>
<span class="sourceLineNo">2721</span>    }<a name="line.2721"></a>
<span class="sourceLineNo">2722</span>  }<a name="line.2722"></a>
<span class="sourceLineNo">2723</span><a name="line.2723"></a>
<span class="sourceLineNo">2724</span>  @Override<a name="line.2724"></a>
<span class="sourceLineNo">2725</span>  public ZKWatcher getZooKeeper() {<a name="line.2725"></a>
<span class="sourceLineNo">2726</span>    return zooKeeper;<a name="line.2726"></a>
<span class="sourceLineNo">2727</span>  }<a name="line.2727"></a>
<span class="sourceLineNo">2728</span><a name="line.2728"></a>
<span class="sourceLineNo">2729</span>  @Override<a name="line.2729"></a>
<span class="sourceLineNo">2730</span>  public MasterCoprocessorHost getMasterCoprocessorHost() {<a name="line.2730"></a>
<span class="sourceLineNo">2731</span>    return cpHost;<a name="line.2731"></a>
<span class="sourceLineNo">2732</span>  }<a name="line.2732"></a>
<span class="sourceLineNo">2733</span><a name="line.2733"></a>
<span class="sourceLineNo">2734</span>  @Override<a name="line.2734"></a>
<span class="sourceLineNo">2735</span>  public MasterQuotaManager getMasterQuotaManager() {<a name="line.2735"></a>
<span class="sourceLineNo">2736</span>    return quotaManager;<a name="line.2736"></a>
<span class="sourceLineNo">2737</span>  }<a name="line.2737"></a>
<span class="sourceLineNo">2738</span><a name="line.2738"></a>
<span class="sourceLineNo">2739</span>  @Override<a name="line.2739"></a>
<span class="sourceLineNo">2740</span>  public ProcedureExecutor&lt;MasterProcedureEnv&gt; getMasterProcedureExecutor() {<a name="line.2740"></a>
<span class="sourceLineNo">2741</span>    return procedureExecutor;<a name="line.2741"></a>
<span class="sourceLineNo">2742</span>  }<a name="line.2742"></a>
<span class="sourceLineNo">2743</span><a name="line.2743"></a>
<span class="sourceLineNo">2744</span>  @Override<a name="line.2744"></a>
<span class="sourceLineNo">2745</span>  public ServerName getServerName() {<a name="line.2745"></a>
<span class="sourceLineNo">2746</span>    return this.serverName;<a name="line.2746"></a>
<span class="sourceLineNo">2747</span>  }<a name="line.2747"></a>
<span class="sourceLineNo">2748</span><a name="line.2748"></a>
<span class="sourceLineNo">2749</span>  @Override<a name="line.2749"></a>
<span class="sourceLineNo">2750</span>  public AssignmentManager getAssignmentManager() {<a name="line.2750"></a>
<span class="sourceLineNo">2751</span>    return this.assignmentManager;<a name="line.2751"></a>
<span class="sourceLineNo">2752</span>  }<a name="line.2752"></a>
<span class="sourceLineNo">2753</span><a name="line.2753"></a>
<span class="sourceLineNo">2754</span>  @Override<a name="line.2754"></a>
<span class="sourceLineNo">2755</span>  public CatalogJanitor getCatalogJanitor() {<a name="line.2755"></a>
<span class="sourceLineNo">2756</span>    return this.catalogJanitorChore;<a name="line.2756"></a>
<span class="sourceLineNo">2757</span>  }<a name="line.2757"></a>
<span class="sourceLineNo">2758</span><a name="line.2758"></a>
<span class="sourceLineNo">2759</span>  public MemoryBoundedLogMessageBuffer getRegionServerFatalLogBuffer() {<a name="line.2759"></a>
<span class="sourceLineNo">2760</span>    return rsFatals;<a name="line.2760"></a>
<span class="sourceLineNo">2761</span>  }<a name="line.2761"></a>
<span class="sourceLineNo">2762</span><a name="line.2762"></a>
<span class="sourceLineNo">2763</span>  /**<a name="line.2763"></a>
<span class="sourceLineNo">2764</span>   * Shutdown the cluster.<a name="line.2764"></a>
<span class="sourceLineNo">2765</span>   * Master runs a coordinated stop of all RegionServers and then itself.<a name="line.2765"></a>
<span class="sourceLineNo">2766</span>   */<a name="line.2766"></a>
<span class="sourceLineNo">2767</span>  public void shutdown() throws IOException {<a name="line.2767"></a>
<span class="sourceLineNo">2768</span>    if (cpHost != null) {<a name="line.2768"></a>
<span class="sourceLineNo">2769</span>      cpHost.preShutdown();<a name="line.2769"></a>
<span class="sourceLineNo">2770</span>    }<a name="line.2770"></a>
<span class="sourceLineNo">2771</span>    // Tell the servermanager cluster shutdown has been called. This makes it so when Master is<a name="line.2771"></a>
<span class="sourceLineNo">2772</span>    // last running server, it'll stop itself. Next, we broadcast the cluster shutdown by setting<a name="line.2772"></a>
<span class="sourceLineNo">2773</span>    // the cluster status as down. RegionServers will notice this change in state and will start<a name="line.2773"></a>
<span class="sourceLineNo">2774</span>    // shutting themselves down. When last has exited, Master can go down.<a name="line.2774"></a>
<span class="sourceLineNo">2775</span>    if (this.serverManager != null) {<a name="line.2775"></a>
<span class="sourceLineNo">2776</span>      this.serverManager.shutdownCluster();<a name="line.2776"></a>
<span class="sourceLineNo">2777</span>    }<a name="line.2777"></a>
<span class="sourceLineNo">2778</span>    if (this.clusterStatusTracker != null) {<a name="line.2778"></a>
<span class="sourceLineNo">2779</span>      try {<a name="line.2779"></a>
<span class="sourceLineNo">2780</span>        this.clusterStatusTracker.setClusterDown();<a name="line.2780"></a>
<span class="sourceLineNo">2781</span>      } catch (KeeperException e) {<a name="line.2781"></a>
<span class="sourceLineNo">2782</span>        LOG.error("ZooKeeper exception trying to set cluster as down in ZK", e);<a name="line.2782"></a>
<span class="sourceLineNo">2783</span>      }<a name="line.2783"></a>
<span class="sourceLineNo">2784</span>    }<a name="line.2784"></a>
<span class="sourceLineNo">2785</span>    // Stop the procedure executor. Will stop any ongoing assign, unassign, server crash etc.,<a name="line.2785"></a>
<span class="sourceLineNo">2786</span>    // processing so we can go down.<a name="line.2786"></a>
<span class="sourceLineNo">2787</span>    if (this.procedureExecutor != null) {<a name="line.2787"></a>
<span class="sourceLineNo">2788</span>      this.procedureExecutor.stop();<a name="line.2788"></a>
<span class="sourceLineNo">2789</span>    }<a name="line.2789"></a>
<span class="sourceLineNo">2790</span>    // Shutdown our cluster connection. This will kill any hosted RPCs that might be going on;<a name="line.2790"></a>
<span class="sourceLineNo">2791</span>    // this is what we want especially if the Master is in startup phase doing call outs to<a name="line.2791"></a>
<span class="sourceLineNo">2792</span>    // hbase:meta, etc. when cluster is down. Without ths connection close, we'd have to wait on<a name="line.2792"></a>
<span class="sourceLineNo">2793</span>    // the rpc to timeout.<a name="line.2793"></a>
<span class="sourceLineNo">2794</span>    if (this.asyncClusterConnection != null) {<a name="line.2794"></a>
<span class="sourceLineNo">2795</span>      this.asyncClusterConnection.close();<a name="line.2795"></a>
<span class="sourceLineNo">2796</span>    }<a name="line.2796"></a>
<span class="sourceLineNo">2797</span>  }<a name="line.2797"></a>
<span class="sourceLineNo">2798</span><a name="line.2798"></a>
<span class="sourceLineNo">2799</span>  public void stopMaster() throws IOException {<a name="line.2799"></a>
<span class="sourceLineNo">2800</span>    if (cpHost != null) {<a name="line.2800"></a>
<span class="sourceLineNo">2801</span>      cpHost.preStopMaster();<a name="line.2801"></a>
<span class="sourceLineNo">2802</span>    }<a name="line.2802"></a>
<span class="sourceLineNo">2803</span>    stop("Stopped by " + Thread.currentThread().getName());<a name="line.2803"></a>
<span class="sourceLineNo">2804</span>  }<a name="line.2804"></a>
<span class="sourceLineNo">2805</span><a name="line.2805"></a>
<span class="sourceLineNo">2806</span>  @Override<a name="line.2806"></a>
<span class="sourceLineNo">2807</span>  public void stop(String msg) {<a name="line.2807"></a>
<span class="sourceLineNo">2808</span>    if (!isStopped()) {<a name="line.2808"></a>
<span class="sourceLineNo">2809</span>      super.stop(msg);<a name="line.2809"></a>
<span class="sourceLineNo">2810</span>      if (this.activeMasterManager != null) {<a name="line.2810"></a>
<span class="sourceLineNo">2811</span>        this.activeMasterManager.stop();<a name="line.2811"></a>
<span class="sourceLineNo">2812</span>      }<a name="line.2812"></a>
<span class="sourceLineNo">2813</span>    }<a name="line.2813"></a>
<span class="sourceLineNo">2814</span>  }<a name="line.2814"></a>
<span class="sourceLineNo">2815</span><a name="line.2815"></a>
<span class="sourceLineNo">2816</span>  @VisibleForTesting<a name="line.2816"></a>
<span class="sourceLineNo">2817</span>  protected void checkServiceStarted() throws ServerNotRunningYetException {<a name="line.2817"></a>
<span class="sourceLineNo">2818</span>    if (!serviceStarted) {<a name="line.2818"></a>
<span class="sourceLineNo">2819</span>      throw new ServerNotRunningYetException("Server is not running yet");<a name="line.2819"></a>
<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
<span class="sourceLineNo">2821</span>  }<a name="line.2821"></a>
<span class="sourceLineNo">2822</span><a name="line.2822"></a>
<span class="sourceLineNo">2823</span>  public static class MasterStoppedException extends DoNotRetryIOException {<a name="line.2823"></a>
<span class="sourceLineNo">2824</span>    MasterStoppedException() {<a name="line.2824"></a>
<span class="sourceLineNo">2825</span>      super();<a name="line.2825"></a>
<span class="sourceLineNo">2826</span>    }<a name="line.2826"></a>
<span class="sourceLineNo">2827</span>  }<a name="line.2827"></a>
<span class="sourceLineNo">2828</span><a name="line.2828"></a>
<span class="sourceLineNo">2829</span>  void checkInitialized() throws PleaseHoldException, ServerNotRunningYetException,<a name="line.2829"></a>
<span class="sourceLineNo">2830</span>      MasterNotRunningException, MasterStoppedException {<a name="line.2830"></a>
<span class="sourceLineNo">2831</span>    checkServiceStarted();<a name="line.2831"></a>
<span class="sourceLineNo">2832</span>    if (!isInitialized()) {<a name="line.2832"></a>
<span class="sourceLineNo">2833</span>      throw new PleaseHoldException("Master is initializing");<a name="line.2833"></a>
<span class="sourceLineNo">2834</span>    }<a name="line.2834"></a>
<span class="sourceLineNo">2835</span>    if (isStopped()) {<a name="line.2835"></a>
<span class="sourceLineNo">2836</span>      throw new MasterStoppedException();<a name="line.2836"></a>
<span class="sourceLineNo">2837</span>    }<a name="line.2837"></a>
<span class="sourceLineNo">2838</span>  }<a name="line.2838"></a>
<span class="sourceLineNo">2839</span><a name="line.2839"></a>
<span class="sourceLineNo">2840</span>  /**<a name="line.2840"></a>
<span class="sourceLineNo">2841</span>   * Report whether this master is currently the active master or not.<a name="line.2841"></a>
<span class="sourceLineNo">2842</span>   * If not active master, we are parked on ZK waiting to become active.<a name="line.2842"></a>
<span class="sourceLineNo">2843</span>   *<a name="line.2843"></a>
<span class="sourceLineNo">2844</span>   * This method is used for testing.<a name="line.2844"></a>
<span class="sourceLineNo">2845</span>   *<a name="line.2845"></a>
<span class="sourceLineNo">2846</span>   * @return true if active master, false if not.<a name="line.2846"></a>
<span class="sourceLineNo">2847</span>   */<a name="line.2847"></a>
<span class="sourceLineNo">2848</span>  @Override<a name="line.2848"></a>
<span class="sourceLineNo">2849</span>  public boolean isActiveMaster() {<a name="line.2849"></a>
<span class="sourceLineNo">2850</span>    return activeMaster;<a name="line.2850"></a>
<span class="sourceLineNo">2851</span>  }<a name="line.2851"></a>
<span class="sourceLineNo">2852</span><a name="line.2852"></a>
<span class="sourceLineNo">2853</span>  /**<a name="line.2853"></a>
<span class="sourceLineNo">2854</span>   * Report whether this master has completed with its initialization and is<a name="line.2854"></a>
<span class="sourceLineNo">2855</span>   * ready.  If ready, the master is also the active master.  A standby master<a name="line.2855"></a>
<span class="sourceLineNo">2856</span>   * is never ready.<a name="line.2856"></a>
<span class="sourceLineNo">2857</span>   *<a name="line.2857"></a>
<span class="sourceLineNo">2858</span>   * This method is used for testing.<a name="line.2858"></a>
<span class="sourceLineNo">2859</span>   *<a name="line.2859"></a>
<span class="sourceLineNo">2860</span>   * @return true if master is ready to go, false if not.<a name="line.2860"></a>
<span class="sourceLineNo">2861</span>   */<a name="line.2861"></a>
<span class="sourceLineNo">2862</span>  @Override<a name="line.2862"></a>
<span class="sourceLineNo">2863</span>  public boolean isInitialized() {<a name="line.2863"></a>
<span class="sourceLineNo">2864</span>    return initialized.isReady();<a name="line.2864"></a>
<span class="sourceLineNo">2865</span>  }<a name="line.2865"></a>
<span class="sourceLineNo">2866</span><a name="line.2866"></a>
<span class="sourceLineNo">2867</span>  /**<a name="line.2867"></a>
<span class="sourceLineNo">2868</span>   * Report whether this master is in maintenance mode.<a name="line.2868"></a>
<span class="sourceLineNo">2869</span>   *<a name="line.2869"></a>
<span class="sourceLineNo">2870</span>   * @return true if master is in maintenanceMode<a name="line.2870"></a>
<span class="sourceLineNo">2871</span>   */<a name="line.2871"></a>
<span class="sourceLineNo">2872</span>  @Override<a name="line.2872"></a>
<span class="sourceLineNo">2873</span>  public boolean isInMaintenanceMode() {<a name="line.2873"></a>
<span class="sourceLineNo">2874</span>    return maintenanceMode;<a name="line.2874"></a>
<span class="sourceLineNo">2875</span>  }<a name="line.2875"></a>
<span class="sourceLineNo">2876</span><a name="line.2876"></a>
<span class="sourceLineNo">2877</span>  @VisibleForTesting<a name="line.2877"></a>
<span class="sourceLineNo">2878</span>  public void setInitialized(boolean isInitialized) {<a name="line.2878"></a>
<span class="sourceLineNo">2879</span>    procedureExecutor.getEnvironment().setEventReady(initialized, isInitialized);<a name="line.2879"></a>
<span class="sourceLineNo">2880</span>  }<a name="line.2880"></a>
<span class="sourceLineNo">2881</span><a name="line.2881"></a>
<span class="sourceLineNo">2882</span>  @Override<a name="line.2882"></a>
<span class="sourceLineNo">2883</span>  public ProcedureEvent&lt;?&gt; getInitializedEvent() {<a name="line.2883"></a>
<span class="sourceLineNo">2884</span>    return initialized;<a name="line.2884"></a>
<span class="sourceLineNo">2885</span>  }<a name="line.2885"></a>
<span class="sourceLineNo">2886</span><a name="line.2886"></a>
<span class="sourceLineNo">2887</span>  /**<a name="line.2887"></a>
<span class="sourceLineNo">2888</span>   * Compute the average load across all region servers.<a name="line.2888"></a>
<span class="sourceLineNo">2889</span>   * Currently, this uses a very naive computation - just uses the number of<a name="line.2889"></a>
<span class="sourceLineNo">2890</span>   * regions being served, ignoring stats about number of requests.<a name="line.2890"></a>
<span class="sourceLineNo">2891</span>   * @return the average load<a name="line.2891"></a>
<span class="sourceLineNo">2892</span>   */<a name="line.2892"></a>
<span class="sourceLineNo">2893</span>  public double getAverageLoad() {<a name="line.2893"></a>
<span class="sourceLineNo">2894</span>    if (this.assignmentManager == null) {<a name="line.2894"></a>
<span class="sourceLineNo">2895</span>      return 0;<a name="line.2895"></a>
<span class="sourceLineNo">2896</span>    }<a name="line.2896"></a>
<span class="sourceLineNo">2897</span><a name="line.2897"></a>
<span class="sourceLineNo">2898</span>    RegionStates regionStates = this.assignmentManager.getRegionStates();<a name="line.2898"></a>
<span class="sourceLineNo">2899</span>    if (regionStates == null) {<a name="line.2899"></a>
<span class="sourceLineNo">2900</span>      return 0;<a name="line.2900"></a>
<span class="sourceLineNo">2901</span>    }<a name="line.2901"></a>
<span class="sourceLineNo">2902</span>    return regionStates.getAverageLoad();<a name="line.2902"></a>
<span class="sourceLineNo">2903</span>  }<a name="line.2903"></a>
<span class="sourceLineNo">2904</span><a name="line.2904"></a>
<span class="sourceLineNo">2905</span>  /*<a name="line.2905"></a>
<span class="sourceLineNo">2906</span>   * @return the count of region split plans executed<a name="line.2906"></a>
<span class="sourceLineNo">2907</span>   */<a name="line.2907"></a>
<span class="sourceLineNo">2908</span>  public long getSplitPlanCount() {<a name="line.2908"></a>
<span class="sourceLineNo">2909</span>    return splitPlanCount;<a name="line.2909"></a>
<span class="sourceLineNo">2910</span>  }<a name="line.2910"></a>
<span class="sourceLineNo">2911</span><a name="line.2911"></a>
<span class="sourceLineNo">2912</span>  /*<a name="line.2912"></a>
<span class="sourceLineNo">2913</span>   * @return the count of region merge plans executed<a name="line.2913"></a>
<span class="sourceLineNo">2914</span>   */<a name="line.2914"></a>
<span class="sourceLineNo">2915</span>  public long getMergePlanCount() {<a name="line.2915"></a>
<span class="sourceLineNo">2916</span>    return mergePlanCount;<a name="line.2916"></a>
<span class="sourceLineNo">2917</span>  }<a name="line.2917"></a>
<span class="sourceLineNo">2918</span><a name="line.2918"></a>
<span class="sourceLineNo">2919</span>  @Override<a name="line.2919"></a>
<span class="sourceLineNo">2920</span>  public boolean registerService(Service instance) {<a name="line.2920"></a>
<span class="sourceLineNo">2921</span>    /*<a name="line.2921"></a>
<span class="sourceLineNo">2922</span>     * No stacking of instances is allowed for a single service name<a name="line.2922"></a>
<span class="sourceLineNo">2923</span>     */<a name="line.2923"></a>
<span class="sourceLineNo">2924</span>    Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.2924"></a>
<span class="sourceLineNo">2925</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.2925"></a>
<span class="sourceLineNo">2926</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.2926"></a>
<span class="sourceLineNo">2927</span>      LOG.error("Coprocessor service "+serviceName+<a name="line.2927"></a>
<span class="sourceLineNo">2928</span>          " already registered, rejecting request from "+instance<a name="line.2928"></a>
<span class="sourceLineNo">2929</span>      );<a name="line.2929"></a>
<span class="sourceLineNo">2930</span>      return false;<a name="line.2930"></a>
<span class="sourceLineNo">2931</span>    }<a name="line.2931"></a>
<span class="sourceLineNo">2932</span><a name="line.2932"></a>
<span class="sourceLineNo">2933</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.2933"></a>
<span class="sourceLineNo">2934</span>    if (LOG.isDebugEnabled()) {<a name="line.2934"></a>
<span class="sourceLineNo">2935</span>      LOG.debug("Registered master coprocessor service: service="+serviceName);<a name="line.2935"></a>
<span class="sourceLineNo">2936</span>    }<a name="line.2936"></a>
<span class="sourceLineNo">2937</span>    return true;<a name="line.2937"></a>
<span class="sourceLineNo">2938</span>  }<a name="line.2938"></a>
<span class="sourceLineNo">2939</span><a name="line.2939"></a>
<span class="sourceLineNo">2940</span>  /**<a name="line.2940"></a>
<span class="sourceLineNo">2941</span>   * Utility for constructing an instance of the passed HMaster class.<a name="line.2941"></a>
<span class="sourceLineNo">2942</span>   * @param masterClass<a name="line.2942"></a>
<span class="sourceLineNo">2943</span>   * @return HMaster instance.<a name="line.2943"></a>
<span class="sourceLineNo">2944</span>   */<a name="line.2944"></a>
<span class="sourceLineNo">2945</span>  public static HMaster constructMaster(Class&lt;? extends HMaster&gt; masterClass,<a name="line.2945"></a>
<span class="sourceLineNo">2946</span>      final Configuration conf)  {<a name="line.2946"></a>
<span class="sourceLineNo">2947</span>    try {<a name="line.2947"></a>
<span class="sourceLineNo">2948</span>      Constructor&lt;? extends HMaster&gt; c = masterClass.getConstructor(Configuration.class);<a name="line.2948"></a>
<span class="sourceLineNo">2949</span>      return c.newInstance(conf);<a name="line.2949"></a>
<span class="sourceLineNo">2950</span>    } catch(Exception e) {<a name="line.2950"></a>
<span class="sourceLineNo">2951</span>      Throwable error = e;<a name="line.2951"></a>
<span class="sourceLineNo">2952</span>      if (e instanceof InvocationTargetException &amp;&amp;<a name="line.2952"></a>
<span class="sourceLineNo">2953</span>          ((InvocationTargetException)e).getTargetException() != null) {<a name="line.2953"></a>
<span class="sourceLineNo">2954</span>        error = ((InvocationTargetException)e).getTargetException();<a name="line.2954"></a>
<span class="sourceLineNo">2955</span>      }<a name="line.2955"></a>
<span class="sourceLineNo">2956</span>      throw new RuntimeException("Failed construction of Master: " + masterClass.toString() + ". "<a name="line.2956"></a>
<span class="sourceLineNo">2957</span>        , error);<a name="line.2957"></a>
<span class="sourceLineNo">2958</span>    }<a name="line.2958"></a>
<span class="sourceLineNo">2959</span>  }<a name="line.2959"></a>
<span class="sourceLineNo">2960</span><a name="line.2960"></a>
<span class="sourceLineNo">2961</span>  /**<a name="line.2961"></a>
<span class="sourceLineNo">2962</span>   * @see org.apache.hadoop.hbase.master.HMasterCommandLine<a name="line.2962"></a>
<span class="sourceLineNo">2963</span>   */<a name="line.2963"></a>
<span class="sourceLineNo">2964</span>  public static void main(String [] args) {<a name="line.2964"></a>
<span class="sourceLineNo">2965</span>    LOG.info("STARTING service " + HMaster.class.getSimpleName());<a name="line.2965"></a>
<span class="sourceLineNo">2966</span>    VersionInfo.logVersion();<a name="line.2966"></a>
<span class="sourceLineNo">2967</span>    new HMasterCommandLine(HMaster.class).doMain(args);<a name="line.2967"></a>
<span class="sourceLineNo">2968</span>  }<a name="line.2968"></a>
<span class="sourceLineNo">2969</span><a name="line.2969"></a>
<span class="sourceLineNo">2970</span>  public HFileCleaner getHFileCleaner() {<a name="line.2970"></a>
<span class="sourceLineNo">2971</span>    return this.hfileCleaner;<a name="line.2971"></a>
<span class="sourceLineNo">2972</span>  }<a name="line.2972"></a>
<span class="sourceLineNo">2973</span><a name="line.2973"></a>
<span class="sourceLineNo">2974</span>  public LogCleaner getLogCleaner() {<a name="line.2974"></a>
<span class="sourceLineNo">2975</span>    return this.logCleaner;<a name="line.2975"></a>
<span class="sourceLineNo">2976</span>  }<a name="line.2976"></a>
<span class="sourceLineNo">2977</span><a name="line.2977"></a>
<span class="sourceLineNo">2978</span>  /**<a name="line.2978"></a>
<span class="sourceLineNo">2979</span>   * @return the underlying snapshot manager<a name="line.2979"></a>
<span class="sourceLineNo">2980</span>   */<a name="line.2980"></a>
<span class="sourceLineNo">2981</span>  @Override<a name="line.2981"></a>
<span class="sourceLineNo">2982</span>  public SnapshotManager getSnapshotManager() {<a name="line.2982"></a>
<span class="sourceLineNo">2983</span>    return this.snapshotManager;<a name="line.2983"></a>
<span class="sourceLineNo">2984</span>  }<a name="line.2984"></a>
<span class="sourceLineNo">2985</span><a name="line.2985"></a>
<span class="sourceLineNo">2986</span>  /**<a name="line.2986"></a>
<span class="sourceLineNo">2987</span>   * @return the underlying MasterProcedureManagerHost<a name="line.2987"></a>
<span class="sourceLineNo">2988</span>   */<a name="line.2988"></a>
<span class="sourceLineNo">2989</span>  @Override<a name="line.2989"></a>
<span class="sourceLineNo">2990</span>  public MasterProcedureManagerHost getMasterProcedureManagerHost() {<a name="line.2990"></a>
<span class="sourceLineNo">2991</span>    return mpmHost;<a name="line.2991"></a>
<span class="sourceLineNo">2992</span>  }<a name="line.2992"></a>
<span class="sourceLineNo">2993</span><a name="line.2993"></a>
<span class="sourceLineNo">2994</span>  @Override<a name="line.2994"></a>
<span class="sourceLineNo">2995</span>  public ClusterSchema getClusterSchema() {<a name="line.2995"></a>
<span class="sourceLineNo">2996</span>    return this.clusterSchemaService;<a name="line.2996"></a>
<span class="sourceLineNo">2997</span>  }<a name="line.2997"></a>
<span class="sourceLineNo">2998</span><a name="line.2998"></a>
<span class="sourceLineNo">2999</span>  /**<a name="line.2999"></a>
<span class="sourceLineNo">3000</span>   * Create a new Namespace.<a name="line.3000"></a>
<span class="sourceLineNo">3001</span>   * @param namespaceDescriptor descriptor for new Namespace<a name="line.3001"></a>
<span class="sourceLineNo">3002</span>   * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3002"></a>
<span class="sourceLineNo">3003</span>   * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3003"></a>
<span class="sourceLineNo">3004</span>   * &lt;code&gt;nonceGroup&lt;/code&gt; (the source must ensure each operation gets a unique id).<a name="line.3004"></a>
<span class="sourceLineNo">3005</span>   * @return procedure id<a name="line.3005"></a>
<span class="sourceLineNo">3006</span>   */<a name="line.3006"></a>
<span class="sourceLineNo">3007</span>  long createNamespace(final NamespaceDescriptor namespaceDescriptor, final long nonceGroup,<a name="line.3007"></a>
<span class="sourceLineNo">3008</span>      final long nonce) throws IOException {<a name="line.3008"></a>
<span class="sourceLineNo">3009</span>    checkInitialized();<a name="line.3009"></a>
<span class="sourceLineNo">3010</span><a name="line.3010"></a>
<span class="sourceLineNo">3011</span>    TableName.isLegalNamespaceName(Bytes.toBytes(namespaceDescriptor.getName()));<a name="line.3011"></a>
<span class="sourceLineNo">3012</span><a name="line.3012"></a>
<span class="sourceLineNo">3013</span>    return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3013"></a>
<span class="sourceLineNo">3014</span>          nonceGroup, nonce) {<a name="line.3014"></a>
<span class="sourceLineNo">3015</span>      @Override<a name="line.3015"></a>
<span class="sourceLineNo">3016</span>      protected void run() throws IOException {<a name="line.3016"></a>
<span class="sourceLineNo">3017</span>        getMaster().getMasterCoprocessorHost().preCreateNamespace(namespaceDescriptor);<a name="line.3017"></a>
<span class="sourceLineNo">3018</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3018"></a>
<span class="sourceLineNo">3019</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3019"></a>
<span class="sourceLineNo">3020</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3020"></a>
<span class="sourceLineNo">3021</span>        LOG.info(getClientIdAuditPrefix() + " creating " + namespaceDescriptor);<a name="line.3021"></a>
<span class="sourceLineNo">3022</span>        // Execute the operation synchronously - wait for the operation to complete before<a name="line.3022"></a>
<span class="sourceLineNo">3023</span>        // continuing.<a name="line.3023"></a>
<span class="sourceLineNo">3024</span>        setProcId(getClusterSchema().createNamespace(namespaceDescriptor, getNonceKey(), latch));<a name="line.3024"></a>
<span class="sourceLineNo">3025</span>        latch.await();<a name="line.3025"></a>
<span class="sourceLineNo">3026</span>        getMaster().getMasterCoprocessorHost().postCreateNamespace(namespaceDescriptor);<a name="line.3026"></a>
<span class="sourceLineNo">3027</span>      }<a name="line.3027"></a>
<span class="sourceLineNo">3028</span><a name="line.3028"></a>
<span class="sourceLineNo">3029</span>      @Override<a name="line.3029"></a>
<span class="sourceLineNo">3030</span>      protected String getDescription() {<a name="line.3030"></a>
<span class="sourceLineNo">3031</span>        return "CreateNamespaceProcedure";<a name="line.3031"></a>
<span class="sourceLineNo">3032</span>      }<a name="line.3032"></a>
<span class="sourceLineNo">3033</span>    });<a name="line.3033"></a>
<span class="sourceLineNo">3034</span>  }<a name="line.3034"></a>
<span class="sourceLineNo">3035</span><a name="line.3035"></a>
<span class="sourceLineNo">3036</span>  /**<a name="line.3036"></a>
<span class="sourceLineNo">3037</span>   * Modify an existing Namespace.<a name="line.3037"></a>
<span class="sourceLineNo">3038</span>   * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3038"></a>
<span class="sourceLineNo">3039</span>   * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3039"></a>
<span class="sourceLineNo">3040</span>   * &lt;code&gt;nonceGroup&lt;/code&gt; (the source must ensure each operation gets a unique id).<a name="line.3040"></a>
<span class="sourceLineNo">3041</span>   * @return procedure id<a name="line.3041"></a>
<span class="sourceLineNo">3042</span>   */<a name="line.3042"></a>
<span class="sourceLineNo">3043</span>  long modifyNamespace(final NamespaceDescriptor newNsDescriptor, final long nonceGroup,<a name="line.3043"></a>
<span class="sourceLineNo">3044</span>      final long nonce) throws IOException {<a name="line.3044"></a>
<span class="sourceLineNo">3045</span>    checkInitialized();<a name="line.3045"></a>
<span class="sourceLineNo">3046</span><a name="line.3046"></a>
<span class="sourceLineNo">3047</span>    TableName.isLegalNamespaceName(Bytes.toBytes(newNsDescriptor.getName()));<a name="line.3047"></a>
<span class="sourceLineNo">3048</span><a name="line.3048"></a>
<span class="sourceLineNo">3049</span>    return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3049"></a>
<span class="sourceLineNo">3050</span>          nonceGroup, nonce) {<a name="line.3050"></a>
<span class="sourceLineNo">3051</span>      @Override<a name="line.3051"></a>
<span class="sourceLineNo">3052</span>      protected void run() throws IOException {<a name="line.3052"></a>
<span class="sourceLineNo">3053</span>        NamespaceDescriptor oldNsDescriptor = getNamespace(newNsDescriptor.getName());<a name="line.3053"></a>
<span class="sourceLineNo">3054</span>        getMaster().getMasterCoprocessorHost().preModifyNamespace(oldNsDescriptor, newNsDescriptor);<a name="line.3054"></a>
<span class="sourceLineNo">3055</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3055"></a>
<span class="sourceLineNo">3056</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3056"></a>
<span class="sourceLineNo">3057</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3057"></a>
<span class="sourceLineNo">3058</span>        LOG.info(getClientIdAuditPrefix() + " modify " + newNsDescriptor);<a name="line.3058"></a>
<span class="sourceLineNo">3059</span>        // Execute the operation synchronously - wait for the operation to complete before<a name="line.3059"></a>
<span class="sourceLineNo">3060</span>        // continuing.<a name="line.3060"></a>
<span class="sourceLineNo">3061</span>        setProcId(getClusterSchema().modifyNamespace(newNsDescriptor, getNonceKey(), latch));<a name="line.3061"></a>
<span class="sourceLineNo">3062</span>        latch.await();<a name="line.3062"></a>
<span class="sourceLineNo">3063</span>        getMaster().getMasterCoprocessorHost().postModifyNamespace(oldNsDescriptor,<a name="line.3063"></a>
<span class="sourceLineNo">3064</span>          newNsDescriptor);<a name="line.3064"></a>
<span class="sourceLineNo">3065</span>      }<a name="line.3065"></a>
<span class="sourceLineNo">3066</span><a name="line.3066"></a>
<span class="sourceLineNo">3067</span>      @Override<a name="line.3067"></a>
<span class="sourceLineNo">3068</span>      protected String getDescription() {<a name="line.3068"></a>
<span class="sourceLineNo">3069</span>        return "ModifyNamespaceProcedure";<a name="line.3069"></a>
<span class="sourceLineNo">3070</span>      }<a name="line.3070"></a>
<span class="sourceLineNo">3071</span>    });<a name="line.3071"></a>
<span class="sourceLineNo">3072</span>  }<a name="line.3072"></a>
<span class="sourceLineNo">3073</span><a name="line.3073"></a>
<span class="sourceLineNo">3074</span>  /**<a name="line.3074"></a>
<span class="sourceLineNo">3075</span>   * Delete an existing Namespace. Only empty Namespaces (no tables) can be removed.<a name="line.3075"></a>
<span class="sourceLineNo">3076</span>   * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3076"></a>
<span class="sourceLineNo">3077</span>   * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3077"></a>
<span class="sourceLineNo">3078</span>   * &lt;code&gt;nonceGroup&lt;/code&gt; (the source must ensure each operation gets a unique id).<a name="line.3078"></a>
<span class="sourceLineNo">3079</span>   * @return procedure id<a name="line.3079"></a>
<span class="sourceLineNo">3080</span>   */<a name="line.3080"></a>
<span class="sourceLineNo">3081</span>  long deleteNamespace(final String name, final long nonceGroup, final long nonce)<a name="line.3081"></a>
<span class="sourceLineNo">3082</span>      throws IOException {<a name="line.3082"></a>
<span class="sourceLineNo">3083</span>    checkInitialized();<a name="line.3083"></a>
<span class="sourceLineNo">3084</span><a name="line.3084"></a>
<span class="sourceLineNo">3085</span>    return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3085"></a>
<span class="sourceLineNo">3086</span>          nonceGroup, nonce) {<a name="line.3086"></a>
<span class="sourceLineNo">3087</span>      @Override<a name="line.3087"></a>
<span class="sourceLineNo">3088</span>      protected void run() throws IOException {<a name="line.3088"></a>
<span class="sourceLineNo">3089</span>        getMaster().getMasterCoprocessorHost().preDeleteNamespace(name);<a name="line.3089"></a>
<span class="sourceLineNo">3090</span>        LOG.info(getClientIdAuditPrefix() + " delete " + name);<a name="line.3090"></a>
<span class="sourceLineNo">3091</span>        // Execute the operation synchronously - wait for the operation to complete before<a name="line.3091"></a>
<span class="sourceLineNo">3092</span>        // continuing.<a name="line.3092"></a>
<span class="sourceLineNo">3093</span>        //<a name="line.3093"></a>
<span class="sourceLineNo">3094</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3094"></a>
<span class="sourceLineNo">3095</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3095"></a>
<span class="sourceLineNo">3096</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3096"></a>
<span class="sourceLineNo">3097</span>        setProcId(submitProcedure(<a name="line.3097"></a>
<span class="sourceLineNo">3098</span>              new DeleteNamespaceProcedure(procedureExecutor.getEnvironment(), name, latch)));<a name="line.3098"></a>
<span class="sourceLineNo">3099</span>        latch.await();<a name="line.3099"></a>
<span class="sourceLineNo">3100</span>        // Will not be invoked in the face of Exception thrown by the Procedure's execution<a name="line.3100"></a>
<span class="sourceLineNo">3101</span>        getMaster().getMasterCoprocessorHost().postDeleteNamespace(name);<a name="line.3101"></a>
<span class="sourceLineNo">3102</span>      }<a name="line.3102"></a>
<span class="sourceLineNo">3103</span><a name="line.3103"></a>
<span class="sourceLineNo">3104</span>      @Override<a name="line.3104"></a>
<span class="sourceLineNo">3105</span>      protected String getDescription() {<a name="line.3105"></a>
<span class="sourceLineNo">3106</span>        return "DeleteNamespaceProcedure";<a name="line.3106"></a>
<span class="sourceLineNo">3107</span>      }<a name="line.3107"></a>
<span class="sourceLineNo">3108</span>    });<a name="line.3108"></a>
<span class="sourceLineNo">3109</span>  }<a name="line.3109"></a>
<span class="sourceLineNo">3110</span><a name="line.3110"></a>
<span class="sourceLineNo">3111</span>  /**<a name="line.3111"></a>
<span class="sourceLineNo">3112</span>   * Get a Namespace<a name="line.3112"></a>
<span class="sourceLineNo">3113</span>   * @param name Name of the Namespace<a name="line.3113"></a>
<span class="sourceLineNo">3114</span>   * @return Namespace descriptor for &lt;code&gt;name&lt;/code&gt;<a name="line.3114"></a>
<span class="sourceLineNo">3115</span>   */<a name="line.3115"></a>
<span class="sourceLineNo">3116</span>  NamespaceDescriptor getNamespace(String name) throws IOException {<a name="line.3116"></a>
<span class="sourceLineNo">3117</span>    checkInitialized();<a name="line.3117"></a>
<span class="sourceLineNo">3118</span>    if (this.cpHost != null) this.cpHost.preGetNamespaceDescriptor(name);<a name="line.3118"></a>
<span class="sourceLineNo">3119</span>    NamespaceDescriptor nsd = this.clusterSchemaService.getNamespace(name);<a name="line.3119"></a>
<span class="sourceLineNo">3120</span>    if (this.cpHost != null) this.cpHost.postGetNamespaceDescriptor(nsd);<a name="line.3120"></a>
<span class="sourceLineNo">3121</span>    return nsd;<a name="line.3121"></a>
<span class="sourceLineNo">3122</span>  }<a name="line.3122"></a>
<span class="sourceLineNo">3123</span><a name="line.3123"></a>
<span class="sourceLineNo">3124</span>  /**<a name="line.3124"></a>
<span class="sourceLineNo">3125</span>   * Get all Namespaces<a name="line.3125"></a>
<span class="sourceLineNo">3126</span>   * @return All Namespace descriptors<a name="line.3126"></a>
<span class="sourceLineNo">3127</span>   */<a name="line.3127"></a>
<span class="sourceLineNo">3128</span>  List&lt;NamespaceDescriptor&gt; getNamespaces() throws IOException {<a name="line.3128"></a>
<span class="sourceLineNo">3129</span>    checkInitialized();<a name="line.3129"></a>
<span class="sourceLineNo">3130</span>    final List&lt;NamespaceDescriptor&gt; nsds = new ArrayList&lt;&gt;();<a name="line.3130"></a>
<span class="sourceLineNo">3131</span>    if (cpHost != null) {<a name="line.3131"></a>
<span class="sourceLineNo">3132</span>      cpHost.preListNamespaceDescriptors(nsds);<a name="line.3132"></a>
<span class="sourceLineNo">3133</span>    }<a name="line.3133"></a>
<span class="sourceLineNo">3134</span>    nsds.addAll(this.clusterSchemaService.getNamespaces());<a name="line.3134"></a>
<span class="sourceLineNo">3135</span>    if (this.cpHost != null) {<a name="line.3135"></a>
<span class="sourceLineNo">3136</span>      this.cpHost.postListNamespaceDescriptors(nsds);<a name="line.3136"></a>
<span class="sourceLineNo">3137</span>    }<a name="line.3137"></a>
<span class="sourceLineNo">3138</span>    return nsds;<a name="line.3138"></a>
<span class="sourceLineNo">3139</span>  }<a name="line.3139"></a>
<span class="sourceLineNo">3140</span><a name="line.3140"></a>
<span class="sourceLineNo">3141</span>  /**<a name="line.3141"></a>
<span class="sourceLineNo">3142</span>   * List namespace names<a name="line.3142"></a>
<span class="sourceLineNo">3143</span>   * @return All namespace names<a name="line.3143"></a>
<span class="sourceLineNo">3144</span>   */<a name="line.3144"></a>
<span class="sourceLineNo">3145</span>  public List&lt;String&gt; listNamespaces() throws IOException {<a name="line.3145"></a>
<span class="sourceLineNo">3146</span>    checkInitialized();<a name="line.3146"></a>
<span class="sourceLineNo">3147</span>    List&lt;String&gt; namespaces = new ArrayList&lt;&gt;();<a name="line.3147"></a>
<span class="sourceLineNo">3148</span>    if (cpHost != null) {<a name="line.3148"></a>
<span class="sourceLineNo">3149</span>      cpHost.preListNamespaces(namespaces);<a name="line.3149"></a>
<span class="sourceLineNo">3150</span>    }<a name="line.3150"></a>
<span class="sourceLineNo">3151</span>    for (NamespaceDescriptor namespace : clusterSchemaService.getNamespaces()) {<a name="line.3151"></a>
<span class="sourceLineNo">3152</span>      namespaces.add(namespace.getName());<a name="line.3152"></a>
<span class="sourceLineNo">3153</span>    }<a name="line.3153"></a>
<span class="sourceLineNo">3154</span>    if (cpHost != null) {<a name="line.3154"></a>
<span class="sourceLineNo">3155</span>      cpHost.postListNamespaces(namespaces);<a name="line.3155"></a>
<span class="sourceLineNo">3156</span>    }<a name="line.3156"></a>
<span class="sourceLineNo">3157</span>    return namespaces;<a name="line.3157"></a>
<span class="sourceLineNo">3158</span>  }<a name="line.3158"></a>
<span class="sourceLineNo">3159</span><a name="line.3159"></a>
<span class="sourceLineNo">3160</span>  @Override<a name="line.3160"></a>
<span class="sourceLineNo">3161</span>  public List&lt;TableName&gt; listTableNamesByNamespace(String name) throws IOException {<a name="line.3161"></a>
<span class="sourceLineNo">3162</span>    checkInitialized();<a name="line.3162"></a>
<span class="sourceLineNo">3163</span>    return listTableNames(name, null, true);<a name="line.3163"></a>
<span class="sourceLineNo">3164</span>  }<a name="line.3164"></a>
<span class="sourceLineNo">3165</span><a name="line.3165"></a>
<span class="sourceLineNo">3166</span>  @Override<a name="line.3166"></a>
<span class="sourceLineNo">3167</span>  public List&lt;TableDescriptor&gt; listTableDescriptorsByNamespace(String name) throws IOException {<a name="line.3167"></a>
<span class="sourceLineNo">3168</span>    checkInitialized();<a name="line.3168"></a>
<span class="sourceLineNo">3169</span>    return listTableDescriptors(name, null, null, true);<a name="line.3169"></a>
<span class="sourceLineNo">3170</span>  }<a name="line.3170"></a>
<span class="sourceLineNo">3171</span><a name="line.3171"></a>
<span class="sourceLineNo">3172</span>  @Override<a name="line.3172"></a>
<span class="sourceLineNo">3173</span>  public boolean abortProcedure(final long procId, final boolean mayInterruptIfRunning)<a name="line.3173"></a>
<span class="sourceLineNo">3174</span>      throws IOException {<a name="line.3174"></a>
<span class="sourceLineNo">3175</span>    if (cpHost != null) {<a name="line.3175"></a>
<span class="sourceLineNo">3176</span>      cpHost.preAbortProcedure(this.procedureExecutor, procId);<a name="line.3176"></a>
<span class="sourceLineNo">3177</span>    }<a name="line.3177"></a>
<span class="sourceLineNo">3178</span><a name="line.3178"></a>
<span class="sourceLineNo">3179</span>    final boolean result = this.procedureExecutor.abort(procId, mayInterruptIfRunning);<a name="line.3179"></a>
<span class="sourceLineNo">3180</span><a name="line.3180"></a>
<span class="sourceLineNo">3181</span>    if (cpHost != null) {<a name="line.3181"></a>
<span class="sourceLineNo">3182</span>      cpHost.postAbortProcedure();<a name="line.3182"></a>
<span class="sourceLineNo">3183</span>    }<a name="line.3183"></a>
<span class="sourceLineNo">3184</span><a name="line.3184"></a>
<span class="sourceLineNo">3185</span>    return result;<a name="line.3185"></a>
<span class="sourceLineNo">3186</span>  }<a name="line.3186"></a>
<span class="sourceLineNo">3187</span><a name="line.3187"></a>
<span class="sourceLineNo">3188</span>  @Override<a name="line.3188"></a>
<span class="sourceLineNo">3189</span>  public List&lt;Procedure&lt;?&gt;&gt; getProcedures() throws IOException {<a name="line.3189"></a>
<span class="sourceLineNo">3190</span>    if (cpHost != null) {<a name="line.3190"></a>
<span class="sourceLineNo">3191</span>      cpHost.preGetProcedures();<a name="line.3191"></a>
<span class="sourceLineNo">3192</span>    }<a name="line.3192"></a>
<span class="sourceLineNo">3193</span><a name="line.3193"></a>
<span class="sourceLineNo">3194</span>    @SuppressWarnings({ "unchecked", "rawtypes" })<a name="line.3194"></a>
<span class="sourceLineNo">3195</span>    List&lt;Procedure&lt;?&gt;&gt; procList = (List) this.procedureExecutor.getProcedures();<a name="line.3195"></a>
<span class="sourceLineNo">3196</span><a name="line.3196"></a>
<span class="sourceLineNo">3197</span>    if (cpHost != null) {<a name="line.3197"></a>
<span class="sourceLineNo">3198</span>      cpHost.postGetProcedures(procList);<a name="line.3198"></a>
<span class="sourceLineNo">3199</span>    }<a name="line.3199"></a>
<span class="sourceLineNo">3200</span><a name="line.3200"></a>
<span class="sourceLineNo">3201</span>    return procList;<a name="line.3201"></a>
<span class="sourceLineNo">3202</span>  }<a name="line.3202"></a>
<span class="sourceLineNo">3203</span><a name="line.3203"></a>
<span class="sourceLineNo">3204</span>  @Override<a name="line.3204"></a>
<span class="sourceLineNo">3205</span>  public List&lt;LockedResource&gt; getLocks() throws IOException {<a name="line.3205"></a>
<span class="sourceLineNo">3206</span>    if (cpHost != null) {<a name="line.3206"></a>
<span class="sourceLineNo">3207</span>      cpHost.preGetLocks();<a name="line.3207"></a>
<span class="sourceLineNo">3208</span>    }<a name="line.3208"></a>
<span class="sourceLineNo">3209</span><a name="line.3209"></a>
<span class="sourceLineNo">3210</span>    MasterProcedureScheduler procedureScheduler =<a name="line.3210"></a>
<span class="sourceLineNo">3211</span>      procedureExecutor.getEnvironment().getProcedureScheduler();<a name="line.3211"></a>
<span class="sourceLineNo">3212</span><a name="line.3212"></a>
<span class="sourceLineNo">3213</span>    final List&lt;LockedResource&gt; lockedResources = procedureScheduler.getLocks();<a name="line.3213"></a>
<span class="sourceLineNo">3214</span><a name="line.3214"></a>
<span class="sourceLineNo">3215</span>    if (cpHost != null) {<a name="line.3215"></a>
<span class="sourceLineNo">3216</span>      cpHost.postGetLocks(lockedResources);<a name="line.3216"></a>
<span class="sourceLineNo">3217</span>    }<a name="line.3217"></a>
<span class="sourceLineNo">3218</span><a name="line.3218"></a>
<span class="sourceLineNo">3219</span>    return lockedResources;<a name="line.3219"></a>
<span class="sourceLineNo">3220</span>  }<a name="line.3220"></a>
<span class="sourceLineNo">3221</span><a name="line.3221"></a>
<span class="sourceLineNo">3222</span>  /**<a name="line.3222"></a>
<span class="sourceLineNo">3223</span>   * Returns the list of table descriptors that match the specified request<a name="line.3223"></a>
<span class="sourceLineNo">3224</span>   * @param namespace the namespace to query, or null if querying for all<a name="line.3224"></a>
<span class="sourceLineNo">3225</span>   * @param regex The regular expression to match against, or null if querying for all<a name="line.3225"></a>
<span class="sourceLineNo">3226</span>   * @param tableNameList the list of table names, or null if querying for all<a name="line.3226"></a>
<span class="sourceLineNo">3227</span>   * @param includeSysTables False to match only against userspace tables<a name="line.3227"></a>
<span class="sourceLineNo">3228</span>   * @return the list of table descriptors<a name="line.3228"></a>
<span class="sourceLineNo">3229</span>   */<a name="line.3229"></a>
<span class="sourceLineNo">3230</span>  public List&lt;TableDescriptor&gt; listTableDescriptors(final String namespace, final String regex,<a name="line.3230"></a>
<span class="sourceLineNo">3231</span>      final List&lt;TableName&gt; tableNameList, final boolean includeSysTables)<a name="line.3231"></a>
<span class="sourceLineNo">3232</span>  throws IOException {<a name="line.3232"></a>
<span class="sourceLineNo">3233</span>    List&lt;TableDescriptor&gt; htds = new ArrayList&lt;&gt;();<a name="line.3233"></a>
<span class="sourceLineNo">3234</span>    if (cpHost != null) {<a name="line.3234"></a>
<span class="sourceLineNo">3235</span>      cpHost.preGetTableDescriptors(tableNameList, htds, regex);<a name="line.3235"></a>
<span class="sourceLineNo">3236</span>    }<a name="line.3236"></a>
<span class="sourceLineNo">3237</span>    htds = getTableDescriptors(htds, namespace, regex, tableNameList, includeSysTables);<a name="line.3237"></a>
<span class="sourceLineNo">3238</span>    if (cpHost != null) {<a name="line.3238"></a>
<span class="sourceLineNo">3239</span>      cpHost.postGetTableDescriptors(tableNameList, htds, regex);<a name="line.3239"></a>
<span class="sourceLineNo">3240</span>    }<a name="line.3240"></a>
<span class="sourceLineNo">3241</span>    return htds;<a name="line.3241"></a>
<span class="sourceLineNo">3242</span>  }<a name="line.3242"></a>
<span class="sourceLineNo">3243</span><a name="line.3243"></a>
<span class="sourceLineNo">3244</span>  /**<a name="line.3244"></a>
<span class="sourceLineNo">3245</span>   * Returns the list of table names that match the specified request<a name="line.3245"></a>
<span class="sourceLineNo">3246</span>   * @param regex The regular expression to match against, or null if querying for all<a name="line.3246"></a>
<span class="sourceLineNo">3247</span>   * @param namespace the namespace to query, or null if querying for all<a name="line.3247"></a>
<span class="sourceLineNo">3248</span>   * @param includeSysTables False to match only against userspace tables<a name="line.3248"></a>
<span class="sourceLineNo">3249</span>   * @return the list of table names<a name="line.3249"></a>
<span class="sourceLineNo">3250</span>   */<a name="line.3250"></a>
<span class="sourceLineNo">3251</span>  public List&lt;TableName&gt; listTableNames(final String namespace, final String regex,<a name="line.3251"></a>
<span class="sourceLineNo">3252</span>      final boolean includeSysTables) throws IOException {<a name="line.3252"></a>
<span class="sourceLineNo">3253</span>    List&lt;TableDescriptor&gt; htds = new ArrayList&lt;&gt;();<a name="line.3253"></a>
<span class="sourceLineNo">3254</span>    if (cpHost != null) {<a name="line.3254"></a>
<span class="sourceLineNo">3255</span>      cpHost.preGetTableNames(htds, regex);<a name="line.3255"></a>
<span class="sourceLineNo">3256</span>    }<a name="line.3256"></a>
<span class="sourceLineNo">3257</span>    htds = getTableDescriptors(htds, namespace, regex, null, includeSysTables);<a name="line.3257"></a>
<span class="sourceLineNo">3258</span>    if (cpHost != null) {<a name="line.3258"></a>
<span class="sourceLineNo">3259</span>      cpHost.postGetTableNames(htds, regex);<a name="line.3259"></a>
<span class="sourceLineNo">3260</span>    }<a name="line.3260"></a>
<span class="sourceLineNo">3261</span>    List&lt;TableName&gt; result = new ArrayList&lt;&gt;(htds.size());<a name="line.3261"></a>
<span class="sourceLineNo">3262</span>    for (TableDescriptor htd: htds) result.add(htd.getTableName());<a name="line.3262"></a>
<span class="sourceLineNo">3263</span>    return result;<a name="line.3263"></a>
<span class="sourceLineNo">3264</span>  }<a name="line.3264"></a>
<span class="sourceLineNo">3265</span><a name="line.3265"></a>
<span class="sourceLineNo">3266</span>  /**<a name="line.3266"></a>
<span class="sourceLineNo">3267</span>   * @return list of table table descriptors after filtering by regex and whether to include system<a name="line.3267"></a>
<span class="sourceLineNo">3268</span>   *    tables, etc.<a name="line.3268"></a>
<span class="sourceLineNo">3269</span>   * @throws IOException<a name="line.3269"></a>
<span class="sourceLineNo">3270</span>   */<a name="line.3270"></a>
<span class="sourceLineNo">3271</span>  private List&lt;TableDescriptor&gt; getTableDescriptors(final List&lt;TableDescriptor&gt; htds,<a name="line.3271"></a>
<span class="sourceLineNo">3272</span>      final String namespace, final String regex, final List&lt;TableName&gt; tableNameList,<a name="line.3272"></a>
<span class="sourceLineNo">3273</span>      final boolean includeSysTables)<a name="line.3273"></a>
<span class="sourceLineNo">3274</span>  throws IOException {<a name="line.3274"></a>
<span class="sourceLineNo">3275</span>    if (tableNameList == null || tableNameList.isEmpty()) {<a name="line.3275"></a>
<span class="sourceLineNo">3276</span>      // request for all TableDescriptors<a name="line.3276"></a>
<span class="sourceLineNo">3277</span>      Collection&lt;TableDescriptor&gt; allHtds;<a name="line.3277"></a>
<span class="sourceLineNo">3278</span>      if (namespace != null &amp;&amp; namespace.length() &gt; 0) {<a name="line.3278"></a>
<span class="sourceLineNo">3279</span>        // Do a check on the namespace existence. Will fail if does not exist.<a name="line.3279"></a>
<span class="sourceLineNo">3280</span>        this.clusterSchemaService.getNamespace(namespace);<a name="line.3280"></a>
<span class="sourceLineNo">3281</span>        allHtds = tableDescriptors.getByNamespace(namespace).values();<a name="line.3281"></a>
<span class="sourceLineNo">3282</span>      } else {<a name="line.3282"></a>
<span class="sourceLineNo">3283</span>        allHtds = tableDescriptors.getAll().values();<a name="line.3283"></a>
<span class="sourceLineNo">3284</span>      }<a name="line.3284"></a>
<span class="sourceLineNo">3285</span>      for (TableDescriptor desc: allHtds) {<a name="line.3285"></a>
<span class="sourceLineNo">3286</span>        if (tableStateManager.isTablePresent(desc.getTableName())<a name="line.3286"></a>
<span class="sourceLineNo">3287</span>            &amp;&amp; (includeSysTables || !desc.getTableName().isSystemTable())) {<a name="line.3287"></a>
<span class="sourceLineNo">3288</span>          htds.add(desc);<a name="line.3288"></a>
<span class="sourceLineNo">3289</span>        }<a name="line.3289"></a>
<span class="sourceLineNo">3290</span>      }<a name="line.3290"></a>
<span class="sourceLineNo">3291</span>    } else {<a name="line.3291"></a>
<span class="sourceLineNo">3292</span>      for (TableName s: tableNameList) {<a name="line.3292"></a>
<span class="sourceLineNo">3293</span>        if (tableStateManager.isTablePresent(s)) {<a name="line.3293"></a>
<span class="sourceLineNo">3294</span>          TableDescriptor desc = tableDescriptors.get(s);<a name="line.3294"></a>
<span class="sourceLineNo">3295</span>          if (desc != null) {<a name="line.3295"></a>
<span class="sourceLineNo">3296</span>            htds.add(desc);<a name="line.3296"></a>
<span class="sourceLineNo">3297</span>          }<a name="line.3297"></a>
<span class="sourceLineNo">3298</span>        }<a name="line.3298"></a>
<span class="sourceLineNo">3299</span>      }<a name="line.3299"></a>
<span class="sourceLineNo">3300</span>    }<a name="line.3300"></a>
<span class="sourceLineNo">3301</span><a name="line.3301"></a>
<span class="sourceLineNo">3302</span>    // Retains only those matched by regular expression.<a name="line.3302"></a>
<span class="sourceLineNo">3303</span>    if (regex != null) filterTablesByRegex(htds, Pattern.compile(regex));<a name="line.3303"></a>
<span class="sourceLineNo">3304</span>    return htds;<a name="line.3304"></a>
<span class="sourceLineNo">3305</span>  }<a name="line.3305"></a>
<span class="sourceLineNo">3306</span><a name="line.3306"></a>
<span class="sourceLineNo">3307</span>  /**<a name="line.3307"></a>
<span class="sourceLineNo">3308</span>   * Removes the table descriptors that don't match the pattern.<a name="line.3308"></a>
<span class="sourceLineNo">3309</span>   * @param descriptors list of table descriptors to filter<a name="line.3309"></a>
<span class="sourceLineNo">3310</span>   * @param pattern the regex to use<a name="line.3310"></a>
<span class="sourceLineNo">3311</span>   */<a name="line.3311"></a>
<span class="sourceLineNo">3312</span>  private static void filterTablesByRegex(final Collection&lt;TableDescriptor&gt; descriptors,<a name="line.3312"></a>
<span class="sourceLineNo">3313</span>      final Pattern pattern) {<a name="line.3313"></a>
<span class="sourceLineNo">3314</span>    final String defaultNS = NamespaceDescriptor.DEFAULT_NAMESPACE_NAME_STR;<a name="line.3314"></a>
<span class="sourceLineNo">3315</span>    Iterator&lt;TableDescriptor&gt; itr = descriptors.iterator();<a name="line.3315"></a>
<span class="sourceLineNo">3316</span>    while (itr.hasNext()) {<a name="line.3316"></a>
<span class="sourceLineNo">3317</span>      TableDescriptor htd = itr.next();<a name="line.3317"></a>
<span class="sourceLineNo">3318</span>      String tableName = htd.getTableName().getNameAsString();<a name="line.3318"></a>
<span class="sourceLineNo">3319</span>      boolean matched = pattern.matcher(tableName).matches();<a name="line.3319"></a>
<span class="sourceLineNo">3320</span>      if (!matched &amp;&amp; htd.getTableName().getNamespaceAsString().equals(defaultNS)) {<a name="line.3320"></a>
<span class="sourceLineNo">3321</span>        matched = pattern.matcher(defaultNS + TableName.NAMESPACE_DELIM + tableName).matches();<a name="line.3321"></a>
<span class="sourceLineNo">3322</span>      }<a name="line.3322"></a>
<span class="sourceLineNo">3323</span>      if (!matched) {<a name="line.3323"></a>
<span class="sourceLineNo">3324</span>        itr.remove();<a name="line.3324"></a>
<span class="sourceLineNo">3325</span>      }<a name="line.3325"></a>
<span class="sourceLineNo">3326</span>    }<a name="line.3326"></a>
<span class="sourceLineNo">3327</span>  }<a name="line.3327"></a>
<span class="sourceLineNo">3328</span><a name="line.3328"></a>
<span class="sourceLineNo">3329</span>  @Override<a name="line.3329"></a>
<span class="sourceLineNo">3330</span>  public long getLastMajorCompactionTimestamp(TableName table) throws IOException {<a name="line.3330"></a>
<span class="sourceLineNo">3331</span>    return getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.3331"></a>
<span class="sourceLineNo">3332</span>        .getLastMajorCompactionTimestamp(table);<a name="line.3332"></a>
<span class="sourceLineNo">3333</span>  }<a name="line.3333"></a>
<span class="sourceLineNo">3334</span><a name="line.3334"></a>
<span class="sourceLineNo">3335</span>  @Override<a name="line.3335"></a>
<span class="sourceLineNo">3336</span>  public long getLastMajorCompactionTimestampForRegion(byte[] regionName) throws IOException {<a name="line.3336"></a>
<span class="sourceLineNo">3337</span>    return getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.3337"></a>
<span class="sourceLineNo">3338</span>        .getLastMajorCompactionTimestamp(regionName);<a name="line.3338"></a>
<span class="sourceLineNo">3339</span>  }<a name="line.3339"></a>
<span class="sourceLineNo">3340</span><a name="line.3340"></a>
<span class="sourceLineNo">3341</span>  /**<a name="line.3341"></a>
<span class="sourceLineNo">3342</span>   * Gets the mob file compaction state for a specific table.<a name="line.3342"></a>
<span class="sourceLineNo">3343</span>   * Whether all the mob files are selected is known during the compaction execution, but<a name="line.3343"></a>
<span class="sourceLineNo">3344</span>   * the statistic is done just before compaction starts, it is hard to know the compaction<a name="line.3344"></a>
<span class="sourceLineNo">3345</span>   * type at that time, so the rough statistics are chosen for the mob file compaction. Only two<a name="line.3345"></a>
<span class="sourceLineNo">3346</span>   * compaction states are available, CompactionState.MAJOR_AND_MINOR and CompactionState.NONE.<a name="line.3346"></a>
<span class="sourceLineNo">3347</span>   * @param tableName The current table name.<a name="line.3347"></a>
<span class="sourceLineNo">3348</span>   * @return If a given table is in mob file compaction now.<a name="line.3348"></a>
<span class="sourceLineNo">3349</span>   */<a name="line.3349"></a>
<span class="sourceLineNo">3350</span>  public CompactionState getMobCompactionState(TableName tableName) {<a name="line.3350"></a>
<span class="sourceLineNo">3351</span>    AtomicInteger compactionsCount = mobCompactionStates.get(tableName);<a name="line.3351"></a>
<span class="sourceLineNo">3352</span>    if (compactionsCount != null &amp;&amp; compactionsCount.get() != 0) {<a name="line.3352"></a>
<span class="sourceLineNo">3353</span>      return CompactionState.MAJOR_AND_MINOR;<a name="line.3353"></a>
<span class="sourceLineNo">3354</span>    }<a name="line.3354"></a>
<span class="sourceLineNo">3355</span>    return CompactionState.NONE;<a name="line.3355"></a>
<span class="sourceLineNo">3356</span>  }<a name="line.3356"></a>
<span class="sourceLineNo">3357</span><a name="line.3357"></a>
<span class="sourceLineNo">3358</span>  public void reportMobCompactionStart(TableName tableName) throws IOException {<a name="line.3358"></a>
<span class="sourceLineNo">3359</span>    IdLock.Entry lockEntry = null;<a name="line.3359"></a>
<span class="sourceLineNo">3360</span>    try {<a name="line.3360"></a>
<span class="sourceLineNo">3361</span>      lockEntry = mobCompactionLock.getLockEntry(tableName.hashCode());<a name="line.3361"></a>
<span class="sourceLineNo">3362</span>      AtomicInteger compactionsCount = mobCompactionStates.get(tableName);<a name="line.3362"></a>
<span class="sourceLineNo">3363</span>      if (compactionsCount == null) {<a name="line.3363"></a>
<span class="sourceLineNo">3364</span>        compactionsCount = new AtomicInteger(0);<a name="line.3364"></a>
<span class="sourceLineNo">3365</span>        mobCompactionStates.put(tableName, compactionsCount);<a name="line.3365"></a>
<span class="sourceLineNo">3366</span>      }<a name="line.3366"></a>
<span class="sourceLineNo">3367</span>      compactionsCount.incrementAndGet();<a name="line.3367"></a>
<span class="sourceLineNo">3368</span>    } finally {<a name="line.3368"></a>
<span class="sourceLineNo">3369</span>      if (lockEntry != null) {<a name="line.3369"></a>
<span class="sourceLineNo">3370</span>        mobCompactionLock.releaseLockEntry(lockEntry);<a name="line.3370"></a>
<span class="sourceLineNo">3371</span>      }<a name="line.3371"></a>
<span class="sourceLineNo">3372</span>    }<a name="line.3372"></a>
<span class="sourceLineNo">3373</span>  }<a name="line.3373"></a>
<span class="sourceLineNo">3374</span><a name="line.3374"></a>
<span class="sourceLineNo">3375</span>  public void reportMobCompactionEnd(TableName tableName) throws IOException {<a name="line.3375"></a>
<span class="sourceLineNo">3376</span>    IdLock.Entry lockEntry = null;<a name="line.3376"></a>
<span class="sourceLineNo">3377</span>    try {<a name="line.3377"></a>
<span class="sourceLineNo">3378</span>      lockEntry = mobCompactionLock.getLockEntry(tableName.hashCode());<a name="line.3378"></a>
<span class="sourceLineNo">3379</span>      AtomicInteger compactionsCount = mobCompactionStates.get(tableName);<a name="line.3379"></a>
<span class="sourceLineNo">3380</span>      if (compactionsCount != null) {<a name="line.3380"></a>
<span class="sourceLineNo">3381</span>        int count = compactionsCount.decrementAndGet();<a name="line.3381"></a>
<span class="sourceLineNo">3382</span>        // remove the entry if the count is 0.<a name="line.3382"></a>
<span class="sourceLineNo">3383</span>        if (count == 0) {<a name="line.3383"></a>
<span class="sourceLineNo">3384</span>          mobCompactionStates.remove(tableName);<a name="line.3384"></a>
<span class="sourceLineNo">3385</span>        }<a name="line.3385"></a>
<span class="sourceLineNo">3386</span>      }<a name="line.3386"></a>
<span class="sourceLineNo">3387</span>    } finally {<a name="line.3387"></a>
<span class="sourceLineNo">3388</span>      if (lockEntry != null) {<a name="line.3388"></a>
<span class="sourceLineNo">3389</span>        mobCompactionLock.releaseLockEntry(lockEntry);<a name="line.3389"></a>
<span class="sourceLineNo">3390</span>      }<a name="line.3390"></a>
<span class="sourceLineNo">3391</span>    }<a name="line.3391"></a>
<span class="sourceLineNo">3392</span>  }<a name="line.3392"></a>
<span class="sourceLineNo">3393</span><a name="line.3393"></a>
<span class="sourceLineNo">3394</span>  /**<a name="line.3394"></a>
<span class="sourceLineNo">3395</span>   * Requests mob compaction.<a name="line.3395"></a>
<span class="sourceLineNo">3396</span>   * @param tableName The table the compact.<a name="line.3396"></a>
<span class="sourceLineNo">3397</span>   * @param columns The compacted columns.<a name="line.3397"></a>
<span class="sourceLineNo">3398</span>   * @param allFiles Whether add all mob files into the compaction.<a name="line.3398"></a>
<span class="sourceLineNo">3399</span>   */<a name="line.3399"></a>
<span class="sourceLineNo">3400</span>  public void requestMobCompaction(TableName tableName,<a name="line.3400"></a>
<span class="sourceLineNo">3401</span>                                   List&lt;ColumnFamilyDescriptor&gt; columns, boolean allFiles) throws IOException {<a name="line.3401"></a>
<span class="sourceLineNo">3402</span>    mobCompactThread.requestMobCompaction(conf, fs, tableName, columns, allFiles);<a name="line.3402"></a>
<span class="sourceLineNo">3403</span>  }<a name="line.3403"></a>
<span class="sourceLineNo">3404</span><a name="line.3404"></a>
<span class="sourceLineNo">3405</span>  /**<a name="line.3405"></a>
<span class="sourceLineNo">3406</span>   * Queries the state of the {@link LoadBalancerTracker}. If the balancer is not initialized,<a name="line.3406"></a>
<span class="sourceLineNo">3407</span>   * false is returned.<a name="line.3407"></a>
<span class="sourceLineNo">3408</span>   *<a name="line.3408"></a>
<span class="sourceLineNo">3409</span>   * @return The state of the load balancer, or false if the load balancer isn't defined.<a name="line.3409"></a>
<span class="sourceLineNo">3410</span>   */<a name="line.3410"></a>
<span class="sourceLineNo">3411</span>  public boolean isBalancerOn() {<a name="line.3411"></a>
<span class="sourceLineNo">3412</span>    return !isInMaintenanceMode()<a name="line.3412"></a>
<span class="sourceLineNo">3413</span>        &amp;&amp; loadBalancerTracker != null<a name="line.3413"></a>
<span class="sourceLineNo">3414</span>        &amp;&amp; loadBalancerTracker.isBalancerOn();<a name="line.3414"></a>
<span class="sourceLineNo">3415</span>  }<a name="line.3415"></a>
<span class="sourceLineNo">3416</span><a name="line.3416"></a>
<span class="sourceLineNo">3417</span>  /**<a name="line.3417"></a>
<span class="sourceLineNo">3418</span>   * Queries the state of the {@link RegionNormalizerTracker}. If it's not initialized,<a name="line.3418"></a>
<span class="sourceLineNo">3419</span>   * false is returned.<a name="line.3419"></a>
<span class="sourceLineNo">3420</span>   */<a name="line.3420"></a>
<span class="sourceLineNo">3421</span>  public boolean isNormalizerOn() {<a name="line.3421"></a>
<span class="sourceLineNo">3422</span>    return !isInMaintenanceMode()<a name="line.3422"></a>
<span class="sourceLineNo">3423</span>        &amp;&amp; regionNormalizerTracker != null<a name="line.3423"></a>
<span class="sourceLineNo">3424</span>        &amp;&amp; regionNormalizerTracker.isNormalizerOn();<a name="line.3424"></a>
<span class="sourceLineNo">3425</span>  }<a name="line.3425"></a>
<span class="sourceLineNo">3426</span><a name="line.3426"></a>
<span class="sourceLineNo">3427</span>  /**<a name="line.3427"></a>
<span class="sourceLineNo">3428</span>   * Queries the state of the {@link SplitOrMergeTracker}. If it is not initialized,<a name="line.3428"></a>
<span class="sourceLineNo">3429</span>   * false is returned. If switchType is illegal, false will return.<a name="line.3429"></a>
<span class="sourceLineNo">3430</span>   * @param switchType see {@link org.apache.hadoop.hbase.client.MasterSwitchType}<a name="line.3430"></a>
<span class="sourceLineNo">3431</span>   * @return The state of the switch<a name="line.3431"></a>
<span class="sourceLineNo">3432</span>   */<a name="line.3432"></a>
<span class="sourceLineNo">3433</span>  @Override<a name="line.3433"></a>
<span class="sourceLineNo">3434</span>  public boolean isSplitOrMergeEnabled(MasterSwitchType switchType) {<a name="line.3434"></a>
<span class="sourceLineNo">3435</span>    return !isInMaintenanceMode()<a name="line.3435"></a>
<span class="sourceLineNo">3436</span>        &amp;&amp; splitOrMergeTracker != null<a name="line.3436"></a>
<span class="sourceLineNo">3437</span>        &amp;&amp; splitOrMergeTracker.isSplitOrMergeEnabled(switchType);<a name="line.3437"></a>
<span class="sourceLineNo">3438</span>  }<a name="line.3438"></a>
<span class="sourceLineNo">3439</span><a name="line.3439"></a>
<span class="sourceLineNo">3440</span>  /**<a name="line.3440"></a>
<span class="sourceLineNo">3441</span>   * Fetch the configured {@link LoadBalancer} class name. If none is set, a default is returned.<a name="line.3441"></a>
<span class="sourceLineNo">3442</span>   *<a name="line.3442"></a>
<span class="sourceLineNo">3443</span>   * @return The name of the {@link LoadBalancer} in use.<a name="line.3443"></a>
<span class="sourceLineNo">3444</span>   */<a name="line.3444"></a>
<span class="sourceLineNo">3445</span>  public String getLoadBalancerClassName() {<a name="line.3445"></a>
<span class="sourceLineNo">3446</span>    return conf.get(HConstants.HBASE_MASTER_LOADBALANCER_CLASS, LoadBalancerFactory<a name="line.3446"></a>
<span class="sourceLineNo">3447</span>        .getDefaultLoadBalancerClass().getName());<a name="line.3447"></a>
<span class="sourceLineNo">3448</span>  }<a name="line.3448"></a>
<span class="sourceLineNo">3449</span><a name="line.3449"></a>
<span class="sourceLineNo">3450</span>  /**<a name="line.3450"></a>
<span class="sourceLineNo">3451</span>   * @return RegionNormalizerTracker instance<a name="line.3451"></a>
<span class="sourceLineNo">3452</span>   */<a name="line.3452"></a>
<span class="sourceLineNo">3453</span>  public RegionNormalizerTracker getRegionNormalizerTracker() {<a name="line.3453"></a>
<span class="sourceLineNo">3454</span>    return regionNormalizerTracker;<a name="line.3454"></a>
<span class="sourceLineNo">3455</span>  }<a name="line.3455"></a>
<span class="sourceLineNo">3456</span><a name="line.3456"></a>
<span class="sourceLineNo">3457</span>  public SplitOrMergeTracker getSplitOrMergeTracker() {<a name="line.3457"></a>
<span class="sourceLineNo">3458</span>    return splitOrMergeTracker;<a name="line.3458"></a>
<span class="sourceLineNo">3459</span>  }<a name="line.3459"></a>
<span class="sourceLineNo">3460</span><a name="line.3460"></a>
<span class="sourceLineNo">3461</span>  @Override<a name="line.3461"></a>
<span class="sourceLineNo">3462</span>  public LoadBalancer getLoadBalancer() {<a name="line.3462"></a>
<span class="sourceLineNo">3463</span>    return balancer;<a name="line.3463"></a>
<span class="sourceLineNo">3464</span>  }<a name="line.3464"></a>
<span class="sourceLineNo">3465</span><a name="line.3465"></a>
<span class="sourceLineNo">3466</span>  @Override<a name="line.3466"></a>
<span class="sourceLineNo">3467</span>  public FavoredNodesManager getFavoredNodesManager() {<a name="line.3467"></a>
<span class="sourceLineNo">3468</span>    return favoredNodesManager;<a name="line.3468"></a>
<span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
<span class="sourceLineNo">3470</span><a name="line.3470"></a>
<span class="sourceLineNo">3471</span>  private long executePeerProcedure(AbstractPeerProcedure&lt;?&gt; procedure) throws IOException {<a name="line.3471"></a>
<span class="sourceLineNo">3472</span>    long procId = procedureExecutor.submitProcedure(procedure);<a name="line.3472"></a>
<span class="sourceLineNo">3473</span>    procedure.getLatch().await();<a name="line.3473"></a>
<span class="sourceLineNo">3474</span>    return procId;<a name="line.3474"></a>
<span class="sourceLineNo">3475</span>  }<a name="line.3475"></a>
<span class="sourceLineNo">3476</span><a name="line.3476"></a>
<span class="sourceLineNo">3477</span>  @Override<a name="line.3477"></a>
<span class="sourceLineNo">3478</span>  public long addReplicationPeer(String peerId, ReplicationPeerConfig peerConfig, boolean enabled)<a name="line.3478"></a>
<span class="sourceLineNo">3479</span>      throws ReplicationException, IOException {<a name="line.3479"></a>
<span class="sourceLineNo">3480</span>    LOG.info(getClientIdAuditPrefix() + " creating replication peer, id=" + peerId + ", config=" +<a name="line.3480"></a>
<span class="sourceLineNo">3481</span>      peerConfig + ", state=" + (enabled ? "ENABLED" : "DISABLED"));<a name="line.3481"></a>
<span class="sourceLineNo">3482</span>    return executePeerProcedure(new AddPeerProcedure(peerId, peerConfig, enabled));<a name="line.3482"></a>
<span class="sourceLineNo">3483</span>  }<a name="line.3483"></a>
<span class="sourceLineNo">3484</span><a name="line.3484"></a>
<span class="sourceLineNo">3485</span>  @Override<a name="line.3485"></a>
<span class="sourceLineNo">3486</span>  public long removeReplicationPeer(String peerId) throws ReplicationException, IOException {<a name="line.3486"></a>
<span class="sourceLineNo">3487</span>    LOG.info(getClientIdAuditPrefix() + " removing replication peer, id=" + peerId);<a name="line.3487"></a>
<span class="sourceLineNo">3488</span>    return executePeerProcedure(new RemovePeerProcedure(peerId));<a name="line.3488"></a>
<span class="sourceLineNo">3489</span>  }<a name="line.3489"></a>
<span class="sourceLineNo">3490</span><a name="line.3490"></a>
<span class="sourceLineNo">3491</span>  @Override<a name="line.3491"></a>
<span class="sourceLineNo">3492</span>  public long enableReplicationPeer(String peerId) throws ReplicationException, IOException {<a name="line.3492"></a>
<span class="sourceLineNo">3493</span>    LOG.info(getClientIdAuditPrefix() + " enable replication peer, id=" + peerId);<a name="line.3493"></a>
<span class="sourceLineNo">3494</span>    return executePeerProcedure(new EnablePeerProcedure(peerId));<a name="line.3494"></a>
<span class="sourceLineNo">3495</span>  }<a name="line.3495"></a>
<span class="sourceLineNo">3496</span><a name="line.3496"></a>
<span class="sourceLineNo">3497</span>  @Override<a name="line.3497"></a>
<span class="sourceLineNo">3498</span>  public long disableReplicationPeer(String peerId) throws ReplicationException, IOException {<a name="line.3498"></a>
<span class="sourceLineNo">3499</span>    LOG.info(getClientIdAuditPrefix() + " disable replication peer, id=" + peerId);<a name="line.3499"></a>
<span class="sourceLineNo">3500</span>    return executePeerProcedure(new DisablePeerProcedure(peerId));<a name="line.3500"></a>
<span class="sourceLineNo">3501</span>  }<a name="line.3501"></a>
<span class="sourceLineNo">3502</span><a name="line.3502"></a>
<span class="sourceLineNo">3503</span>  @Override<a name="line.3503"></a>
<span class="sourceLineNo">3504</span>  public ReplicationPeerConfig getReplicationPeerConfig(String peerId)<a name="line.3504"></a>
<span class="sourceLineNo">3505</span>      throws ReplicationException, IOException {<a name="line.3505"></a>
<span class="sourceLineNo">3506</span>    if (cpHost != null) {<a name="line.3506"></a>
<span class="sourceLineNo">3507</span>      cpHost.preGetReplicationPeerConfig(peerId);<a name="line.3507"></a>
<span class="sourceLineNo">3508</span>    }<a name="line.3508"></a>
<span class="sourceLineNo">3509</span>    LOG.info(getClientIdAuditPrefix() + " get replication peer config, id=" + peerId);<a name="line.3509"></a>
<span class="sourceLineNo">3510</span>    ReplicationPeerConfig peerConfig = this.replicationPeerManager.getPeerConfig(peerId)<a name="line.3510"></a>
<span class="sourceLineNo">3511</span>        .orElseThrow(() -&gt; new ReplicationPeerNotFoundException(peerId));<a name="line.3511"></a>
<span class="sourceLineNo">3512</span>    if (cpHost != null) {<a name="line.3512"></a>
<span class="sourceLineNo">3513</span>      cpHost.postGetReplicationPeerConfig(peerId);<a name="line.3513"></a>
<span class="sourceLineNo">3514</span>    }<a name="line.3514"></a>
<span class="sourceLineNo">3515</span>    return peerConfig;<a name="line.3515"></a>
<span class="sourceLineNo">3516</span>  }<a name="line.3516"></a>
<span class="sourceLineNo">3517</span><a name="line.3517"></a>
<span class="sourceLineNo">3518</span>  @Override<a name="line.3518"></a>
<span class="sourceLineNo">3519</span>  public long updateReplicationPeerConfig(String peerId, ReplicationPeerConfig peerConfig)<a name="line.3519"></a>
<span class="sourceLineNo">3520</span>      throws ReplicationException, IOException {<a name="line.3520"></a>
<span class="sourceLineNo">3521</span>    LOG.info(getClientIdAuditPrefix() + " update replication peer config, id=" + peerId +<a name="line.3521"></a>
<span class="sourceLineNo">3522</span>      ", config=" + peerConfig);<a name="line.3522"></a>
<span class="sourceLineNo">3523</span>    return executePeerProcedure(new UpdatePeerConfigProcedure(peerId, peerConfig));<a name="line.3523"></a>
<span class="sourceLineNo">3524</span>  }<a name="line.3524"></a>
<span class="sourceLineNo">3525</span><a name="line.3525"></a>
<span class="sourceLineNo">3526</span>  @Override<a name="line.3526"></a>
<span class="sourceLineNo">3527</span>  public List&lt;ReplicationPeerDescription&gt; listReplicationPeers(String regex)<a name="line.3527"></a>
<span class="sourceLineNo">3528</span>      throws ReplicationException, IOException {<a name="line.3528"></a>
<span class="sourceLineNo">3529</span>    if (cpHost != null) {<a name="line.3529"></a>
<span class="sourceLineNo">3530</span>      cpHost.preListReplicationPeers(regex);<a name="line.3530"></a>
<span class="sourceLineNo">3531</span>    }<a name="line.3531"></a>
<span class="sourceLineNo">3532</span>    LOG.info(getClientIdAuditPrefix() + " list replication peers, regex=" + regex);<a name="line.3532"></a>
<span class="sourceLineNo">3533</span>    Pattern pattern = regex == null ? null : Pattern.compile(regex);<a name="line.3533"></a>
<span class="sourceLineNo">3534</span>    List&lt;ReplicationPeerDescription&gt; peers =<a name="line.3534"></a>
<span class="sourceLineNo">3535</span>      this.replicationPeerManager.listPeers(pattern);<a name="line.3535"></a>
<span class="sourceLineNo">3536</span>    if (cpHost != null) {<a name="line.3536"></a>
<span class="sourceLineNo">3537</span>      cpHost.postListReplicationPeers(regex);<a name="line.3537"></a>
<span class="sourceLineNo">3538</span>    }<a name="line.3538"></a>
<span class="sourceLineNo">3539</span>    return peers;<a name="line.3539"></a>
<span class="sourceLineNo">3540</span>  }<a name="line.3540"></a>
<span class="sourceLineNo">3541</span><a name="line.3541"></a>
<span class="sourceLineNo">3542</span>  @Override<a name="line.3542"></a>
<span class="sourceLineNo">3543</span>  public long transitReplicationPeerSyncReplicationState(String peerId, SyncReplicationState state)<a name="line.3543"></a>
<span class="sourceLineNo">3544</span>    throws ReplicationException, IOException {<a name="line.3544"></a>
<span class="sourceLineNo">3545</span>    LOG.info(<a name="line.3545"></a>
<span class="sourceLineNo">3546</span>      getClientIdAuditPrefix() +<a name="line.3546"></a>
<span class="sourceLineNo">3547</span>        " transit current cluster state to {} in a synchronous replication peer id={}",<a name="line.3547"></a>
<span class="sourceLineNo">3548</span>      state, peerId);<a name="line.3548"></a>
<span class="sourceLineNo">3549</span>    return executePeerProcedure(new TransitPeerSyncReplicationStateProcedure(peerId, state));<a name="line.3549"></a>
<span class="sourceLineNo">3550</span>  }<a name="line.3550"></a>
<span class="sourceLineNo">3551</span><a name="line.3551"></a>
<span class="sourceLineNo">3552</span>  /**<a name="line.3552"></a>
<span class="sourceLineNo">3553</span>   * Mark region server(s) as decommissioned (previously called 'draining') to prevent additional<a name="line.3553"></a>
<span class="sourceLineNo">3554</span>   * regions from getting assigned to them. Also unload the regions on the servers asynchronously.0<a name="line.3554"></a>
<span class="sourceLineNo">3555</span>   * @param servers Region servers to decommission.<a name="line.3555"></a>
<span class="sourceLineNo">3556</span>   */<a name="line.3556"></a>
<span class="sourceLineNo">3557</span>  public void decommissionRegionServers(final List&lt;ServerName&gt; servers, final boolean offload)<a name="line.3557"></a>
<span class="sourceLineNo">3558</span>      throws HBaseIOException {<a name="line.3558"></a>
<span class="sourceLineNo">3559</span>    List&lt;ServerName&gt; serversAdded = new ArrayList&lt;&gt;(servers.size());<a name="line.3559"></a>
<span class="sourceLineNo">3560</span>    // Place the decommission marker first.<a name="line.3560"></a>
<span class="sourceLineNo">3561</span>    String parentZnode = getZooKeeper().getZNodePaths().drainingZNode;<a name="line.3561"></a>
<span class="sourceLineNo">3562</span>    for (ServerName server : servers) {<a name="line.3562"></a>
<span class="sourceLineNo">3563</span>      try {<a name="line.3563"></a>
<span class="sourceLineNo">3564</span>        String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3564"></a>
<span class="sourceLineNo">3565</span>        ZKUtil.createAndFailSilent(getZooKeeper(), node);<a name="line.3565"></a>
<span class="sourceLineNo">3566</span>      } catch (KeeperException ke) {<a name="line.3566"></a>
<span class="sourceLineNo">3567</span>        throw new HBaseIOException(<a name="line.3567"></a>
<span class="sourceLineNo">3568</span>          this.zooKeeper.prefix("Unable to decommission '" + server.getServerName() + "'."), ke);<a name="line.3568"></a>
<span class="sourceLineNo">3569</span>      }<a name="line.3569"></a>
<span class="sourceLineNo">3570</span>      if (this.serverManager.addServerToDrainList(server)) {<a name="line.3570"></a>
<span class="sourceLineNo">3571</span>        serversAdded.add(server);<a name="line.3571"></a>
<span class="sourceLineNo">3572</span>      }<a name="line.3572"></a>
<span class="sourceLineNo">3573</span>    }<a name="line.3573"></a>
<span class="sourceLineNo">3574</span>    // Move the regions off the decommissioned servers.<a name="line.3574"></a>
<span class="sourceLineNo">3575</span>    if (offload) {<a name="line.3575"></a>
<span class="sourceLineNo">3576</span>      final List&lt;ServerName&gt; destServers = this.serverManager.createDestinationServersList();<a name="line.3576"></a>
<span class="sourceLineNo">3577</span>      for (ServerName server : serversAdded) {<a name="line.3577"></a>
<span class="sourceLineNo">3578</span>        final List&lt;RegionInfo&gt; regionsOnServer = this.assignmentManager.getRegionsOnServer(server);<a name="line.3578"></a>
<span class="sourceLineNo">3579</span>        for (RegionInfo hri : regionsOnServer) {<a name="line.3579"></a>
<span class="sourceLineNo">3580</span>          ServerName dest = balancer.randomAssignment(hri, destServers);<a name="line.3580"></a>
<span class="sourceLineNo">3581</span>          if (dest == null) {<a name="line.3581"></a>
<span class="sourceLineNo">3582</span>            throw new HBaseIOException("Unable to determine a plan to move " + hri);<a name="line.3582"></a>
<span class="sourceLineNo">3583</span>          }<a name="line.3583"></a>
<span class="sourceLineNo">3584</span>          RegionPlan rp = new RegionPlan(hri, server, dest);<a name="line.3584"></a>
<span class="sourceLineNo">3585</span>          this.assignmentManager.moveAsync(rp);<a name="line.3585"></a>
<span class="sourceLineNo">3586</span>        }<a name="line.3586"></a>
<span class="sourceLineNo">3587</span>      }<a name="line.3587"></a>
<span class="sourceLineNo">3588</span>    }<a name="line.3588"></a>
<span class="sourceLineNo">3589</span>  }<a name="line.3589"></a>
<span class="sourceLineNo">3590</span><a name="line.3590"></a>
<span class="sourceLineNo">3591</span>  /**<a name="line.3591"></a>
<span class="sourceLineNo">3592</span>   * List region servers marked as decommissioned (previously called 'draining') to not get regions<a name="line.3592"></a>
<span class="sourceLineNo">3593</span>   * assigned to them.<a name="line.3593"></a>
<span class="sourceLineNo">3594</span>   * @return List of decommissioned servers.<a name="line.3594"></a>
<span class="sourceLineNo">3595</span>   */<a name="line.3595"></a>
<span class="sourceLineNo">3596</span>  public List&lt;ServerName&gt; listDecommissionedRegionServers() {<a name="line.3596"></a>
<span class="sourceLineNo">3597</span>    return this.serverManager.getDrainingServersList();<a name="line.3597"></a>
<span class="sourceLineNo">3598</span>  }<a name="line.3598"></a>
<span class="sourceLineNo">3599</span><a name="line.3599"></a>
<span class="sourceLineNo">3600</span>  /**<a name="line.3600"></a>
<span class="sourceLineNo">3601</span>   * Remove decommission marker (previously called 'draining') from a region server to allow regions<a name="line.3601"></a>
<span class="sourceLineNo">3602</span>   * assignments. Load regions onto the server asynchronously if a list of regions is given<a name="line.3602"></a>
<span class="sourceLineNo">3603</span>   * @param server Region server to remove decommission marker from.<a name="line.3603"></a>
<span class="sourceLineNo">3604</span>   */<a name="line.3604"></a>
<span class="sourceLineNo">3605</span>  public void recommissionRegionServer(final ServerName server,<a name="line.3605"></a>
<span class="sourceLineNo">3606</span>      final List&lt;byte[]&gt; encodedRegionNames) throws IOException {<a name="line.3606"></a>
<span class="sourceLineNo">3607</span>    // Remove the server from decommissioned (draining) server list.<a name="line.3607"></a>
<span class="sourceLineNo">3608</span>    String parentZnode = getZooKeeper().getZNodePaths().drainingZNode;<a name="line.3608"></a>
<span class="sourceLineNo">3609</span>    String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3609"></a>
<span class="sourceLineNo">3610</span>    try {<a name="line.3610"></a>
<span class="sourceLineNo">3611</span>      ZKUtil.deleteNodeFailSilent(getZooKeeper(), node);<a name="line.3611"></a>
<span class="sourceLineNo">3612</span>    } catch (KeeperException ke) {<a name="line.3612"></a>
<span class="sourceLineNo">3613</span>      throw new HBaseIOException(<a name="line.3613"></a>
<span class="sourceLineNo">3614</span>        this.zooKeeper.prefix("Unable to recommission '" + server.getServerName() + "'."), ke);<a name="line.3614"></a>
<span class="sourceLineNo">3615</span>    }<a name="line.3615"></a>
<span class="sourceLineNo">3616</span>    this.serverManager.removeServerFromDrainList(server);<a name="line.3616"></a>
<span class="sourceLineNo">3617</span><a name="line.3617"></a>
<span class="sourceLineNo">3618</span>    // Load the regions onto the server if we are given a list of regions.<a name="line.3618"></a>
<span class="sourceLineNo">3619</span>    if (encodedRegionNames == null || encodedRegionNames.isEmpty()) {<a name="line.3619"></a>
<span class="sourceLineNo">3620</span>      return;<a name="line.3620"></a>
<span class="sourceLineNo">3621</span>    }<a name="line.3621"></a>
<span class="sourceLineNo">3622</span>    if (!this.serverManager.isServerOnline(server)) {<a name="line.3622"></a>
<span class="sourceLineNo">3623</span>      return;<a name="line.3623"></a>
<span class="sourceLineNo">3624</span>    }<a name="line.3624"></a>
<span class="sourceLineNo">3625</span>    for (byte[] encodedRegionName : encodedRegionNames) {<a name="line.3625"></a>
<span class="sourceLineNo">3626</span>      RegionState regionState =<a name="line.3626"></a>
<span class="sourceLineNo">3627</span>        assignmentManager.getRegionStates().getRegionState(Bytes.toString(encodedRegionName));<a name="line.3627"></a>
<span class="sourceLineNo">3628</span>      if (regionState == null) {<a name="line.3628"></a>
<span class="sourceLineNo">3629</span>        LOG.warn("Unknown region " + Bytes.toStringBinary(encodedRegionName));<a name="line.3629"></a>
<span class="sourceLineNo">3630</span>        continue;<a name="line.3630"></a>
<span class="sourceLineNo">3631</span>      }<a name="line.3631"></a>
<span class="sourceLineNo">3632</span>      RegionInfo hri = regionState.getRegion();<a name="line.3632"></a>
<span class="sourceLineNo">3633</span>      if (server.equals(regionState.getServerName())) {<a name="line.3633"></a>
<span class="sourceLineNo">3634</span>        LOG.info("Skipping move of region " + hri.getRegionNameAsString() +<a name="line.3634"></a>
<span class="sourceLineNo">3635</span>          " because region already assigned to the same server " + server + ".");<a name="line.3635"></a>
<span class="sourceLineNo">3636</span>        continue;<a name="line.3636"></a>
<span class="sourceLineNo">3637</span>      }<a name="line.3637"></a>
<span class="sourceLineNo">3638</span>      RegionPlan rp = new RegionPlan(hri, regionState.getServerName(), server);<a name="line.3638"></a>
<span class="sourceLineNo">3639</span>      this.assignmentManager.moveAsync(rp);<a name="line.3639"></a>
<span class="sourceLineNo">3640</span>    }<a name="line.3640"></a>
<span class="sourceLineNo">3641</span>  }<a name="line.3641"></a>
<span class="sourceLineNo">3642</span><a name="line.3642"></a>
<span class="sourceLineNo">3643</span>  @Override<a name="line.3643"></a>
<span class="sourceLineNo">3644</span>  public LockManager getLockManager() {<a name="line.3644"></a>
<span class="sourceLineNo">3645</span>    return lockManager;<a name="line.3645"></a>
<span class="sourceLineNo">3646</span>  }<a name="line.3646"></a>
<span class="sourceLineNo">3647</span><a name="line.3647"></a>
<span class="sourceLineNo">3648</span>  public QuotaObserverChore getQuotaObserverChore() {<a name="line.3648"></a>
<span class="sourceLineNo">3649</span>    return this.quotaObserverChore;<a name="line.3649"></a>
<span class="sourceLineNo">3650</span>  }<a name="line.3650"></a>
<span class="sourceLineNo">3651</span><a name="line.3651"></a>
<span class="sourceLineNo">3652</span>  public SpaceQuotaSnapshotNotifier getSpaceQuotaSnapshotNotifier() {<a name="line.3652"></a>
<span class="sourceLineNo">3653</span>    return this.spaceQuotaSnapshotNotifier;<a name="line.3653"></a>
<span class="sourceLineNo">3654</span>  }<a name="line.3654"></a>
<span class="sourceLineNo">3655</span><a name="line.3655"></a>
<span class="sourceLineNo">3656</span>  @SuppressWarnings("unchecked")<a name="line.3656"></a>
<span class="sourceLineNo">3657</span>  private RemoteProcedure&lt;MasterProcedureEnv, ?&gt; getRemoteProcedure(long procId) {<a name="line.3657"></a>
<span class="sourceLineNo">3658</span>    Procedure&lt;?&gt; procedure = procedureExecutor.getProcedure(procId);<a name="line.3658"></a>
<span class="sourceLineNo">3659</span>    if (procedure == null) {<a name="line.3659"></a>
<span class="sourceLineNo">3660</span>      return null;<a name="line.3660"></a>
<span class="sourceLineNo">3661</span>    }<a name="line.3661"></a>
<span class="sourceLineNo">3662</span>    assert procedure instanceof RemoteProcedure;<a name="line.3662"></a>
<span class="sourceLineNo">3663</span>    return (RemoteProcedure&lt;MasterProcedureEnv, ?&gt;) procedure;<a name="line.3663"></a>
<span class="sourceLineNo">3664</span>  }<a name="line.3664"></a>
<span class="sourceLineNo">3665</span><a name="line.3665"></a>
<span class="sourceLineNo">3666</span>  public void remoteProcedureCompleted(long procId) {<a name="line.3666"></a>
<span class="sourceLineNo">3667</span>    LOG.debug("Remote procedure done, pid={}", procId);<a name="line.3667"></a>
<span class="sourceLineNo">3668</span>    RemoteProcedure&lt;MasterProcedureEnv, ?&gt; procedure = getRemoteProcedure(procId);<a name="line.3668"></a>
<span class="sourceLineNo">3669</span>    if (procedure != null) {<a name="line.3669"></a>
<span class="sourceLineNo">3670</span>      procedure.remoteOperationCompleted(procedureExecutor.getEnvironment());<a name="line.3670"></a>
<span class="sourceLineNo">3671</span>    }<a name="line.3671"></a>
<span class="sourceLineNo">3672</span>  }<a name="line.3672"></a>
<span class="sourceLineNo">3673</span><a name="line.3673"></a>
<span class="sourceLineNo">3674</span>  public void remoteProcedureFailed(long procId, RemoteProcedureException error) {<a name="line.3674"></a>
<span class="sourceLineNo">3675</span>    LOG.debug("Remote procedure failed, pid={}", procId, error);<a name="line.3675"></a>
<span class="sourceLineNo">3676</span>    RemoteProcedure&lt;MasterProcedureEnv, ?&gt; procedure = getRemoteProcedure(procId);<a name="line.3676"></a>
<span class="sourceLineNo">3677</span>    if (procedure != null) {<a name="line.3677"></a>
<span class="sourceLineNo">3678</span>      procedure.remoteOperationFailed(procedureExecutor.getEnvironment(), error);<a name="line.3678"></a>
<span class="sourceLineNo">3679</span>    }<a name="line.3679"></a>
<span class="sourceLineNo">3680</span>  }<a name="line.3680"></a>
<span class="sourceLineNo">3681</span><a name="line.3681"></a>
<span class="sourceLineNo">3682</span>  @Override<a name="line.3682"></a>
<span class="sourceLineNo">3683</span>  public ReplicationPeerManager getReplicationPeerManager() {<a name="line.3683"></a>
<span class="sourceLineNo">3684</span>    return replicationPeerManager;<a name="line.3684"></a>
<span class="sourceLineNo">3685</span>  }<a name="line.3685"></a>
<span class="sourceLineNo">3686</span><a name="line.3686"></a>
<span class="sourceLineNo">3687</span>  public HashMap&lt;String, List&lt;Pair&lt;ServerName, ReplicationLoadSource&gt;&gt;&gt;<a name="line.3687"></a>
<span class="sourceLineNo">3688</span>      getReplicationLoad(ServerName[] serverNames) {<a name="line.3688"></a>
<span class="sourceLineNo">3689</span>    List&lt;ReplicationPeerDescription&gt; peerList = this.getReplicationPeerManager().listPeers(null);<a name="line.3689"></a>
<span class="sourceLineNo">3690</span>    if (peerList == null) {<a name="line.3690"></a>
<span class="sourceLineNo">3691</span>      return null;<a name="line.3691"></a>
<span class="sourceLineNo">3692</span>    }<a name="line.3692"></a>
<span class="sourceLineNo">3693</span>    HashMap&lt;String, List&lt;Pair&lt;ServerName, ReplicationLoadSource&gt;&gt;&gt; replicationLoadSourceMap =<a name="line.3693"></a>
<span class="sourceLineNo">3694</span>        new HashMap&lt;&gt;(peerList.size());<a name="line.3694"></a>
<span class="sourceLineNo">3695</span>    peerList.stream()<a name="line.3695"></a>
<span class="sourceLineNo">3696</span>        .forEach(peer -&gt; replicationLoadSourceMap.put(peer.getPeerId(), new ArrayList&lt;&gt;()));<a name="line.3696"></a>
<span class="sourceLineNo">3697</span>    for (ServerName serverName : serverNames) {<a name="line.3697"></a>
<span class="sourceLineNo">3698</span>      List&lt;ReplicationLoadSource&gt; replicationLoadSources =<a name="line.3698"></a>
<span class="sourceLineNo">3699</span>          getServerManager().getLoad(serverName).getReplicationLoadSourceList();<a name="line.3699"></a>
<span class="sourceLineNo">3700</span>      for (ReplicationLoadSource replicationLoadSource : replicationLoadSources) {<a name="line.3700"></a>
<span class="sourceLineNo">3701</span>        replicationLoadSourceMap.get(replicationLoadSource.getPeerID())<a name="line.3701"></a>
<span class="sourceLineNo">3702</span>            .add(new Pair&lt;&gt;(serverName, replicationLoadSource));<a name="line.3702"></a>
<span class="sourceLineNo">3703</span>      }<a name="line.3703"></a>
<span class="sourceLineNo">3704</span>    }<a name="line.3704"></a>
<span class="sourceLineNo">3705</span>    for (List&lt;Pair&lt;ServerName, ReplicationLoadSource&gt;&gt; loads : replicationLoadSourceMap.values()) {<a name="line.3705"></a>
<span class="sourceLineNo">3706</span>      if (loads.size() &gt; 0) {<a name="line.3706"></a>
<span class="sourceLineNo">3707</span>        loads.sort(Comparator.comparingLong(load -&gt; (-1) * load.getSecond().getReplicationLag()));<a name="line.3707"></a>
<span class="sourceLineNo">3708</span>      }<a name="line.3708"></a>
<span class="sourceLineNo">3709</span>    }<a name="line.3709"></a>
<span class="sourceLineNo">3710</span>    return replicationLoadSourceMap;<a name="line.3710"></a>
<span class="sourceLineNo">3711</span>  }<a name="line.3711"></a>
<span class="sourceLineNo">3712</span><a name="line.3712"></a>
<span class="sourceLineNo">3713</span>  /**<a name="line.3713"></a>
<span class="sourceLineNo">3714</span>   * This method modifies the master's configuration in order to inject replication-related features<a name="line.3714"></a>
<span class="sourceLineNo">3715</span>   */<a name="line.3715"></a>
<span class="sourceLineNo">3716</span>  @VisibleForTesting<a name="line.3716"></a>
<span class="sourceLineNo">3717</span>  public static void decorateMasterConfiguration(Configuration conf) {<a name="line.3717"></a>
<span class="sourceLineNo">3718</span>    String plugins = conf.get(HBASE_MASTER_LOGCLEANER_PLUGINS);<a name="line.3718"></a>
<span class="sourceLineNo">3719</span>    String cleanerClass = ReplicationLogCleaner.class.getCanonicalName();<a name="line.3719"></a>
<span class="sourceLineNo">3720</span>    if (!plugins.contains(cleanerClass)) {<a name="line.3720"></a>
<span class="sourceLineNo">3721</span>      conf.set(HBASE_MASTER_LOGCLEANER_PLUGINS, plugins + "," + cleanerClass);<a name="line.3721"></a>
<span class="sourceLineNo">3722</span>    }<a name="line.3722"></a>
<span class="sourceLineNo">3723</span>    if (ReplicationUtils.isReplicationForBulkLoadDataEnabled(conf)) {<a name="line.3723"></a>
<span class="sourceLineNo">3724</span>      plugins = conf.get(HFileCleaner.MASTER_HFILE_CLEANER_PLUGINS);<a name="line.3724"></a>
<span class="sourceLineNo">3725</span>      cleanerClass = ReplicationHFileCleaner.class.getCanonicalName();<a name="line.3725"></a>
<span class="sourceLineNo">3726</span>      if (!plugins.contains(cleanerClass)) {<a name="line.3726"></a>
<span class="sourceLineNo">3727</span>        conf.set(HFileCleaner.MASTER_HFILE_CLEANER_PLUGINS, plugins + "," + cleanerClass);<a name="line.3727"></a>
<span class="sourceLineNo">3728</span>      }<a name="line.3728"></a>
<span class="sourceLineNo">3729</span>    }<a name="line.3729"></a>
<span class="sourceLineNo">3730</span>  }<a name="line.3730"></a>
<span class="sourceLineNo">3731</span><a name="line.3731"></a>
<span class="sourceLineNo">3732</span>  public SnapshotQuotaObserverChore getSnapshotQuotaObserverChore() {<a name="line.3732"></a>
<span class="sourceLineNo">3733</span>    return this.snapshotQuotaChore;<a name="line.3733"></a>
<span class="sourceLineNo">3734</span>  }<a name="line.3734"></a>
<span class="sourceLineNo">3735</span><a name="line.3735"></a>
<span class="sourceLineNo">3736</span>  @Override<a name="line.3736"></a>
<span class="sourceLineNo">3737</span>  public SyncReplicationReplayWALManager getSyncReplicationReplayWALManager() {<a name="line.3737"></a>
<span class="sourceLineNo">3738</span>    return this.syncReplicationReplayWALManager;<a name="line.3738"></a>
<span class="sourceLineNo">3739</span>  }<a name="line.3739"></a>
<span class="sourceLineNo">3740</span><a name="line.3740"></a>
<span class="sourceLineNo">3741</span>  @Override<a name="line.3741"></a>
<span class="sourceLineNo">3742</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus() {<a name="line.3742"></a>
<span class="sourceLineNo">3743</span>    if (!this.isOnline() || !LoadBalancer.isMasterCanHostUserRegions(conf)) {<a name="line.3743"></a>
<span class="sourceLineNo">3744</span>      return new HashMap&lt;&gt;();<a name="line.3744"></a>
<span class="sourceLineNo">3745</span>    }<a name="line.3745"></a>
<span class="sourceLineNo">3746</span>    return super.getWalGroupsReplicationStatus();<a name="line.3746"></a>
<span class="sourceLineNo">3747</span>  }<a name="line.3747"></a>
<span class="sourceLineNo">3748</span><a name="line.3748"></a>
<span class="sourceLineNo">3749</span>  public HbckChore getHbckChore() {<a name="line.3749"></a>
<span class="sourceLineNo">3750</span>    return this.hbckChore;<a name="line.3750"></a>
<span class="sourceLineNo">3751</span>  }<a name="line.3751"></a>
<span class="sourceLineNo">3752</span>}<a name="line.3752"></a>




























































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