<!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>import static org.apache.hadoop.hbase.util.DNS.MASTER_HOSTNAME_KEY;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.io.InterruptedIOException;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.lang.reflect.Constructor;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.lang.reflect.InvocationTargetException;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.net.InetAddress;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.net.InetSocketAddress;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.net.UnknownHostException;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import java.util.ArrayList;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.util.Arrays;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.util.Collection;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import java.util.Collections;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.Comparator;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import java.util.EnumSet;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import java.util.HashMap;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import java.util.Iterator;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import java.util.LinkedList;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import java.util.List;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import java.util.Map;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import java.util.Objects;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import java.util.Optional;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import java.util.Set;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import java.util.concurrent.ExecutionException;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import java.util.concurrent.Future;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import java.util.concurrent.TimeUnit;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import java.util.concurrent.TimeoutException;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import java.util.regex.Pattern;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import java.util.stream.Collectors;<a name="line.51"></a>
<span class="sourceLineNo">052</span>import javax.servlet.http.HttpServlet;<a name="line.52"></a>
<span class="sourceLineNo">053</span>import org.apache.commons.lang3.StringUtils;<a name="line.53"></a>
<span class="sourceLineNo">054</span>import org.apache.hadoop.conf.Configuration;<a name="line.54"></a>
<span class="sourceLineNo">055</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.55"></a>
<span class="sourceLineNo">056</span>import org.apache.hadoop.fs.Path;<a name="line.56"></a>
<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.ClusterId;<a name="line.57"></a>
<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.ClusterMetricsBuilder;<a name="line.60"></a>
<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.61"></a>
<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.62"></a>
<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.63"></a>
<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.HConstants;<a name="line.64"></a>
<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.InvalidFamilyOperationException;<a name="line.65"></a>
<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.66"></a>
<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.67"></a>
<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.68"></a>
<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.69"></a>
<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.RegionMetrics;<a name="line.70"></a>
<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;<a name="line.71"></a>
<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.72"></a>
<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.ServerName;<a name="line.73"></a>
<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.TableName;<a name="line.74"></a>
<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.75"></a>
<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.76"></a>
<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.77"></a>
<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.78"></a>
<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.CompactionState;<a name="line.79"></a>
<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.80"></a>
<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.NormalizeTableFilterParams;<a name="line.81"></a>
<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.82"></a>
<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.83"></a>
<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.RegionStatesCount;<a name="line.84"></a>
<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.85"></a>
<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.86"></a>
<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.87"></a>
<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.88"></a>
<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.exceptions.MasterStoppedException;<a name="line.89"></a>
<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.executor.ExecutorType;<a name="line.90"></a>
<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.favored.FavoredNodesManager;<a name="line.91"></a>
<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.http.HttpServer;<a name="line.92"></a>
<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.93"></a>
<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.94"></a>
<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.95"></a>
<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.96"></a>
<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.master.MasterRpcServices.BalanceSwitchMode;<a name="line.97"></a>
<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.98"></a>
<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure;<a name="line.99"></a>
<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.master.assignment.RegionStateNode;<a name="line.100"></a>
<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.101"></a>
<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure;<a name="line.102"></a>
<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.balancer.BalancerChore;<a name="line.103"></a>
<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.balancer.ClusterStatusChore;<a name="line.104"></a>
<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.105"></a>
<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.master.balancer.MaintenanceLoadBalancer;<a name="line.106"></a>
<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.master.cleaner.DirScanPool;<a name="line.107"></a>
<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;<a name="line.108"></a>
<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.master.cleaner.LogCleaner;<a name="line.109"></a>
<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationBarrierCleaner;<a name="line.110"></a>
<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.master.cleaner.SnapshotCleanerChore;<a name="line.111"></a>
<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.janitor.CatalogJanitor;<a name="line.112"></a>
<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.locking.LockManager;<a name="line.113"></a>
<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory;<a name="line.114"></a>
<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerManager;<a name="line.115"></a>
<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.procedure.CreateTableProcedure;<a name="line.116"></a>
<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure;<a name="line.117"></a>
<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure;<a name="line.118"></a>
<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.master.procedure.DisableTableProcedure;<a name="line.119"></a>
<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.master.procedure.EnableTableProcedure;<a name="line.120"></a>
<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.master.procedure.InitMetaProcedure;<a name="line.121"></a>
<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.122"></a>
<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.123"></a>
<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;<a name="line.124"></a>
<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil;<a name="line.125"></a>
<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.NonceProcedureRunnable;<a name="line.126"></a>
<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure;<a name="line.127"></a>
<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.128"></a>
<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.129"></a>
<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.master.procedure.ReopenTableRegionsProcedure;<a name="line.130"></a>
<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;<a name="line.131"></a>
<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure;<a name="line.132"></a>
<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.master.region.MasterRegion;<a name="line.133"></a>
<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.master.region.MasterRegionFactory;<a name="line.134"></a>
<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure;<a name="line.135"></a>
<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.master.replication.AddPeerProcedure;<a name="line.136"></a>
<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.master.replication.DisablePeerProcedure;<a name="line.137"></a>
<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.master.replication.EnablePeerProcedure;<a name="line.138"></a>
<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.master.replication.RemovePeerProcedure;<a name="line.139"></a>
<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.master.replication.ReplicationPeerManager;<a name="line.140"></a>
<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.master.replication.SyncReplicationReplayWALManager;<a name="line.141"></a>
<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.master.replication.TransitPeerSyncReplicationStateProcedure;<a name="line.142"></a>
<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.master.replication.UpdatePeerConfigProcedure;<a name="line.143"></a>
<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.master.slowlog.SlowLogMasterService;<a name="line.144"></a>
<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;<a name="line.145"></a>
<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.master.zksyncer.MasterAddressSyncer;<a name="line.146"></a>
<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.master.zksyncer.MetaLocationSyncer;<a name="line.147"></a>
<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.mob.MobFileCleanerChore;<a name="line.148"></a>
<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.mob.MobFileCompactionChore;<a name="line.149"></a>
<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer;<a name="line.150"></a>
<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.151"></a>
<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.monitoring.TaskMonitor;<a name="line.152"></a>
<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost;<a name="line.153"></a>
<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager;<a name="line.154"></a>
<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.procedure2.LockedResource;<a name="line.155"></a>
<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.156"></a>
<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.157"></a>
<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.158"></a>
<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure;<a name="line.159"></a>
<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureException;<a name="line.160"></a>
<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.161"></a>
<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureStoreListener;<a name="line.162"></a>
<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.procedure2.store.region.RegionProcedureStore;<a name="line.163"></a>
<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.quotas.MasterQuotaManager;<a name="line.164"></a>
<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.quotas.MasterQuotasObserver;<a name="line.165"></a>
<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.quotas.QuotaObserverChore;<a name="line.166"></a>
<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.quotas.QuotaTableUtil;<a name="line.167"></a>
<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.168"></a>
<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.quotas.SnapshotQuotaObserverChore;<a name="line.169"></a>
<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;<a name="line.170"></a>
<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot.SpaceQuotaStatus;<a name="line.171"></a>
<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifier;<a name="line.172"></a>
<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory;<a name="line.173"></a>
<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.quotas.SpaceViolationPolicy;<a name="line.174"></a>
<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.175"></a>
<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.regionserver.RSRpcServices;<a name="line.176"></a>
<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.177"></a>
<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.replication.ReplicationLoadSource;<a name="line.178"></a>
<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.179"></a>
<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.180"></a>
<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.181"></a>
<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.182"></a>
<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.replication.master.ReplicationHFileCleaner;<a name="line.183"></a>
<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner;<a name="line.184"></a>
<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.replication.regionserver.ReplicationStatus;<a name="line.185"></a>
<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.rsgroup.RSGroupAdminEndpoint;<a name="line.186"></a>
<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.rsgroup.RSGroupBasedLoadBalancer;<a name="line.187"></a>
<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.rsgroup.RSGroupInfoManager;<a name="line.188"></a>
<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.rsgroup.RSGroupUtil;<a name="line.189"></a>
<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.190"></a>
<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.security.SecurityConstants;<a name="line.191"></a>
<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.192"></a>
<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.193"></a>
<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.194"></a>
<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.195"></a>
<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.util.FutureUtils;<a name="line.196"></a>
<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.util.HBaseFsck;<a name="line.197"></a>
<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.util.HFileArchiveUtil;<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.SnapshotCleanupTracker;<a name="line.210"></a>
<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.211"></a>
<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.212"></a>
<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.213"></a>
<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.214"></a>
<span class="sourceLineNo">215</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.215"></a>
<span class="sourceLineNo">216</span>import org.apache.zookeeper.KeeperException;<a name="line.216"></a>
<span class="sourceLineNo">217</span>import org.slf4j.Logger;<a name="line.217"></a>
<span class="sourceLineNo">218</span>import org.slf4j.LoggerFactory;<a name="line.218"></a>
<span class="sourceLineNo">219</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.219"></a>
<span class="sourceLineNo">220</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.220"></a>
<span class="sourceLineNo">221</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.221"></a>
<span class="sourceLineNo">222</span>import org.apache.hbase.thirdparty.com.google.common.io.Closeables;<a name="line.222"></a>
<span class="sourceLineNo">223</span>import org.apache.hbase.thirdparty.com.google.protobuf.Descriptors;<a name="line.223"></a>
<span class="sourceLineNo">224</span>import org.apache.hbase.thirdparty.com.google.protobuf.Service;<a name="line.224"></a>
<span class="sourceLineNo">225</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.Server;<a name="line.225"></a>
<span class="sourceLineNo">226</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.ServerConnector;<a name="line.226"></a>
<span class="sourceLineNo">227</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletHolder;<a name="line.227"></a>
<span class="sourceLineNo">228</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.webapp.WebAppContext;<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;<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 master. If many masters<a name="line.234"></a>
<span class="sourceLineNo">235</span> * are started, all compete. Whichever wins goes on to run the cluster. All others park themselves<a name="line.235"></a>
<span class="sourceLineNo">236</span> * in their constructor until master or cluster shutdown or until the active master loses its lease<a name="line.236"></a>
<span class="sourceLineNo">237</span> * in zookeeper. Thereafter, all running master jostle to take over master role.<a name="line.237"></a>
<span class="sourceLineNo">238</span> * &lt;p/&gt;<a name="line.238"></a>
<span class="sourceLineNo">239</span> * The Master can be asked shutdown the cluster. See {@link #shutdown()}. In this case it will tell<a name="line.239"></a>
<span class="sourceLineNo">240</span> * all regionservers to go down and then wait on them all reporting in that they are down. This<a name="line.240"></a>
<span class="sourceLineNo">241</span> * master will then shut itself down.<a name="line.241"></a>
<span class="sourceLineNo">242</span> * &lt;p/&gt;<a name="line.242"></a>
<span class="sourceLineNo">243</span> * You can also shutdown just this master. Call {@link #stopMaster()}.<a name="line.243"></a>
<span class="sourceLineNo">244</span> * @see org.apache.zookeeper.Watcher<a name="line.244"></a>
<span class="sourceLineNo">245</span> */<a name="line.245"></a>
<span class="sourceLineNo">246</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.246"></a>
<span class="sourceLineNo">247</span>@SuppressWarnings("deprecation")<a name="line.247"></a>
<span class="sourceLineNo">248</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.248"></a>
<span class="sourceLineNo">249</span><a name="line.249"></a>
<span class="sourceLineNo">250</span>  private static final Logger LOG = LoggerFactory.getLogger(HMaster.class);<a name="line.250"></a>
<span class="sourceLineNo">251</span><a name="line.251"></a>
<span class="sourceLineNo">252</span>  // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.252"></a>
<span class="sourceLineNo">253</span>  //instance into web context.<a name="line.253"></a>
<span class="sourceLineNo">254</span>  public static final String MASTER = "master";<a name="line.254"></a>
<span class="sourceLineNo">255</span><a name="line.255"></a>
<span class="sourceLineNo">256</span>  // Manager and zk listener for master election<a name="line.256"></a>
<span class="sourceLineNo">257</span>  private final ActiveMasterManager activeMasterManager;<a name="line.257"></a>
<span class="sourceLineNo">258</span>  // Region server tracker<a name="line.258"></a>
<span class="sourceLineNo">259</span>  private RegionServerTracker regionServerTracker;<a name="line.259"></a>
<span class="sourceLineNo">260</span>  // Draining region server tracker<a name="line.260"></a>
<span class="sourceLineNo">261</span>  private DrainingServerTracker drainingServerTracker;<a name="line.261"></a>
<span class="sourceLineNo">262</span>  // Tracker for load balancer state<a name="line.262"></a>
<span class="sourceLineNo">263</span>  LoadBalancerTracker loadBalancerTracker;<a name="line.263"></a>
<span class="sourceLineNo">264</span>  // Tracker for meta location, if any client ZK quorum specified<a name="line.264"></a>
<span class="sourceLineNo">265</span>  private MetaLocationSyncer metaLocationSyncer;<a name="line.265"></a>
<span class="sourceLineNo">266</span>  // Tracker for active master location, if any client ZK quorum specified<a name="line.266"></a>
<span class="sourceLineNo">267</span>  @InterfaceAudience.Private<a name="line.267"></a>
<span class="sourceLineNo">268</span>  MasterAddressSyncer masterAddressSyncer;<a name="line.268"></a>
<span class="sourceLineNo">269</span>  // Tracker for auto snapshot cleanup state<a name="line.269"></a>
<span class="sourceLineNo">270</span>  SnapshotCleanupTracker snapshotCleanupTracker;<a name="line.270"></a>
<span class="sourceLineNo">271</span><a name="line.271"></a>
<span class="sourceLineNo">272</span>  // Tracker for split and merge state<a name="line.272"></a>
<span class="sourceLineNo">273</span>  private SplitOrMergeTracker splitOrMergeTracker;<a name="line.273"></a>
<span class="sourceLineNo">274</span><a name="line.274"></a>
<span class="sourceLineNo">275</span>  private ClusterSchemaService clusterSchemaService;<a name="line.275"></a>
<span class="sourceLineNo">276</span><a name="line.276"></a>
<span class="sourceLineNo">277</span>  public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.277"></a>
<span class="sourceLineNo">278</span>    "hbase.master.wait.on.service.seconds";<a name="line.278"></a>
<span class="sourceLineNo">279</span>  public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.279"></a>
<span class="sourceLineNo">280</span><a name="line.280"></a>
<span class="sourceLineNo">281</span>  public static final String HBASE_MASTER_CLEANER_INTERVAL = "hbase.master.cleaner.interval";<a name="line.281"></a>
<span class="sourceLineNo">282</span><a name="line.282"></a>
<span class="sourceLineNo">283</span>  public static final int DEFAULT_HBASE_MASTER_CLEANER_INTERVAL = 600 * 1000;<a name="line.283"></a>
<span class="sourceLineNo">284</span><a name="line.284"></a>
<span class="sourceLineNo">285</span>  // Metrics for the HMaster<a name="line.285"></a>
<span class="sourceLineNo">286</span>  final MetricsMaster metricsMaster;<a name="line.286"></a>
<span class="sourceLineNo">287</span>  // file system manager for the master FS operations<a name="line.287"></a>
<span class="sourceLineNo">288</span>  private MasterFileSystem fileSystemManager;<a name="line.288"></a>
<span class="sourceLineNo">289</span>  private MasterWalManager walManager;<a name="line.289"></a>
<span class="sourceLineNo">290</span><a name="line.290"></a>
<span class="sourceLineNo">291</span>  // manager to manage procedure-based WAL splitting, can be null if current<a name="line.291"></a>
<span class="sourceLineNo">292</span>  // is zk-based WAL splitting. SplitWALManager will replace SplitLogManager<a name="line.292"></a>
<span class="sourceLineNo">293</span>  // and MasterWalManager, which means zk-based WAL splitting code will be<a name="line.293"></a>
<span class="sourceLineNo">294</span>  // useless after we switch to the procedure-based one. our eventual goal<a name="line.294"></a>
<span class="sourceLineNo">295</span>  // is to remove all the zk-based WAL splitting code.<a name="line.295"></a>
<span class="sourceLineNo">296</span>  private SplitWALManager splitWALManager;<a name="line.296"></a>
<span class="sourceLineNo">297</span><a name="line.297"></a>
<span class="sourceLineNo">298</span>  // server manager to deal with region server info<a name="line.298"></a>
<span class="sourceLineNo">299</span>  private volatile ServerManager serverManager;<a name="line.299"></a>
<span class="sourceLineNo">300</span><a name="line.300"></a>
<span class="sourceLineNo">301</span>  // manager of assignment nodes in zookeeper<a name="line.301"></a>
<span class="sourceLineNo">302</span>  private AssignmentManager assignmentManager;<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>  /**<a name="line.305"></a>
<span class="sourceLineNo">306</span>   * Cache for the meta region replica's locations. Also tracks their changes to avoid stale<a name="line.306"></a>
<span class="sourceLineNo">307</span>   * cache entries.<a name="line.307"></a>
<span class="sourceLineNo">308</span>   */<a name="line.308"></a>
<span class="sourceLineNo">309</span>  private final MetaRegionLocationCache metaRegionLocationCache;<a name="line.309"></a>
<span class="sourceLineNo">310</span><a name="line.310"></a>
<span class="sourceLineNo">311</span>  private RSGroupInfoManager rsGroupInfoManager;<a name="line.311"></a>
<span class="sourceLineNo">312</span><a name="line.312"></a>
<span class="sourceLineNo">313</span>  // manager of replication<a name="line.313"></a>
<span class="sourceLineNo">314</span>  private ReplicationPeerManager replicationPeerManager;<a name="line.314"></a>
<span class="sourceLineNo">315</span><a name="line.315"></a>
<span class="sourceLineNo">316</span>  private SyncReplicationReplayWALManager syncReplicationReplayWALManager;<a name="line.316"></a>
<span class="sourceLineNo">317</span><a name="line.317"></a>
<span class="sourceLineNo">318</span>  // buffer for "fatal error" notices from region servers<a name="line.318"></a>
<span class="sourceLineNo">319</span>  // in the cluster. This is only used for assisting<a name="line.319"></a>
<span class="sourceLineNo">320</span>  // operations/debugging.<a name="line.320"></a>
<span class="sourceLineNo">321</span>  MemoryBoundedLogMessageBuffer rsFatals;<a name="line.321"></a>
<span class="sourceLineNo">322</span><a name="line.322"></a>
<span class="sourceLineNo">323</span>  // flag set after we become the active master (used for testing)<a name="line.323"></a>
<span class="sourceLineNo">324</span>  private volatile boolean activeMaster = false;<a name="line.324"></a>
<span class="sourceLineNo">325</span><a name="line.325"></a>
<span class="sourceLineNo">326</span>  // flag set after we complete initialization once active<a name="line.326"></a>
<span class="sourceLineNo">327</span>  private final ProcedureEvent&lt;?&gt; initialized = new ProcedureEvent&lt;&gt;("master initialized");<a name="line.327"></a>
<span class="sourceLineNo">328</span><a name="line.328"></a>
<span class="sourceLineNo">329</span>  // flag set after master services are started,<a name="line.329"></a>
<span class="sourceLineNo">330</span>  // initialization may have not completed yet.<a name="line.330"></a>
<span class="sourceLineNo">331</span>  volatile boolean serviceStarted = false;<a name="line.331"></a>
<span class="sourceLineNo">332</span><a name="line.332"></a>
<span class="sourceLineNo">333</span>  // Maximum time we should run balancer for<a name="line.333"></a>
<span class="sourceLineNo">334</span>  private final int maxBalancingTime;<a name="line.334"></a>
<span class="sourceLineNo">335</span>  // Maximum percent of regions in transition when balancing<a name="line.335"></a>
<span class="sourceLineNo">336</span>  private final double maxRitPercent;<a name="line.336"></a>
<span class="sourceLineNo">337</span><a name="line.337"></a>
<span class="sourceLineNo">338</span>  private final LockManager lockManager = new LockManager(this);<a name="line.338"></a>
<span class="sourceLineNo">339</span><a name="line.339"></a>
<span class="sourceLineNo">340</span>  private RSGroupBasedLoadBalancer balancer;<a name="line.340"></a>
<span class="sourceLineNo">341</span>  private BalancerChore balancerChore;<a name="line.341"></a>
<span class="sourceLineNo">342</span>  private RegionNormalizerManager regionNormalizerManager;<a name="line.342"></a>
<span class="sourceLineNo">343</span>  private ClusterStatusChore clusterStatusChore;<a name="line.343"></a>
<span class="sourceLineNo">344</span>  private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.344"></a>
<span class="sourceLineNo">345</span>  private SnapshotCleanerChore snapshotCleanerChore = null;<a name="line.345"></a>
<span class="sourceLineNo">346</span><a name="line.346"></a>
<span class="sourceLineNo">347</span>  private HbckChore hbckChore;<a name="line.347"></a>
<span class="sourceLineNo">348</span>  CatalogJanitor catalogJanitorChore;<a name="line.348"></a>
<span class="sourceLineNo">349</span>  private DirScanPool cleanerPool;<a name="line.349"></a>
<span class="sourceLineNo">350</span>  private LogCleaner logCleaner;<a name="line.350"></a>
<span class="sourceLineNo">351</span>  private HFileCleaner hfileCleaner;<a name="line.351"></a>
<span class="sourceLineNo">352</span>  private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.352"></a>
<span class="sourceLineNo">353</span>  private MobFileCleanerChore mobFileCleanerChore;<a name="line.353"></a>
<span class="sourceLineNo">354</span>  private MobFileCompactionChore mobFileCompactionChore;<a name="line.354"></a>
<span class="sourceLineNo">355</span>  // used to synchronize the mobCompactionStates<a name="line.355"></a>
<span class="sourceLineNo">356</span>  private final IdLock mobCompactionLock = new IdLock();<a name="line.356"></a>
<span class="sourceLineNo">357</span>  // save the information of mob compactions in tables.<a name="line.357"></a>
<span class="sourceLineNo">358</span>  // the key is table name, the value is the number of compactions in that table.<a name="line.358"></a>
<span class="sourceLineNo">359</span>  private Map&lt;TableName, AtomicInteger&gt; mobCompactionStates = Maps.newConcurrentMap();<a name="line.359"></a>
<span class="sourceLineNo">360</span><a name="line.360"></a>
<span class="sourceLineNo">361</span>  MasterCoprocessorHost cpHost;<a name="line.361"></a>
<span class="sourceLineNo">362</span><a name="line.362"></a>
<span class="sourceLineNo">363</span>  private final boolean preLoadTableDescriptors;<a name="line.363"></a>
<span class="sourceLineNo">364</span><a name="line.364"></a>
<span class="sourceLineNo">365</span>  // Time stamps for when a hmaster became active<a name="line.365"></a>
<span class="sourceLineNo">366</span>  private long masterActiveTime;<a name="line.366"></a>
<span class="sourceLineNo">367</span><a name="line.367"></a>
<span class="sourceLineNo">368</span>  // Time stamp for when HMaster finishes becoming Active Master<a name="line.368"></a>
<span class="sourceLineNo">369</span>  private long masterFinishedInitializationTime;<a name="line.369"></a>
<span class="sourceLineNo">370</span><a name="line.370"></a>
<span class="sourceLineNo">371</span>  Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.371"></a>
<span class="sourceLineNo">372</span><a name="line.372"></a>
<span class="sourceLineNo">373</span>  // monitor for snapshot of hbase tables<a name="line.373"></a>
<span class="sourceLineNo">374</span>  SnapshotManager snapshotManager;<a name="line.374"></a>
<span class="sourceLineNo">375</span>  // monitor for distributed procedures<a name="line.375"></a>
<span class="sourceLineNo">376</span>  private MasterProcedureManagerHost mpmHost;<a name="line.376"></a>
<span class="sourceLineNo">377</span><a name="line.377"></a>
<span class="sourceLineNo">378</span>  private RegionsRecoveryChore regionsRecoveryChore = null;<a name="line.378"></a>
<span class="sourceLineNo">379</span><a name="line.379"></a>
<span class="sourceLineNo">380</span>  private RegionsRecoveryConfigManager regionsRecoveryConfigManager = null;<a name="line.380"></a>
<span class="sourceLineNo">381</span>  // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.381"></a>
<span class="sourceLineNo">382</span>  private volatile MasterQuotaManager quotaManager;<a name="line.382"></a>
<span class="sourceLineNo">383</span>  private SpaceQuotaSnapshotNotifier spaceQuotaSnapshotNotifier;<a name="line.383"></a>
<span class="sourceLineNo">384</span>  private QuotaObserverChore quotaObserverChore;<a name="line.384"></a>
<span class="sourceLineNo">385</span>  private SnapshotQuotaObserverChore snapshotQuotaChore;<a name="line.385"></a>
<span class="sourceLineNo">386</span><a name="line.386"></a>
<span class="sourceLineNo">387</span>  private ProcedureExecutor&lt;MasterProcedureEnv&gt; procedureExecutor;<a name="line.387"></a>
<span class="sourceLineNo">388</span>  private ProcedureStore procedureStore;<a name="line.388"></a>
<span class="sourceLineNo">389</span><a name="line.389"></a>
<span class="sourceLineNo">390</span>  // the master local storage to store procedure data, etc.<a name="line.390"></a>
<span class="sourceLineNo">391</span>  private MasterRegion masterRegion;<a name="line.391"></a>
<span class="sourceLineNo">392</span><a name="line.392"></a>
<span class="sourceLineNo">393</span>  // handle table states<a name="line.393"></a>
<span class="sourceLineNo">394</span>  private TableStateManager tableStateManager;<a name="line.394"></a>
<span class="sourceLineNo">395</span><a name="line.395"></a>
<span class="sourceLineNo">396</span>  /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.396"></a>
<span class="sourceLineNo">397</span>  private Server masterJettyServer;<a name="line.397"></a>
<span class="sourceLineNo">398</span><a name="line.398"></a>
<span class="sourceLineNo">399</span>  // Determine if we should do normal startup or minimal "single-user" mode with no region<a name="line.399"></a>
<span class="sourceLineNo">400</span>  // servers and no user tables. Useful for repair and recovery of hbase:meta<a name="line.400"></a>
<span class="sourceLineNo">401</span>  private final boolean maintenanceMode;<a name="line.401"></a>
<span class="sourceLineNo">402</span>  static final String MAINTENANCE_MODE = "hbase.master.maintenance_mode";<a name="line.402"></a>
<span class="sourceLineNo">403</span><a name="line.403"></a>
<span class="sourceLineNo">404</span>  // Cached clusterId on stand by masters to serve clusterID requests from clients.<a name="line.404"></a>
<span class="sourceLineNo">405</span>  private final CachedClusterId cachedClusterId;<a name="line.405"></a>
<span class="sourceLineNo">406</span><a name="line.406"></a>
<span class="sourceLineNo">407</span>  /**<a name="line.407"></a>
<span class="sourceLineNo">408</span>   * Initializes the HMaster. The steps are as follows:<a name="line.408"></a>
<span class="sourceLineNo">409</span>   * &lt;p&gt;<a name="line.409"></a>
<span class="sourceLineNo">410</span>   * &lt;ol&gt;<a name="line.410"></a>
<span class="sourceLineNo">411</span>   * &lt;li&gt;Initialize the local HRegionServer<a name="line.411"></a>
<span class="sourceLineNo">412</span>   * &lt;li&gt;Start the ActiveMasterManager.<a name="line.412"></a>
<span class="sourceLineNo">413</span>   * &lt;/ol&gt;<a name="line.413"></a>
<span class="sourceLineNo">414</span>   * &lt;p&gt;<a name="line.414"></a>
<span class="sourceLineNo">415</span>   * Remaining steps of initialization occur in<a name="line.415"></a>
<span class="sourceLineNo">416</span>   * {@link #finishActiveMasterInitialization(MonitoredTask)} after the master becomes the<a name="line.416"></a>
<span class="sourceLineNo">417</span>   * active one.<a name="line.417"></a>
<span class="sourceLineNo">418</span>   */<a name="line.418"></a>
<span class="sourceLineNo">419</span>  public HMaster(final Configuration conf) throws IOException {<a name="line.419"></a>
<span class="sourceLineNo">420</span>    super(conf);<a name="line.420"></a>
<span class="sourceLineNo">421</span>    TraceUtil.initTracer(conf);<a name="line.421"></a>
<span class="sourceLineNo">422</span>    try {<a name="line.422"></a>
<span class="sourceLineNo">423</span>      if (conf.getBoolean(MAINTENANCE_MODE, false)) {<a name="line.423"></a>
<span class="sourceLineNo">424</span>        LOG.info("Detected {}=true via configuration.", MAINTENANCE_MODE);<a name="line.424"></a>
<span class="sourceLineNo">425</span>        maintenanceMode = true;<a name="line.425"></a>
<span class="sourceLineNo">426</span>      } else if (Boolean.getBoolean(MAINTENANCE_MODE)) {<a name="line.426"></a>
<span class="sourceLineNo">427</span>        LOG.info("Detected {}=true via environment variables.", MAINTENANCE_MODE);<a name="line.427"></a>
<span class="sourceLineNo">428</span>        maintenanceMode = true;<a name="line.428"></a>
<span class="sourceLineNo">429</span>      } else {<a name="line.429"></a>
<span class="sourceLineNo">430</span>        maintenanceMode = false;<a name="line.430"></a>
<span class="sourceLineNo">431</span>      }<a name="line.431"></a>
<span class="sourceLineNo">432</span>      this.rsFatals = new MemoryBoundedLogMessageBuffer(<a name="line.432"></a>
<span class="sourceLineNo">433</span>          conf.getLong("hbase.master.buffer.for.rs.fatals", 1 * 1024 * 1024));<a name="line.433"></a>
<span class="sourceLineNo">434</span>      LOG.info("hbase.rootdir={}, hbase.cluster.distributed={}", getDataRootDir(),<a name="line.434"></a>
<span class="sourceLineNo">435</span>          this.conf.getBoolean(HConstants.CLUSTER_DISTRIBUTED, false));<a name="line.435"></a>
<span class="sourceLineNo">436</span><a name="line.436"></a>
<span class="sourceLineNo">437</span>      // Disable usage of meta replicas in the master<a name="line.437"></a>
<span class="sourceLineNo">438</span>      this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.438"></a>
<span class="sourceLineNo">439</span><a name="line.439"></a>
<span class="sourceLineNo">440</span>      decorateMasterConfiguration(this.conf);<a name="line.440"></a>
<span class="sourceLineNo">441</span><a name="line.441"></a>
<span class="sourceLineNo">442</span>      // Hack! Maps DFSClient =&gt; Master for logs.  HDFS made this<a name="line.442"></a>
<span class="sourceLineNo">443</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.443"></a>
<span class="sourceLineNo">444</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.444"></a>
<span class="sourceLineNo">445</span>        this.conf.set("mapreduce.task.attempt.id", "hb_m_" + this.serverName.toString());<a name="line.445"></a>
<span class="sourceLineNo">446</span>      }<a name="line.446"></a>
<span class="sourceLineNo">447</span><a name="line.447"></a>
<span class="sourceLineNo">448</span>      this.metricsMaster = new MetricsMaster(new MetricsMasterWrapperImpl(this));<a name="line.448"></a>
<span class="sourceLineNo">449</span><a name="line.449"></a>
<span class="sourceLineNo">450</span>      // preload table descriptor at startup<a name="line.450"></a>
<span class="sourceLineNo">451</span>      this.preLoadTableDescriptors = conf.getBoolean("hbase.master.preload.tabledescriptors", true);<a name="line.451"></a>
<span class="sourceLineNo">452</span><a name="line.452"></a>
<span class="sourceLineNo">453</span>      this.maxBalancingTime = getMaxBalancingTime();<a name="line.453"></a>
<span class="sourceLineNo">454</span>      this.maxRitPercent = conf.getDouble(HConstants.HBASE_MASTER_BALANCER_MAX_RIT_PERCENT,<a name="line.454"></a>
<span class="sourceLineNo">455</span>          HConstants.DEFAULT_HBASE_MASTER_BALANCER_MAX_RIT_PERCENT);<a name="line.455"></a>
<span class="sourceLineNo">456</span><a name="line.456"></a>
<span class="sourceLineNo">457</span>      // Do we publish the status?<a name="line.457"></a>
<span class="sourceLineNo">458</span><a name="line.458"></a>
<span class="sourceLineNo">459</span>      boolean shouldPublish = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.459"></a>
<span class="sourceLineNo">460</span>          HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.460"></a>
<span class="sourceLineNo">461</span>      Class&lt;? extends ClusterStatusPublisher.Publisher&gt; publisherClass =<a name="line.461"></a>
<span class="sourceLineNo">462</span>          conf.getClass(ClusterStatusPublisher.STATUS_PUBLISHER_CLASS,<a name="line.462"></a>
<span class="sourceLineNo">463</span>              ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS,<a name="line.463"></a>
<span class="sourceLineNo">464</span>              ClusterStatusPublisher.Publisher.class);<a name="line.464"></a>
<span class="sourceLineNo">465</span><a name="line.465"></a>
<span class="sourceLineNo">466</span>      if (shouldPublish) {<a name="line.466"></a>
<span class="sourceLineNo">467</span>        if (publisherClass == null) {<a name="line.467"></a>
<span class="sourceLineNo">468</span>          LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.468"></a>
<span class="sourceLineNo">469</span>              ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS +<a name="line.469"></a>
<span class="sourceLineNo">470</span>              " is not set - not publishing status");<a name="line.470"></a>
<span class="sourceLineNo">471</span>        } else {<a name="line.471"></a>
<span class="sourceLineNo">472</span>          clusterStatusPublisherChore = new ClusterStatusPublisher(this, conf, publisherClass);<a name="line.472"></a>
<span class="sourceLineNo">473</span>          LOG.debug("Created {}", this.clusterStatusPublisherChore);<a name="line.473"></a>
<span class="sourceLineNo">474</span>          getChoreService().scheduleChore(clusterStatusPublisherChore);<a name="line.474"></a>
<span class="sourceLineNo">475</span>        }<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>      this.metaRegionLocationCache = new MetaRegionLocationCache(this.zooKeeper);<a name="line.478"></a>
<span class="sourceLineNo">479</span>      this.activeMasterManager = createActiveMasterManager(zooKeeper, serverName, this);<a name="line.479"></a>
<span class="sourceLineNo">480</span><a name="line.480"></a>
<span class="sourceLineNo">481</span>      cachedClusterId = new CachedClusterId(this, conf);<a name="line.481"></a>
<span class="sourceLineNo">482</span>    } catch (Throwable t) {<a name="line.482"></a>
<span class="sourceLineNo">483</span>      // Make sure we log the exception. HMaster is often started via reflection and the<a name="line.483"></a>
<span class="sourceLineNo">484</span>      // cause of failed startup is lost.<a name="line.484"></a>
<span class="sourceLineNo">485</span>      LOG.error("Failed construction of Master", t);<a name="line.485"></a>
<span class="sourceLineNo">486</span>      throw t;<a name="line.486"></a>
<span class="sourceLineNo">487</span>    }<a name="line.487"></a>
<span class="sourceLineNo">488</span>  }<a name="line.488"></a>
<span class="sourceLineNo">489</span><a name="line.489"></a>
<span class="sourceLineNo">490</span>  /**<a name="line.490"></a>
<span class="sourceLineNo">491</span>   * Protected to have custom implementations in tests override the default ActiveMaster<a name="line.491"></a>
<span class="sourceLineNo">492</span>   * implementation.<a name="line.492"></a>
<span class="sourceLineNo">493</span>   */<a name="line.493"></a>
<span class="sourceLineNo">494</span>  protected ActiveMasterManager createActiveMasterManager(ZKWatcher zk, ServerName sn,<a name="line.494"></a>
<span class="sourceLineNo">495</span>      org.apache.hadoop.hbase.Server server) throws InterruptedIOException {<a name="line.495"></a>
<span class="sourceLineNo">496</span>    return new ActiveMasterManager(zk, sn, server);<a name="line.496"></a>
<span class="sourceLineNo">497</span>  }<a name="line.497"></a>
<span class="sourceLineNo">498</span><a name="line.498"></a>
<span class="sourceLineNo">499</span>  @Override<a name="line.499"></a>
<span class="sourceLineNo">500</span>  protected String getUseThisHostnameInstead(Configuration conf) {<a name="line.500"></a>
<span class="sourceLineNo">501</span>    return conf.get(MASTER_HOSTNAME_KEY);<a name="line.501"></a>
<span class="sourceLineNo">502</span>  }<a name="line.502"></a>
<span class="sourceLineNo">503</span><a name="line.503"></a>
<span class="sourceLineNo">504</span>  // Main run loop. Calls through to the regionserver run loop AFTER becoming active Master; will<a name="line.504"></a>
<span class="sourceLineNo">505</span>  // block in here until then.<a name="line.505"></a>
<span class="sourceLineNo">506</span>  @Override<a name="line.506"></a>
<span class="sourceLineNo">507</span>  public void run() {<a name="line.507"></a>
<span class="sourceLineNo">508</span>    try {<a name="line.508"></a>
<span class="sourceLineNo">509</span>      Threads.setDaemonThreadRunning(new Thread(() -&gt; {<a name="line.509"></a>
<span class="sourceLineNo">510</span>        try {<a name="line.510"></a>
<span class="sourceLineNo">511</span>          int infoPort = putUpJettyServer();<a name="line.511"></a>
<span class="sourceLineNo">512</span>          startActiveMasterManager(infoPort);<a name="line.512"></a>
<span class="sourceLineNo">513</span>        } catch (Throwable t) {<a name="line.513"></a>
<span class="sourceLineNo">514</span>          // Make sure we log the exception.<a name="line.514"></a>
<span class="sourceLineNo">515</span>          String error = "Failed to become Active Master";<a name="line.515"></a>
<span class="sourceLineNo">516</span>          LOG.error(error, t);<a name="line.516"></a>
<span class="sourceLineNo">517</span>          // Abort should have been called already.<a name="line.517"></a>
<span class="sourceLineNo">518</span>          if (!isAborted()) {<a name="line.518"></a>
<span class="sourceLineNo">519</span>            abort(error, t);<a name="line.519"></a>
<span class="sourceLineNo">520</span>          }<a name="line.520"></a>
<span class="sourceLineNo">521</span>        }<a name="line.521"></a>
<span class="sourceLineNo">522</span>      }), getName() + ":becomeActiveMaster");<a name="line.522"></a>
<span class="sourceLineNo">523</span>      // Fall in here even if we have been aborted. Need to run the shutdown services and<a name="line.523"></a>
<span class="sourceLineNo">524</span>      // the super run call will do this for us.<a name="line.524"></a>
<span class="sourceLineNo">525</span>      super.run();<a name="line.525"></a>
<span class="sourceLineNo">526</span>    } finally {<a name="line.526"></a>
<span class="sourceLineNo">527</span>      if (this.clusterSchemaService != null) {<a name="line.527"></a>
<span class="sourceLineNo">528</span>        // If on way out, then we are no longer active master.<a name="line.528"></a>
<span class="sourceLineNo">529</span>        this.clusterSchemaService.stopAsync();<a name="line.529"></a>
<span class="sourceLineNo">530</span>        try {<a name="line.530"></a>
<span class="sourceLineNo">531</span>          this.clusterSchemaService.awaitTerminated(<a name="line.531"></a>
<span class="sourceLineNo">532</span>              getConfiguration().getInt(HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS,<a name="line.532"></a>
<span class="sourceLineNo">533</span>              DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS), TimeUnit.SECONDS);<a name="line.533"></a>
<span class="sourceLineNo">534</span>        } catch (TimeoutException te) {<a name="line.534"></a>
<span class="sourceLineNo">535</span>          LOG.warn("Failed shutdown of clusterSchemaService", te);<a name="line.535"></a>
<span class="sourceLineNo">536</span>        }<a name="line.536"></a>
<span class="sourceLineNo">537</span>      }<a name="line.537"></a>
<span class="sourceLineNo">538</span>      this.activeMaster = false;<a name="line.538"></a>
<span class="sourceLineNo">539</span>    }<a name="line.539"></a>
<span class="sourceLineNo">540</span>  }<a name="line.540"></a>
<span class="sourceLineNo">541</span><a name="line.541"></a>
<span class="sourceLineNo">542</span>  // return the actual infoPort, -1 means disable info server.<a name="line.542"></a>
<span class="sourceLineNo">543</span>  private int putUpJettyServer() throws IOException {<a name="line.543"></a>
<span class="sourceLineNo">544</span>    if (!conf.getBoolean("hbase.master.infoserver.redirect", true)) {<a name="line.544"></a>
<span class="sourceLineNo">545</span>      return -1;<a name="line.545"></a>
<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
<span class="sourceLineNo">547</span>    final int infoPort = conf.getInt("hbase.master.info.port.orig",<a name="line.547"></a>
<span class="sourceLineNo">548</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.548"></a>
<span class="sourceLineNo">549</span>    // -1 is for disabling info server, so no redirecting<a name="line.549"></a>
<span class="sourceLineNo">550</span>    if (infoPort &lt; 0 || infoServer == null) {<a name="line.550"></a>
<span class="sourceLineNo">551</span>      return -1;<a name="line.551"></a>
<span class="sourceLineNo">552</span>    }<a name="line.552"></a>
<span class="sourceLineNo">553</span>    if (infoPort == infoServer.getPort()) {<a name="line.553"></a>
<span class="sourceLineNo">554</span>      // server is already running<a name="line.554"></a>
<span class="sourceLineNo">555</span>      return infoPort;<a name="line.555"></a>
<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
<span class="sourceLineNo">557</span>    final String addr = conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.557"></a>
<span class="sourceLineNo">558</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.558"></a>
<span class="sourceLineNo">559</span>      String msg =<a name="line.559"></a>
<span class="sourceLineNo">560</span>          "Failed to start redirecting jetty server. Address " + addr<a name="line.560"></a>
<span class="sourceLineNo">561</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.561"></a>
<span class="sourceLineNo">562</span>              + "hbase.master.info.bindAddress";<a name="line.562"></a>
<span class="sourceLineNo">563</span>      LOG.error(msg);<a name="line.563"></a>
<span class="sourceLineNo">564</span>      throw new IOException(msg);<a name="line.564"></a>
<span class="sourceLineNo">565</span>    }<a name="line.565"></a>
<span class="sourceLineNo">566</span><a name="line.566"></a>
<span class="sourceLineNo">567</span>    // TODO I'm pretty sure we could just add another binding to the InfoServer run by<a name="line.567"></a>
<span class="sourceLineNo">568</span>    // the RegionServer and have it run the RedirectServlet instead of standing up<a name="line.568"></a>
<span class="sourceLineNo">569</span>    // a second entire stack here.<a name="line.569"></a>
<span class="sourceLineNo">570</span>    masterJettyServer = new Server();<a name="line.570"></a>
<span class="sourceLineNo">571</span>    final ServerConnector connector = new ServerConnector(masterJettyServer);<a name="line.571"></a>
<span class="sourceLineNo">572</span>    connector.setHost(addr);<a name="line.572"></a>
<span class="sourceLineNo">573</span>    connector.setPort(infoPort);<a name="line.573"></a>
<span class="sourceLineNo">574</span>    masterJettyServer.addConnector(connector);<a name="line.574"></a>
<span class="sourceLineNo">575</span>    masterJettyServer.setStopAtShutdown(true);<a name="line.575"></a>
<span class="sourceLineNo">576</span>    masterJettyServer.setHandler(HttpServer.buildGzipHandler(masterJettyServer.getHandler()));<a name="line.576"></a>
<span class="sourceLineNo">577</span><a name="line.577"></a>
<span class="sourceLineNo">578</span>    final String redirectHostname =<a name="line.578"></a>
<span class="sourceLineNo">579</span>        StringUtils.isBlank(useThisHostnameInstead) ? null : useThisHostnameInstead;<a name="line.579"></a>
<span class="sourceLineNo">580</span><a name="line.580"></a>
<span class="sourceLineNo">581</span>    final MasterRedirectServlet redirect = new MasterRedirectServlet(infoServer, redirectHostname);<a name="line.581"></a>
<span class="sourceLineNo">582</span>    final WebAppContext context = new WebAppContext(null, "/", null, null, null, null, WebAppContext.NO_SESSIONS);<a name="line.582"></a>
<span class="sourceLineNo">583</span>    context.addServlet(new ServletHolder(redirect), "/*");<a name="line.583"></a>
<span class="sourceLineNo">584</span>    context.setServer(masterJettyServer);<a name="line.584"></a>
<span class="sourceLineNo">585</span><a name="line.585"></a>
<span class="sourceLineNo">586</span>    try {<a name="line.586"></a>
<span class="sourceLineNo">587</span>      masterJettyServer.start();<a name="line.587"></a>
<span class="sourceLineNo">588</span>    } catch (Exception e) {<a name="line.588"></a>
<span class="sourceLineNo">589</span>      throw new IOException("Failed to start redirecting jetty server", e);<a name="line.589"></a>
<span class="sourceLineNo">590</span>    }<a name="line.590"></a>
<span class="sourceLineNo">591</span>    return connector.getLocalPort();<a name="line.591"></a>
<span class="sourceLineNo">592</span>  }<a name="line.592"></a>
<span class="sourceLineNo">593</span><a name="line.593"></a>
<span class="sourceLineNo">594</span>  /**<a name="line.594"></a>
<span class="sourceLineNo">595</span>   * For compatibility, if failed with regionserver credentials, try the master one<a name="line.595"></a>
<span class="sourceLineNo">596</span>   */<a name="line.596"></a>
<span class="sourceLineNo">597</span>  @Override<a name="line.597"></a>
<span class="sourceLineNo">598</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.598"></a>
<span class="sourceLineNo">599</span>    try {<a name="line.599"></a>
<span class="sourceLineNo">600</span>      super.login(user, host);<a name="line.600"></a>
<span class="sourceLineNo">601</span>    } catch (IOException ie) {<a name="line.601"></a>
<span class="sourceLineNo">602</span>      user.login(SecurityConstants.MASTER_KRB_KEYTAB_FILE,<a name="line.602"></a>
<span class="sourceLineNo">603</span>              SecurityConstants.MASTER_KRB_PRINCIPAL, host);<a name="line.603"></a>
<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
<span class="sourceLineNo">606</span><a name="line.606"></a>
<span class="sourceLineNo">607</span>  /**<a name="line.607"></a>
<span class="sourceLineNo">608</span>   * If configured to put regions on active master,<a name="line.608"></a>
<span class="sourceLineNo">609</span>   * wait till a backup master becomes active.<a name="line.609"></a>
<span class="sourceLineNo">610</span>   * Otherwise, loop till the server is stopped or aborted.<a name="line.610"></a>
<span class="sourceLineNo">611</span>   */<a name="line.611"></a>
<span class="sourceLineNo">612</span>  @Override<a name="line.612"></a>
<span class="sourceLineNo">613</span>  protected void waitForMasterActive(){<a name="line.613"></a>
<span class="sourceLineNo">614</span>    if (maintenanceMode) {<a name="line.614"></a>
<span class="sourceLineNo">615</span>      return;<a name="line.615"></a>
<span class="sourceLineNo">616</span>    }<a name="line.616"></a>
<span class="sourceLineNo">617</span>    boolean tablesOnMaster = LoadBalancer.isTablesOnMaster(conf);<a name="line.617"></a>
<span class="sourceLineNo">618</span>    while (!(tablesOnMaster &amp;&amp; activeMaster) &amp;&amp; !isStopped() &amp;&amp; !isAborted()) {<a name="line.618"></a>
<span class="sourceLineNo">619</span>      sleeper.sleep();<a name="line.619"></a>
<span class="sourceLineNo">620</span>    }<a name="line.620"></a>
<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
<span class="sourceLineNo">622</span><a name="line.622"></a>
<span class="sourceLineNo">623</span>  @InterfaceAudience.Private<a name="line.623"></a>
<span class="sourceLineNo">624</span>  public MasterRpcServices getMasterRpcServices() {<a name="line.624"></a>
<span class="sourceLineNo">625</span>    return (MasterRpcServices)rpcServices;<a name="line.625"></a>
<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
<span class="sourceLineNo">627</span><a name="line.627"></a>
<span class="sourceLineNo">628</span>  public boolean balanceSwitch(final boolean b) throws IOException {<a name="line.628"></a>
<span class="sourceLineNo">629</span>    return getMasterRpcServices().switchBalancer(b, BalanceSwitchMode.ASYNC);<a name="line.629"></a>
<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
<span class="sourceLineNo">631</span><a name="line.631"></a>
<span class="sourceLineNo">632</span>  @Override<a name="line.632"></a>
<span class="sourceLineNo">633</span>  protected String getProcessName() {<a name="line.633"></a>
<span class="sourceLineNo">634</span>    return MASTER;<a name="line.634"></a>
<span class="sourceLineNo">635</span>  }<a name="line.635"></a>
<span class="sourceLineNo">636</span><a name="line.636"></a>
<span class="sourceLineNo">637</span>  @Override<a name="line.637"></a>
<span class="sourceLineNo">638</span>  protected boolean canCreateBaseZNode() {<a name="line.638"></a>
<span class="sourceLineNo">639</span>    return true;<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>  @Override<a name="line.642"></a>
<span class="sourceLineNo">643</span>  protected boolean canUpdateTableDescriptor() {<a name="line.643"></a>
<span class="sourceLineNo">644</span>    return true;<a name="line.644"></a>
<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
<span class="sourceLineNo">646</span><a name="line.646"></a>
<span class="sourceLineNo">647</span>  @Override<a name="line.647"></a>
<span class="sourceLineNo">648</span>  protected boolean cacheTableDescriptor() {<a name="line.648"></a>
<span class="sourceLineNo">649</span>    return true;<a name="line.649"></a>
<span class="sourceLineNo">650</span>  }<a name="line.650"></a>
<span class="sourceLineNo">651</span><a name="line.651"></a>
<span class="sourceLineNo">652</span>  @Override<a name="line.652"></a>
<span class="sourceLineNo">653</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.653"></a>
<span class="sourceLineNo">654</span>    return new MasterRpcServices(this);<a name="line.654"></a>
<span class="sourceLineNo">655</span>  }<a name="line.655"></a>
<span class="sourceLineNo">656</span><a name="line.656"></a>
<span class="sourceLineNo">657</span>  @Override<a name="line.657"></a>
<span class="sourceLineNo">658</span>  protected void configureInfoServer() {<a name="line.658"></a>
<span class="sourceLineNo">659</span>    infoServer.addUnprivilegedServlet("master-status", "/master-status", MasterStatusServlet.class);<a name="line.659"></a>
<span class="sourceLineNo">660</span>    infoServer.setAttribute(MASTER, this);<a name="line.660"></a>
<span class="sourceLineNo">661</span>    if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.661"></a>
<span class="sourceLineNo">662</span>      super.configureInfoServer();<a name="line.662"></a>
<span class="sourceLineNo">663</span>    }<a name="line.663"></a>
<span class="sourceLineNo">664</span>  }<a name="line.664"></a>
<span class="sourceLineNo">665</span><a name="line.665"></a>
<span class="sourceLineNo">666</span>  @Override<a name="line.666"></a>
<span class="sourceLineNo">667</span>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.667"></a>
<span class="sourceLineNo">668</span>    return MasterDumpServlet.class;<a name="line.668"></a>
<span class="sourceLineNo">669</span>  }<a name="line.669"></a>
<span class="sourceLineNo">670</span><a name="line.670"></a>
<span class="sourceLineNo">671</span>  @Override<a name="line.671"></a>
<span class="sourceLineNo">672</span>  public MetricsMaster getMasterMetrics() {<a name="line.672"></a>
<span class="sourceLineNo">673</span>    return metricsMaster;<a name="line.673"></a>
<span class="sourceLineNo">674</span>  }<a name="line.674"></a>
<span class="sourceLineNo">675</span><a name="line.675"></a>
<span class="sourceLineNo">676</span>  /**<a name="line.676"></a>
<span class="sourceLineNo">677</span>   * Initialize all ZK based system trackers. But do not include {@link RegionServerTracker}, it<a name="line.677"></a>
<span class="sourceLineNo">678</span>   * should have already been initialized along with {@link ServerManager}.<a name="line.678"></a>
<span class="sourceLineNo">679</span>   */<a name="line.679"></a>
<span class="sourceLineNo">680</span>  private void initializeZKBasedSystemTrackers()<a name="line.680"></a>
<span class="sourceLineNo">681</span>    throws IOException, KeeperException, ReplicationException {<a name="line.681"></a>
<span class="sourceLineNo">682</span>    if (maintenanceMode) {<a name="line.682"></a>
<span class="sourceLineNo">683</span>      // in maintenance mode, always use MaintenanceLoadBalancer.<a name="line.683"></a>
<span class="sourceLineNo">684</span>      conf.unset(LoadBalancer.HBASE_RSGROUP_LOADBALANCER_CLASS);<a name="line.684"></a>
<span class="sourceLineNo">685</span>      conf.setClass(HConstants.HBASE_MASTER_LOADBALANCER_CLASS, MaintenanceLoadBalancer.class,<a name="line.685"></a>
<span class="sourceLineNo">686</span>        LoadBalancer.class);<a name="line.686"></a>
<span class="sourceLineNo">687</span>    }<a name="line.687"></a>
<span class="sourceLineNo">688</span>    this.balancer = new RSGroupBasedLoadBalancer();<a name="line.688"></a>
<span class="sourceLineNo">689</span>    this.balancer.setConf(conf);<a name="line.689"></a>
<span class="sourceLineNo">690</span>    this.loadBalancerTracker = new LoadBalancerTracker(zooKeeper, this);<a name="line.690"></a>
<span class="sourceLineNo">691</span>    this.loadBalancerTracker.start();<a name="line.691"></a>
<span class="sourceLineNo">692</span><a name="line.692"></a>
<span class="sourceLineNo">693</span>    this.regionNormalizerManager =<a name="line.693"></a>
<span class="sourceLineNo">694</span>      RegionNormalizerFactory.createNormalizerManager(conf, zooKeeper, this);<a name="line.694"></a>
<span class="sourceLineNo">695</span>    this.configurationManager.registerObserver(regionNormalizerManager);<a name="line.695"></a>
<span class="sourceLineNo">696</span>    this.regionNormalizerManager.start();<a name="line.696"></a>
<span class="sourceLineNo">697</span><a name="line.697"></a>
<span class="sourceLineNo">698</span>    this.splitOrMergeTracker = new SplitOrMergeTracker(zooKeeper, conf, this);<a name="line.698"></a>
<span class="sourceLineNo">699</span>    this.splitOrMergeTracker.start();<a name="line.699"></a>
<span class="sourceLineNo">700</span><a name="line.700"></a>
<span class="sourceLineNo">701</span>    // This is for backwards compatible. We do not need the CP for rs group now but if user want to<a name="line.701"></a>
<span class="sourceLineNo">702</span>    // load it, we need to enable rs group.<a name="line.702"></a>
<span class="sourceLineNo">703</span>    String[] cpClasses = conf.getStrings(MasterCoprocessorHost.MASTER_COPROCESSOR_CONF_KEY);<a name="line.703"></a>
<span class="sourceLineNo">704</span>    if (cpClasses != null) {<a name="line.704"></a>
<span class="sourceLineNo">705</span>      for (String cpClass : cpClasses) {<a name="line.705"></a>
<span class="sourceLineNo">706</span>        if (RSGroupAdminEndpoint.class.getName().equals(cpClass)) {<a name="line.706"></a>
<span class="sourceLineNo">707</span>          RSGroupUtil.enableRSGroup(conf);<a name="line.707"></a>
<span class="sourceLineNo">708</span>          break;<a name="line.708"></a>
<span class="sourceLineNo">709</span>        }<a name="line.709"></a>
<span class="sourceLineNo">710</span>      }<a name="line.710"></a>
<span class="sourceLineNo">711</span>    }<a name="line.711"></a>
<span class="sourceLineNo">712</span>    this.rsGroupInfoManager = RSGroupInfoManager.create(this);<a name="line.712"></a>
<span class="sourceLineNo">713</span><a name="line.713"></a>
<span class="sourceLineNo">714</span>    this.replicationPeerManager = ReplicationPeerManager.create(zooKeeper, conf, clusterId);<a name="line.714"></a>
<span class="sourceLineNo">715</span><a name="line.715"></a>
<span class="sourceLineNo">716</span>    this.drainingServerTracker = new DrainingServerTracker(zooKeeper, this, this.serverManager);<a name="line.716"></a>
<span class="sourceLineNo">717</span>    this.drainingServerTracker.start();<a name="line.717"></a>
<span class="sourceLineNo">718</span><a name="line.718"></a>
<span class="sourceLineNo">719</span>    this.snapshotCleanupTracker = new SnapshotCleanupTracker(zooKeeper, this);<a name="line.719"></a>
<span class="sourceLineNo">720</span>    this.snapshotCleanupTracker.start();<a name="line.720"></a>
<span class="sourceLineNo">721</span><a name="line.721"></a>
<span class="sourceLineNo">722</span>    String clientQuorumServers = conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.722"></a>
<span class="sourceLineNo">723</span>    boolean clientZkObserverMode = conf.getBoolean(HConstants.CLIENT_ZOOKEEPER_OBSERVER_MODE,<a name="line.723"></a>
<span class="sourceLineNo">724</span>      HConstants.DEFAULT_CLIENT_ZOOKEEPER_OBSERVER_MODE);<a name="line.724"></a>
<span class="sourceLineNo">725</span>    if (clientQuorumServers != null &amp;&amp; !clientZkObserverMode) {<a name="line.725"></a>
<span class="sourceLineNo">726</span>      // we need to take care of the ZK information synchronization<a name="line.726"></a>
<span class="sourceLineNo">727</span>      // if given client ZK are not observer nodes<a name="line.727"></a>
<span class="sourceLineNo">728</span>      ZKWatcher clientZkWatcher = new ZKWatcher(conf,<a name="line.728"></a>
<span class="sourceLineNo">729</span>          getProcessName() + ":" + rpcServices.getSocketAddress().getPort() + "-clientZK", this,<a name="line.729"></a>
<span class="sourceLineNo">730</span>          false, true);<a name="line.730"></a>
<span class="sourceLineNo">731</span>      this.metaLocationSyncer = new MetaLocationSyncer(zooKeeper, clientZkWatcher, this);<a name="line.731"></a>
<span class="sourceLineNo">732</span>      this.metaLocationSyncer.start();<a name="line.732"></a>
<span class="sourceLineNo">733</span>      this.masterAddressSyncer = new MasterAddressSyncer(zooKeeper, clientZkWatcher, this);<a name="line.733"></a>
<span class="sourceLineNo">734</span>      this.masterAddressSyncer.start();<a name="line.734"></a>
<span class="sourceLineNo">735</span>      // set cluster id is a one-go effort<a name="line.735"></a>
<span class="sourceLineNo">736</span>      ZKClusterId.setClusterId(clientZkWatcher, fileSystemManager.getClusterId());<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>    // Set the cluster as up.  If new RSs, they'll be waiting on this before<a name="line.739"></a>
<span class="sourceLineNo">740</span>    // going ahead with their startup.<a name="line.740"></a>
<span class="sourceLineNo">741</span>    boolean wasUp = this.clusterStatusTracker.isClusterUp();<a name="line.741"></a>
<span class="sourceLineNo">742</span>    if (!wasUp) this.clusterStatusTracker.setClusterUp();<a name="line.742"></a>
<span class="sourceLineNo">743</span><a name="line.743"></a>
<span class="sourceLineNo">744</span>    LOG.info("Active/primary master=" + this.serverName +<a name="line.744"></a>
<span class="sourceLineNo">745</span>        ", sessionid=0x" +<a name="line.745"></a>
<span class="sourceLineNo">746</span>        Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()) +<a name="line.746"></a>
<span class="sourceLineNo">747</span>        ", setting cluster-up flag (Was=" + wasUp + ")");<a name="line.747"></a>
<span class="sourceLineNo">748</span><a name="line.748"></a>
<span class="sourceLineNo">749</span>    // create/initialize the snapshot manager and other procedure managers<a name="line.749"></a>
<span class="sourceLineNo">750</span>    this.snapshotManager = new SnapshotManager();<a name="line.750"></a>
<span class="sourceLineNo">751</span>    this.mpmHost = new MasterProcedureManagerHost();<a name="line.751"></a>
<span class="sourceLineNo">752</span>    this.mpmHost.register(this.snapshotManager);<a name="line.752"></a>
<span class="sourceLineNo">753</span>    this.mpmHost.register(new MasterFlushTableProcedureManager());<a name="line.753"></a>
<span class="sourceLineNo">754</span>    this.mpmHost.loadProcedures(conf);<a name="line.754"></a>
<span class="sourceLineNo">755</span>    this.mpmHost.initialize(this, this.metricsMaster);<a name="line.755"></a>
<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
<span class="sourceLineNo">757</span><a name="line.757"></a>
<span class="sourceLineNo">758</span>  // Will be overriden in test to inject customized AssignmentManager<a name="line.758"></a>
<span class="sourceLineNo">759</span>  @InterfaceAudience.Private<a name="line.759"></a>
<span class="sourceLineNo">760</span>  protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.760"></a>
<span class="sourceLineNo">761</span>    return new AssignmentManager(master);<a name="line.761"></a>
<span class="sourceLineNo">762</span>  }<a name="line.762"></a>
<span class="sourceLineNo">763</span><a name="line.763"></a>
<span class="sourceLineNo">764</span>  /**<a name="line.764"></a>
<span class="sourceLineNo">765</span>   * Finish initialization of HMaster after becoming the primary master.<a name="line.765"></a>
<span class="sourceLineNo">766</span>   * &lt;p/&gt;<a name="line.766"></a>
<span class="sourceLineNo">767</span>   * The startup order is a bit complicated but very important, do not change it unless you know<a name="line.767"></a>
<span class="sourceLineNo">768</span>   * what you are doing.<a name="line.768"></a>
<span class="sourceLineNo">769</span>   * &lt;ol&gt;<a name="line.769"></a>
<span class="sourceLineNo">770</span>   * &lt;li&gt;Initialize file system based components - file system manager, wal manager, table<a name="line.770"></a>
<span class="sourceLineNo">771</span>   * descriptors, etc&lt;/li&gt;<a name="line.771"></a>
<span class="sourceLineNo">772</span>   * &lt;li&gt;Publish cluster id&lt;/li&gt;<a name="line.772"></a>
<span class="sourceLineNo">773</span>   * &lt;li&gt;Here comes the most complicated part - initialize server manager, assignment manager and<a name="line.773"></a>
<span class="sourceLineNo">774</span>   * region server tracker<a name="line.774"></a>
<span class="sourceLineNo">775</span>   * &lt;ol type='i'&gt;<a name="line.775"></a>
<span class="sourceLineNo">776</span>   * &lt;li&gt;Create server manager&lt;/li&gt;<a name="line.776"></a>
<span class="sourceLineNo">777</span>   * &lt;li&gt;Create procedure executor, load the procedures, but do not start workers. We will start it<a name="line.777"></a>
<span class="sourceLineNo">778</span>   * later after we finish scheduling SCPs to avoid scheduling duplicated SCPs for the same<a name="line.778"></a>
<span class="sourceLineNo">779</span>   * server&lt;/li&gt;<a name="line.779"></a>
<span class="sourceLineNo">780</span>   * &lt;li&gt;Create assignment manager and start it, load the meta region state, but do not load data<a name="line.780"></a>
<span class="sourceLineNo">781</span>   * from meta region&lt;/li&gt;<a name="line.781"></a>
<span class="sourceLineNo">782</span>   * &lt;li&gt;Start region server tracker, construct the online servers set and find out dead servers and<a name="line.782"></a>
<span class="sourceLineNo">783</span>   * schedule SCP for them. The online servers will be constructed by scanning zk, and we will also<a name="line.783"></a>
<span class="sourceLineNo">784</span>   * scan the wal directory to find out possible live region servers, and the differences between<a name="line.784"></a>
<span class="sourceLineNo">785</span>   * these two sets are the dead servers&lt;/li&gt;<a name="line.785"></a>
<span class="sourceLineNo">786</span>   * &lt;/ol&gt;<a name="line.786"></a>
<span class="sourceLineNo">787</span>   * &lt;/li&gt;<a name="line.787"></a>
<span class="sourceLineNo">788</span>   * &lt;li&gt;If this is a new deploy, schedule a InitMetaProcedure to initialize meta&lt;/li&gt;<a name="line.788"></a>
<span class="sourceLineNo">789</span>   * &lt;li&gt;Start necessary service threads - balancer, catalog janitor, executor services, and also<a name="line.789"></a>
<span class="sourceLineNo">790</span>   * the procedure executor, etc. Notice that the balancer must be created first as assignment<a name="line.790"></a>
<span class="sourceLineNo">791</span>   * manager may use it when assigning regions.&lt;/li&gt;<a name="line.791"></a>
<span class="sourceLineNo">792</span>   * &lt;li&gt;Wait for meta to be initialized if necessary, start table state manager.&lt;/li&gt;<a name="line.792"></a>
<span class="sourceLineNo">793</span>   * &lt;li&gt;Wait for enough region servers to check-in&lt;/li&gt;<a name="line.793"></a>
<span class="sourceLineNo">794</span>   * &lt;li&gt;Let assignment manager load data from meta and construct region states&lt;/li&gt;<a name="line.794"></a>
<span class="sourceLineNo">795</span>   * &lt;li&gt;Start all other things such as chore services, etc&lt;/li&gt;<a name="line.795"></a>
<span class="sourceLineNo">796</span>   * &lt;/ol&gt;<a name="line.796"></a>
<span class="sourceLineNo">797</span>   * &lt;p/&gt;<a name="line.797"></a>
<span class="sourceLineNo">798</span>   * Notice that now we will not schedule a special procedure to make meta online(unless the first<a name="line.798"></a>
<span class="sourceLineNo">799</span>   * time where meta has not been created yet), we will rely on SCP to bring meta online.<a name="line.799"></a>
<span class="sourceLineNo">800</span>   */<a name="line.800"></a>
<span class="sourceLineNo">801</span>  private void finishActiveMasterInitialization(MonitoredTask status) throws IOException,<a name="line.801"></a>
<span class="sourceLineNo">802</span>          InterruptedException, KeeperException, ReplicationException {<a name="line.802"></a>
<span class="sourceLineNo">803</span>    /*<a name="line.803"></a>
<span class="sourceLineNo">804</span>     * We are active master now... go initialize components we need to run.<a name="line.804"></a>
<span class="sourceLineNo">805</span>     */<a name="line.805"></a>
<span class="sourceLineNo">806</span>    status.setStatus("Initializing Master file system");<a name="line.806"></a>
<span class="sourceLineNo">807</span><a name="line.807"></a>
<span class="sourceLineNo">808</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.808"></a>
<span class="sourceLineNo">809</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.809"></a>
<span class="sourceLineNo">810</span><a name="line.810"></a>
<span class="sourceLineNo">811</span>    // always initialize the MemStoreLAB as we use a region to store data in master now, see<a name="line.811"></a>
<span class="sourceLineNo">812</span>    // localStore.<a name="line.812"></a>
<span class="sourceLineNo">813</span>    initializeMemStoreChunkCreator();<a name="line.813"></a>
<span class="sourceLineNo">814</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.814"></a>
<span class="sourceLineNo">815</span>    this.walManager = new MasterWalManager(this);<a name="line.815"></a>
<span class="sourceLineNo">816</span><a name="line.816"></a>
<span class="sourceLineNo">817</span>    // warm-up HTDs cache on master initialization<a name="line.817"></a>
<span class="sourceLineNo">818</span>    if (preLoadTableDescriptors) {<a name="line.818"></a>
<span class="sourceLineNo">819</span>      status.setStatus("Pre-loading table descriptors");<a name="line.819"></a>
<span class="sourceLineNo">820</span>      this.tableDescriptors.getAll();<a name="line.820"></a>
<span class="sourceLineNo">821</span>    }<a name="line.821"></a>
<span class="sourceLineNo">822</span><a name="line.822"></a>
<span class="sourceLineNo">823</span>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.823"></a>
<span class="sourceLineNo">824</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.824"></a>
<span class="sourceLineNo">825</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.825"></a>
<span class="sourceLineNo">826</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.826"></a>
<span class="sourceLineNo">827</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.827"></a>
<span class="sourceLineNo">828</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.828"></a>
<span class="sourceLineNo">829</span>    this.clusterId = clusterId.toString();<a name="line.829"></a>
<span class="sourceLineNo">830</span><a name="line.830"></a>
<span class="sourceLineNo">831</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.831"></a>
<span class="sourceLineNo">832</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.832"></a>
<span class="sourceLineNo">833</span>    // hbase.write.hbck1.lock.file to false.<a name="line.833"></a>
<span class="sourceLineNo">834</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.834"></a>
<span class="sourceLineNo">835</span>      Pair&lt;Path, FSDataOutputStream&gt; result = null;<a name="line.835"></a>
<span class="sourceLineNo">836</span>      try {<a name="line.836"></a>
<span class="sourceLineNo">837</span>        result = HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.837"></a>
<span class="sourceLineNo">838</span>            HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.838"></a>
<span class="sourceLineNo">839</span>      } finally {<a name="line.839"></a>
<span class="sourceLineNo">840</span>        if (result != null) {<a name="line.840"></a>
<span class="sourceLineNo">841</span>          Closeables.close(result.getSecond(), true);<a name="line.841"></a>
<span class="sourceLineNo">842</span>        }<a name="line.842"></a>
<span class="sourceLineNo">843</span>      }<a name="line.843"></a>
<span class="sourceLineNo">844</span>    }<a name="line.844"></a>
<span class="sourceLineNo">845</span><a name="line.845"></a>
<span class="sourceLineNo">846</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.846"></a>
<span class="sourceLineNo">847</span>    // The below two managers must be created before loading procedures, as they will be used during<a name="line.847"></a>
<span class="sourceLineNo">848</span>    // loading.<a name="line.848"></a>
<span class="sourceLineNo">849</span>    this.serverManager = createServerManager(this);<a name="line.849"></a>
<span class="sourceLineNo">850</span>    this.syncReplicationReplayWALManager = new SyncReplicationReplayWALManager(this);<a name="line.850"></a>
<span class="sourceLineNo">851</span>    if (!conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.851"></a>
<span class="sourceLineNo">852</span>      DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.852"></a>
<span class="sourceLineNo">853</span>      this.splitWALManager = new SplitWALManager(this);<a name="line.853"></a>
<span class="sourceLineNo">854</span>    }<a name="line.854"></a>
<span class="sourceLineNo">855</span><a name="line.855"></a>
<span class="sourceLineNo">856</span>    // initialize master local region<a name="line.856"></a>
<span class="sourceLineNo">857</span>    masterRegion = MasterRegionFactory.create(this);<a name="line.857"></a>
<span class="sourceLineNo">858</span>    createProcedureExecutor();<a name="line.858"></a>
<span class="sourceLineNo">859</span>    Map&lt;Class&lt;?&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.859"></a>
<span class="sourceLineNo">860</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.860"></a>
<span class="sourceLineNo">861</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.861"></a>
<span class="sourceLineNo">862</span><a name="line.862"></a>
<span class="sourceLineNo">863</span>    // Create Assignment Manager<a name="line.863"></a>
<span class="sourceLineNo">864</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.864"></a>
<span class="sourceLineNo">865</span>    this.assignmentManager.start();<a name="line.865"></a>
<span class="sourceLineNo">866</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.866"></a>
<span class="sourceLineNo">867</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.867"></a>
<span class="sourceLineNo">868</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.868"></a>
<span class="sourceLineNo">869</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.869"></a>
<span class="sourceLineNo">870</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.870"></a>
<span class="sourceLineNo">871</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.871"></a>
<span class="sourceLineNo">872</span>        .collect(Collectors.toList());<a name="line.872"></a>
<span class="sourceLineNo">873</span>    this.assignmentManager.setupRIT(ritList);<a name="line.873"></a>
<span class="sourceLineNo">874</span><a name="line.874"></a>
<span class="sourceLineNo">875</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.875"></a>
<span class="sourceLineNo">876</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.876"></a>
<span class="sourceLineNo">877</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.877"></a>
<span class="sourceLineNo">878</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.878"></a>
<span class="sourceLineNo">879</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.879"></a>
<span class="sourceLineNo">880</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.880"></a>
<span class="sourceLineNo">881</span>    this.regionServerTracker.start(<a name="line.881"></a>
<span class="sourceLineNo">882</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.882"></a>
<span class="sourceLineNo">883</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.883"></a>
<span class="sourceLineNo">884</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.884"></a>
<span class="sourceLineNo">885</span>    // This manager must be accessed AFTER hbase:meta is confirmed on line..<a name="line.885"></a>
<span class="sourceLineNo">886</span>    this.tableStateManager = new TableStateManager(this);<a name="line.886"></a>
<span class="sourceLineNo">887</span><a name="line.887"></a>
<span class="sourceLineNo">888</span>    status.setStatus("Initializing ZK system trackers");<a name="line.888"></a>
<span class="sourceLineNo">889</span>    initializeZKBasedSystemTrackers();<a name="line.889"></a>
<span class="sourceLineNo">890</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.890"></a>
<span class="sourceLineNo">891</span>    try {<a name="line.891"></a>
<span class="sourceLineNo">892</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.892"></a>
<span class="sourceLineNo">893</span>    } catch (IOException e) {<a name="line.893"></a>
<span class="sourceLineNo">894</span>      LOG.info("Failed to load last flushed sequence id of regions"<a name="line.894"></a>
<span class="sourceLineNo">895</span>          + " from file system", e);<a name="line.895"></a>
<span class="sourceLineNo">896</span>    }<a name="line.896"></a>
<span class="sourceLineNo">897</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.897"></a>
<span class="sourceLineNo">898</span>    this.activeMaster = true;<a name="line.898"></a>
<span class="sourceLineNo">899</span><a name="line.899"></a>
<span class="sourceLineNo">900</span>    // Start the Zombie master detector after setting master as active, see HBASE-21535<a name="line.900"></a>
<span class="sourceLineNo">901</span>    Thread zombieDetector = new Thread(new MasterInitializationMonitor(this),<a name="line.901"></a>
<span class="sourceLineNo">902</span>        "ActiveMasterInitializationMonitor-" + System.currentTimeMillis());<a name="line.902"></a>
<span class="sourceLineNo">903</span>    zombieDetector.setDaemon(true);<a name="line.903"></a>
<span class="sourceLineNo">904</span>    zombieDetector.start();<a name="line.904"></a>
<span class="sourceLineNo">905</span><a name="line.905"></a>
<span class="sourceLineNo">906</span>    if (!maintenanceMode) {<a name="line.906"></a>
<span class="sourceLineNo">907</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.907"></a>
<span class="sourceLineNo">908</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.908"></a>
<span class="sourceLineNo">909</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.909"></a>
<span class="sourceLineNo">910</span>        updateConfigurationForQuotasObserver(conf);<a name="line.910"></a>
<span class="sourceLineNo">911</span>      }<a name="line.911"></a>
<span class="sourceLineNo">912</span>      // initialize master side coprocessors before we start handling requests<a name="line.912"></a>
<span class="sourceLineNo">913</span>      status.setStatus("Initializing master coprocessors");<a name="line.913"></a>
<span class="sourceLineNo">914</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.914"></a>
<span class="sourceLineNo">915</span>    }<a name="line.915"></a>
<span class="sourceLineNo">916</span><a name="line.916"></a>
<span class="sourceLineNo">917</span>    // Checking if meta needs initializing.<a name="line.917"></a>
<span class="sourceLineNo">918</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.918"></a>
<span class="sourceLineNo">919</span>    InitMetaProcedure initMetaProc = null;<a name="line.919"></a>
<span class="sourceLineNo">920</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.920"></a>
<span class="sourceLineNo">921</span>    if (!this.assignmentManager.getRegionStates().hasTableRegionStates(TableName.META_TABLE_NAME)) {<a name="line.921"></a>
<span class="sourceLineNo">922</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.922"></a>
<span class="sourceLineNo">923</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.923"></a>
<span class="sourceLineNo">924</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.924"></a>
<span class="sourceLineNo">925</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.925"></a>
<span class="sourceLineNo">926</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.926"></a>
<span class="sourceLineNo">927</span>        procedureExecutor.submitProcedure(temp);<a name="line.927"></a>
<span class="sourceLineNo">928</span>        return temp;<a name="line.928"></a>
<span class="sourceLineNo">929</span>      });<a name="line.929"></a>
<span class="sourceLineNo">930</span>    }<a name="line.930"></a>
<span class="sourceLineNo">931</span><a name="line.931"></a>
<span class="sourceLineNo">932</span>    // initialize load balancer<a name="line.932"></a>
<span class="sourceLineNo">933</span>    this.balancer.setMasterServices(this);<a name="line.933"></a>
<span class="sourceLineNo">934</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.934"></a>
<span class="sourceLineNo">935</span>    this.balancer.initialize();<a name="line.935"></a>
<span class="sourceLineNo">936</span><a name="line.936"></a>
<span class="sourceLineNo">937</span>    // start up all service threads.<a name="line.937"></a>
<span class="sourceLineNo">938</span>    status.setStatus("Initializing master service threads");<a name="line.938"></a>
<span class="sourceLineNo">939</span>    startServiceThreads();<a name="line.939"></a>
<span class="sourceLineNo">940</span>    // wait meta to be initialized after we start procedure executor<a name="line.940"></a>
<span class="sourceLineNo">941</span>    if (initMetaProc != null) {<a name="line.941"></a>
<span class="sourceLineNo">942</span>      initMetaProc.await();<a name="line.942"></a>
<span class="sourceLineNo">943</span>    }<a name="line.943"></a>
<span class="sourceLineNo">944</span>    // Wake up this server to check in<a name="line.944"></a>
<span class="sourceLineNo">945</span>    sleeper.skipSleepCycle();<a name="line.945"></a>
<span class="sourceLineNo">946</span><a name="line.946"></a>
<span class="sourceLineNo">947</span>    // Wait for region servers to report in.<a name="line.947"></a>
<span class="sourceLineNo">948</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.948"></a>
<span class="sourceLineNo">949</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.949"></a>
<span class="sourceLineNo">950</span>    String statusStr = "Wait for region servers to report in";<a name="line.950"></a>
<span class="sourceLineNo">951</span>    status.setStatus(statusStr);<a name="line.951"></a>
<span class="sourceLineNo">952</span>    LOG.info(Objects.toString(status));<a name="line.952"></a>
<span class="sourceLineNo">953</span>    waitForRegionServers(status);<a name="line.953"></a>
<span class="sourceLineNo">954</span><a name="line.954"></a>
<span class="sourceLineNo">955</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.955"></a>
<span class="sourceLineNo">956</span>    if (isStopped()) {<a name="line.956"></a>
<span class="sourceLineNo">957</span>      return;<a name="line.957"></a>
<span class="sourceLineNo">958</span>    }<a name="line.958"></a>
<span class="sourceLineNo">959</span><a name="line.959"></a>
<span class="sourceLineNo">960</span>    status.setStatus("Starting assignment manager");<a name="line.960"></a>
<span class="sourceLineNo">961</span>    // FIRST HBASE:META READ!!!!<a name="line.961"></a>
<span class="sourceLineNo">962</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.962"></a>
<span class="sourceLineNo">963</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.963"></a>
<span class="sourceLineNo">964</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.964"></a>
<span class="sourceLineNo">965</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.965"></a>
<span class="sourceLineNo">966</span>    // available. That's what waitForMetaOnline does.<a name="line.966"></a>
<span class="sourceLineNo">967</span>    if (!waitForMetaOnline()) {<a name="line.967"></a>
<span class="sourceLineNo">968</span>      return;<a name="line.968"></a>
<span class="sourceLineNo">969</span>    }<a name="line.969"></a>
<span class="sourceLineNo">970</span>    this.assignmentManager.joinCluster();<a name="line.970"></a>
<span class="sourceLineNo">971</span>    // The below depends on hbase:meta being online.<a name="line.971"></a>
<span class="sourceLineNo">972</span>    this.assignmentManager.processOfflineRegions();<a name="line.972"></a>
<span class="sourceLineNo">973</span>    // this must be called after the above processOfflineRegions to prevent race<a name="line.973"></a>
<span class="sourceLineNo">974</span>    this.assignmentManager.wakeMetaLoadedEvent();<a name="line.974"></a>
<span class="sourceLineNo">975</span><a name="line.975"></a>
<span class="sourceLineNo">976</span>    // for migrating from a version without HBASE-25099, and also for honoring the configuration<a name="line.976"></a>
<span class="sourceLineNo">977</span>    // first.<a name="line.977"></a>
<span class="sourceLineNo">978</span>    if (conf.get(HConstants.META_REPLICAS_NUM) != null) {<a name="line.978"></a>
<span class="sourceLineNo">979</span>      int replicasNumInConf =<a name="line.979"></a>
<span class="sourceLineNo">980</span>        conf.getInt(HConstants.META_REPLICAS_NUM, HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.980"></a>
<span class="sourceLineNo">981</span>      TableDescriptor metaDesc = tableDescriptors.get(TableName.META_TABLE_NAME);<a name="line.981"></a>
<span class="sourceLineNo">982</span>      if (metaDesc.getRegionReplication() != replicasNumInConf) {<a name="line.982"></a>
<span class="sourceLineNo">983</span>        // it is possible that we already have some replicas before upgrading, so we must set the<a name="line.983"></a>
<span class="sourceLineNo">984</span>        // region replication number in meta TableDescriptor directly first, without creating a<a name="line.984"></a>
<span class="sourceLineNo">985</span>        // ModifyTableProcedure, otherwise it may cause a double assign for the meta replicas.<a name="line.985"></a>
<span class="sourceLineNo">986</span>        int existingReplicasCount =<a name="line.986"></a>
<span class="sourceLineNo">987</span>          assignmentManager.getRegionStates().getRegionsOfTable(TableName.META_TABLE_NAME).size();<a name="line.987"></a>
<span class="sourceLineNo">988</span>        if (existingReplicasCount &gt; metaDesc.getRegionReplication()) {<a name="line.988"></a>
<span class="sourceLineNo">989</span>          LOG.info("Update replica count of hbase:meta from {}(in TableDescriptor)" +<a name="line.989"></a>
<span class="sourceLineNo">990</span>            " to {}(existing ZNodes)", metaDesc.getRegionReplication(), existingReplicasCount);<a name="line.990"></a>
<span class="sourceLineNo">991</span>          metaDesc = TableDescriptorBuilder.newBuilder(metaDesc)<a name="line.991"></a>
<span class="sourceLineNo">992</span>            .setRegionReplication(existingReplicasCount).build();<a name="line.992"></a>
<span class="sourceLineNo">993</span>          tableDescriptors.update(metaDesc);<a name="line.993"></a>
<span class="sourceLineNo">994</span>        }<a name="line.994"></a>
<span class="sourceLineNo">995</span>        // check again, and issue a ModifyTableProcedure if needed<a name="line.995"></a>
<span class="sourceLineNo">996</span>        if (metaDesc.getRegionReplication() != replicasNumInConf) {<a name="line.996"></a>
<span class="sourceLineNo">997</span>          LOG.info(<a name="line.997"></a>
<span class="sourceLineNo">998</span>            "The {} config is {} while the replica count in TableDescriptor is {}" +<a name="line.998"></a>
<span class="sourceLineNo">999</span>              " for hbase:meta, altering...",<a name="line.999"></a>
<span class="sourceLineNo">1000</span>            HConstants.META_REPLICAS_NUM, replicasNumInConf, metaDesc.getRegionReplication());<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>          procedureExecutor.submitProcedure(new ModifyTableProcedure(<a name="line.1001"></a>
<span class="sourceLineNo">1002</span>            procedureExecutor.getEnvironment(), TableDescriptorBuilder.newBuilder(metaDesc)<a name="line.1002"></a>
<span class="sourceLineNo">1003</span>              .setRegionReplication(replicasNumInConf).build(),<a name="line.1003"></a>
<span class="sourceLineNo">1004</span>            null, metaDesc, false));<a name="line.1004"></a>
<span class="sourceLineNo">1005</span>        }<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>      }<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>    }<a name="line.1007"></a>
<span class="sourceLineNo">1008</span>    // Initialize after meta is up as below scans meta<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>    if (getFavoredNodesManager() != null &amp;&amp; !maintenanceMode) {<a name="line.1009"></a>
<span class="sourceLineNo">1010</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1010"></a>
<span class="sourceLineNo">1011</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>      snapshotOfRegionAssignment.initialize();<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>      getFavoredNodesManager().initialize(snapshotOfRegionAssignment);<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>    }<a name="line.1014"></a>
<span class="sourceLineNo">1015</span><a name="line.1015"></a>
<span class="sourceLineNo">1016</span>    // set cluster status again after user regions are assigned<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1017"></a>
<span class="sourceLineNo">1018</span><a name="line.1018"></a>
<span class="sourceLineNo">1019</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1019"></a>
<span class="sourceLineNo">1020</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1020"></a>
<span class="sourceLineNo">1021</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1022"></a>
<span class="sourceLineNo">1023</span>    this.balancerChore = new BalancerChore(this);<a name="line.1023"></a>
<span class="sourceLineNo">1024</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>    if (regionNormalizerManager != null) {<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>      getChoreService().scheduleChore(regionNormalizerManager.getRegionNormalizerChore());<a name="line.1026"></a>
<span class="sourceLineNo">1027</span>    }<a name="line.1027"></a>
<span class="sourceLineNo">1028</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1029"></a>
<span class="sourceLineNo">1030</span>    this.hbckChore = new HbckChore(this);<a name="line.1030"></a>
<span class="sourceLineNo">1031</span>    getChoreService().scheduleChore(hbckChore);<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>    this.serverManager.startChore();<a name="line.1032"></a>
<span class="sourceLineNo">1033</span><a name="line.1033"></a>
<span class="sourceLineNo">1034</span>    // Only for rolling upgrade, where we need to migrate the data in namespace table to meta table.<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>    if (!waitForNamespaceOnline()) {<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>      return;<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>    }<a name="line.1037"></a>
<span class="sourceLineNo">1038</span>    status.setStatus("Starting cluster schema service");<a name="line.1038"></a>
<span class="sourceLineNo">1039</span>    initClusterSchemaService();<a name="line.1039"></a>
<span class="sourceLineNo">1040</span><a name="line.1040"></a>
<span class="sourceLineNo">1041</span>    if (this.cpHost != null) {<a name="line.1041"></a>
<span class="sourceLineNo">1042</span>      try {<a name="line.1042"></a>
<span class="sourceLineNo">1043</span>        this.cpHost.preMasterInitialization();<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>      } catch (IOException e) {<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<a name="line.1045"></a>
<span class="sourceLineNo">1046</span>      }<a name="line.1046"></a>
<span class="sourceLineNo">1047</span>    }<a name="line.1047"></a>
<span class="sourceLineNo">1048</span><a name="line.1048"></a>
<span class="sourceLineNo">1049</span>    status.markComplete("Initialization successful");<a name="line.1049"></a>
<span class="sourceLineNo">1050</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1050"></a>
<span class="sourceLineNo">1051</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1051"></a>
<span class="sourceLineNo">1052</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1052"></a>
<span class="sourceLineNo">1053</span>    configurationManager.registerObserver(this.balancer);<a name="line.1053"></a>
<span class="sourceLineNo">1054</span>    configurationManager.registerObserver(this.cleanerPool);<a name="line.1054"></a>
<span class="sourceLineNo">1055</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1055"></a>
<span class="sourceLineNo">1056</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>    configurationManager.registerObserver(this.regionsRecoveryConfigManager);<a name="line.1057"></a>
<span class="sourceLineNo">1058</span>    // Set master as 'initialized'.<a name="line.1058"></a>
<span class="sourceLineNo">1059</span>    setInitialized(true);<a name="line.1059"></a>
<span class="sourceLineNo">1060</span><a name="line.1060"></a>
<span class="sourceLineNo">1061</span>    if (maintenanceMode) {<a name="line.1061"></a>
<span class="sourceLineNo">1062</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1062"></a>
<span class="sourceLineNo">1063</span>      return;<a name="line.1063"></a>
<span class="sourceLineNo">1064</span>    }<a name="line.1064"></a>
<span class="sourceLineNo">1065</span><a name="line.1065"></a>
<span class="sourceLineNo">1066</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1066"></a>
<span class="sourceLineNo">1067</span>    status.setStatus("Starting quota manager");<a name="line.1067"></a>
<span class="sourceLineNo">1068</span>    initQuotaManager();<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1069"></a>
<span class="sourceLineNo">1070</span>      // Create the quota snapshot notifier<a name="line.1070"></a>
<span class="sourceLineNo">1071</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1071"></a>
<span class="sourceLineNo">1072</span>      spaceQuotaSnapshotNotifier.initialize(getConnection());<a name="line.1072"></a>
<span class="sourceLineNo">1073</span>      this.quotaObserverChore = new QuotaObserverChore(this, getMasterMetrics());<a name="line.1073"></a>
<span class="sourceLineNo">1074</span>      // Start the chore to read the region FS space reports and act on them<a name="line.1074"></a>
<span class="sourceLineNo">1075</span>      getChoreService().scheduleChore(quotaObserverChore);<a name="line.1075"></a>
<span class="sourceLineNo">1076</span><a name="line.1076"></a>
<span class="sourceLineNo">1077</span>      this.snapshotQuotaChore = new SnapshotQuotaObserverChore(this, getMasterMetrics());<a name="line.1077"></a>
<span class="sourceLineNo">1078</span>      // Start the chore to read snapshots and add their usage to table/NS quotas<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>      getChoreService().scheduleChore(snapshotQuotaChore);<a name="line.1079"></a>
<span class="sourceLineNo">1080</span>    }<a name="line.1080"></a>
<span class="sourceLineNo">1081</span>    final SlowLogMasterService slowLogMasterService = new SlowLogMasterService(conf, this);<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>    slowLogMasterService.init();<a name="line.1082"></a>
<span class="sourceLineNo">1083</span><a name="line.1083"></a>
<span class="sourceLineNo">1084</span>    // clear the dead servers with same host name and port of online server because we are not<a name="line.1084"></a>
<span class="sourceLineNo">1085</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.1085"></a>
<span class="sourceLineNo">1086</span>    // master initialization. See HBASE-5916.<a name="line.1086"></a>
<span class="sourceLineNo">1087</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.1087"></a>
<span class="sourceLineNo">1088</span><a name="line.1088"></a>
<span class="sourceLineNo">1089</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.1089"></a>
<span class="sourceLineNo">1090</span>    status.setStatus("Checking ZNode ACLs");<a name="line.1090"></a>
<span class="sourceLineNo">1091</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.1091"></a>
<span class="sourceLineNo">1092</span><a name="line.1092"></a>
<span class="sourceLineNo">1093</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>    initMobCleaner();<a name="line.1094"></a>
<span class="sourceLineNo">1095</span><a name="line.1095"></a>
<span class="sourceLineNo">1096</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.1096"></a>
<span class="sourceLineNo">1097</span>    if (this.cpHost != null) {<a name="line.1097"></a>
<span class="sourceLineNo">1098</span>      // don't let cp initialization errors kill the master<a name="line.1098"></a>
<span class="sourceLineNo">1099</span>      try {<a name="line.1099"></a>
<span class="sourceLineNo">1100</span>        this.cpHost.postStartMaster();<a name="line.1100"></a>
<span class="sourceLineNo">1101</span>      } catch (IOException ioe) {<a name="line.1101"></a>
<span class="sourceLineNo">1102</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.1102"></a>
<span class="sourceLineNo">1103</span>      }<a name="line.1103"></a>
<span class="sourceLineNo">1104</span>    }<a name="line.1104"></a>
<span class="sourceLineNo">1105</span><a name="line.1105"></a>
<span class="sourceLineNo">1106</span>    zombieDetector.interrupt();<a name="line.1106"></a>
<span class="sourceLineNo">1107</span><a name="line.1107"></a>
<span class="sourceLineNo">1108</span>    /*<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>     * After master has started up, lets do balancer post startup initialization. Since this runs<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>     * in activeMasterManager thread, it should be fine.<a name="line.1110"></a>
<span class="sourceLineNo">1111</span>     */<a name="line.1111"></a>
<span class="sourceLineNo">1112</span>    long start = System.currentTimeMillis();<a name="line.1112"></a>
<span class="sourceLineNo">1113</span>    this.balancer.postMasterStartupInitialize();<a name="line.1113"></a>
<span class="sourceLineNo">1114</span>    if (LOG.isDebugEnabled()) {<a name="line.1114"></a>
<span class="sourceLineNo">1115</span>      LOG.debug("Balancer post startup initialization complete, took " + (<a name="line.1115"></a>
<span class="sourceLineNo">1116</span>          (System.currentTimeMillis() - start) / 1000) + " seconds");<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>    }<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>  }<a name="line.1118"></a>
<span class="sourceLineNo">1119</span><a name="line.1119"></a>
<span class="sourceLineNo">1120</span>  /**<a name="line.1120"></a>
<span class="sourceLineNo">1121</span>   * Check hbase:meta is up and ready for reading. For use during Master startup only.<a name="line.1121"></a>
<span class="sourceLineNo">1122</span>   * @return True if meta is UP and online and startup can progress. Otherwise, meta is not online<a name="line.1122"></a>
<span class="sourceLineNo">1123</span>   *   and we will hold here until operator intervention.<a name="line.1123"></a>
<span class="sourceLineNo">1124</span>   */<a name="line.1124"></a>
<span class="sourceLineNo">1125</span>  @InterfaceAudience.Private<a name="line.1125"></a>
<span class="sourceLineNo">1126</span>  public boolean waitForMetaOnline() {<a name="line.1126"></a>
<span class="sourceLineNo">1127</span>    return isRegionOnline(RegionInfoBuilder.FIRST_META_REGIONINFO);<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>   * @return True if region is online and scannable else false if an error or shutdown (Otherwise<a name="line.1131"></a>
<span class="sourceLineNo">1132</span>   *   we just block in here holding up all forward-progess).<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>   */<a name="line.1133"></a>
<span class="sourceLineNo">1134</span>  private boolean isRegionOnline(RegionInfo ri) {<a name="line.1134"></a>
<span class="sourceLineNo">1135</span>    RetryCounter rc = null;<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>    while (!isStopped()) {<a name="line.1136"></a>
<span class="sourceLineNo">1137</span>      RegionState rs = this.assignmentManager.getRegionStates().getRegionState(ri);<a name="line.1137"></a>
<span class="sourceLineNo">1138</span>      if (rs.isOpened()) {<a name="line.1138"></a>
<span class="sourceLineNo">1139</span>        if (this.getServerManager().isServerOnline(rs.getServerName())) {<a name="line.1139"></a>
<span class="sourceLineNo">1140</span>          return true;<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>        }<a name="line.1141"></a>
<span class="sourceLineNo">1142</span>      }<a name="line.1142"></a>
<span class="sourceLineNo">1143</span>      // Region is not OPEN.<a name="line.1143"></a>
<span class="sourceLineNo">1144</span>      Optional&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; optProc = this.procedureExecutor.getProcedures().<a name="line.1144"></a>
<span class="sourceLineNo">1145</span>          stream().filter(p -&gt; p instanceof ServerCrashProcedure).findAny();<a name="line.1145"></a>
<span class="sourceLineNo">1146</span>      // TODO: Add a page to refguide on how to do repair. Have this log message point to it.<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>      // Page will talk about loss of edits, how to schedule at least the meta WAL recovery, and<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>      // then how to assign including how to break region lock if one held.<a name="line.1148"></a>
<span class="sourceLineNo">1149</span>      LOG.warn("{} is NOT online; state={}; ServerCrashProcedures={}. Master startup cannot " +<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>          "progress, in holding-pattern until region onlined.",<a name="line.1150"></a>
<span class="sourceLineNo">1151</span>          ri.getRegionNameAsString(), rs, optProc.isPresent());<a name="line.1151"></a>
<span class="sourceLineNo">1152</span>      // Check once-a-minute.<a name="line.1152"></a>
<span class="sourceLineNo">1153</span>      if (rc == null) {<a name="line.1153"></a>
<span class="sourceLineNo">1154</span>        rc = new RetryCounterFactory(Integer.MAX_VALUE, 1000, 60_000).create();<a name="line.1154"></a>
<span class="sourceLineNo">1155</span>      }<a name="line.1155"></a>
<span class="sourceLineNo">1156</span>      Threads.sleep(rc.getBackoffTimeAndIncrementAttempts());<a name="line.1156"></a>
<span class="sourceLineNo">1157</span>    }<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>    return false;<a name="line.1158"></a>
<span class="sourceLineNo">1159</span>  }<a name="line.1159"></a>
<span class="sourceLineNo">1160</span><a name="line.1160"></a>
<span class="sourceLineNo">1161</span>  /**<a name="line.1161"></a>
<span class="sourceLineNo">1162</span>   * Check hbase:namespace table is assigned. If not, startup will hang looking for the ns table<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>   * &lt;p/&gt;<a name="line.1163"></a>
<span class="sourceLineNo">1164</span>   * This is for rolling upgrading, later we will migrate the data in ns table to the ns family of<a name="line.1164"></a>
<span class="sourceLineNo">1165</span>   * meta table. And if this is a new cluster, this method will return immediately as there will be<a name="line.1165"></a>
<span class="sourceLineNo">1166</span>   * no namespace table/region.<a name="line.1166"></a>
<span class="sourceLineNo">1167</span>   * @return True if namespace table is up/online.<a name="line.1167"></a>
<span class="sourceLineNo">1168</span>   */<a name="line.1168"></a>
<span class="sourceLineNo">1169</span>  private boolean waitForNamespaceOnline() throws IOException {<a name="line.1169"></a>
<span class="sourceLineNo">1170</span>    TableState nsTableState =<a name="line.1170"></a>
<span class="sourceLineNo">1171</span>      MetaTableAccessor.getTableState(getConnection(), TableName.NAMESPACE_TABLE_NAME);<a name="line.1171"></a>
<span class="sourceLineNo">1172</span>    if (nsTableState == null || nsTableState.isDisabled()) {<a name="line.1172"></a>
<span class="sourceLineNo">1173</span>      // this means we have already migrated the data and disabled or deleted the namespace table,<a name="line.1173"></a>
<span class="sourceLineNo">1174</span>      // or this is a new deploy which does not have a namespace table from the beginning.<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>      return true;<a name="line.1175"></a>
<span class="sourceLineNo">1176</span>    }<a name="line.1176"></a>
<span class="sourceLineNo">1177</span>    List&lt;RegionInfo&gt; ris =<a name="line.1177"></a>
<span class="sourceLineNo">1178</span>      this.assignmentManager.getRegionStates().getRegionsOfTable(TableName.NAMESPACE_TABLE_NAME);<a name="line.1178"></a>
<span class="sourceLineNo">1179</span>    if (ris.isEmpty()) {<a name="line.1179"></a>
<span class="sourceLineNo">1180</span>      // maybe this will not happen any more, but anyway, no harm to add a check here...<a name="line.1180"></a>
<span class="sourceLineNo">1181</span>      return true;<a name="line.1181"></a>
<span class="sourceLineNo">1182</span>    }<a name="line.1182"></a>
<span class="sourceLineNo">1183</span>    // Else there are namespace regions up in meta. Ensure they are assigned before we go on.<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>    for (RegionInfo ri : ris) {<a name="line.1184"></a>
<span class="sourceLineNo">1185</span>      if (!isRegionOnline(ri)) {<a name="line.1185"></a>
<span class="sourceLineNo">1186</span>        return false;<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>      }<a name="line.1187"></a>
<span class="sourceLineNo">1188</span>    }<a name="line.1188"></a>
<span class="sourceLineNo">1189</span>    return true;<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>  }<a name="line.1190"></a>
<span class="sourceLineNo">1191</span><a name="line.1191"></a>
<span class="sourceLineNo">1192</span>  /**<a name="line.1192"></a>
<span class="sourceLineNo">1193</span>   * Adds the {@code MasterQuotasObserver} to the list of configured Master observers to<a name="line.1193"></a>
<span class="sourceLineNo">1194</span>   * automatically remove quotas for a table when that table is deleted.<a name="line.1194"></a>
<span class="sourceLineNo">1195</span>   */<a name="line.1195"></a>
<span class="sourceLineNo">1196</span>  @InterfaceAudience.Private<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>  public void updateConfigurationForQuotasObserver(Configuration conf) {<a name="line.1197"></a>
<span class="sourceLineNo">1198</span>    // We're configured to not delete quotas on table deletion, so we don't need to add the obs.<a name="line.1198"></a>
<span class="sourceLineNo">1199</span>    if (!conf.getBoolean(<a name="line.1199"></a>
<span class="sourceLineNo">1200</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE,<a name="line.1200"></a>
<span class="sourceLineNo">1201</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE_DEFAULT)) {<a name="line.1201"></a>
<span class="sourceLineNo">1202</span>      return;<a name="line.1202"></a>
<span class="sourceLineNo">1203</span>    }<a name="line.1203"></a>
<span class="sourceLineNo">1204</span>    String[] masterCoprocs = conf.getStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY);<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>    final int length = null == masterCoprocs ? 0 : masterCoprocs.length;<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>    String[] updatedCoprocs = new String[length + 1];<a name="line.1206"></a>
<span class="sourceLineNo">1207</span>    if (length &gt; 0) {<a name="line.1207"></a>
<span class="sourceLineNo">1208</span>      System.arraycopy(masterCoprocs, 0, updatedCoprocs, 0, masterCoprocs.length);<a name="line.1208"></a>
<span class="sourceLineNo">1209</span>    }<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>    updatedCoprocs[length] = MasterQuotasObserver.class.getName();<a name="line.1210"></a>
<span class="sourceLineNo">1211</span>    conf.setStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, updatedCoprocs);<a name="line.1211"></a>
<span class="sourceLineNo">1212</span>  }<a name="line.1212"></a>
<span class="sourceLineNo">1213</span><a name="line.1213"></a>
<span class="sourceLineNo">1214</span>  private void initMobCleaner() {<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>    this.mobFileCleanerChore = new MobFileCleanerChore(this);<a name="line.1215"></a>
<span class="sourceLineNo">1216</span>    getChoreService().scheduleChore(mobFileCleanerChore);<a name="line.1216"></a>
<span class="sourceLineNo">1217</span>    this.mobFileCompactionChore = new MobFileCompactionChore(this);<a name="line.1217"></a>
<span class="sourceLineNo">1218</span>    getChoreService().scheduleChore(mobFileCompactionChore);<a name="line.1218"></a>
<span class="sourceLineNo">1219</span>  }<a name="line.1219"></a>
<span class="sourceLineNo">1220</span><a name="line.1220"></a>
<span class="sourceLineNo">1221</span>  /**<a name="line.1221"></a>
<span class="sourceLineNo">1222</span>   * &lt;p&gt;<a name="line.1222"></a>
<span class="sourceLineNo">1223</span>   * Create a {@link ServerManager} instance.<a name="line.1223"></a>
<span class="sourceLineNo">1224</span>   * &lt;/p&gt;<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>   * &lt;p&gt;<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>   * Will be overridden in tests.<a name="line.1226"></a>
<span class="sourceLineNo">1227</span>   * &lt;/p&gt;<a name="line.1227"></a>
<span class="sourceLineNo">1228</span>   */<a name="line.1228"></a>
<span class="sourceLineNo">1229</span>  @InterfaceAudience.Private<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>  protected ServerManager createServerManager(final MasterServices master) throws IOException {<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1231"></a>
<span class="sourceLineNo">1232</span>    // w/ a mocked up ServerManager.<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>    setupClusterConnection();<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>    return new ServerManager(master);<a name="line.1234"></a>
<span class="sourceLineNo">1235</span>  }<a name="line.1235"></a>
<span class="sourceLineNo">1236</span><a name="line.1236"></a>
<span class="sourceLineNo">1237</span>  private void waitForRegionServers(final MonitoredTask status)<a name="line.1237"></a>
<span class="sourceLineNo">1238</span>      throws IOException, InterruptedException {<a name="line.1238"></a>
<span class="sourceLineNo">1239</span>    this.serverManager.waitForRegionServers(status);<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>  // Will be overridden in tests<a name="line.1242"></a>
<span class="sourceLineNo">1243</span>  @InterfaceAudience.Private<a name="line.1243"></a>
<span class="sourceLineNo">1244</span>  protected void initClusterSchemaService() throws IOException, InterruptedException {<a name="line.1244"></a>
<span class="sourceLineNo">1245</span>    this.clusterSchemaService = new ClusterSchemaServiceImpl(this);<a name="line.1245"></a>
<span class="sourceLineNo">1246</span>    this.clusterSchemaService.startAsync();<a name="line.1246"></a>
<span class="sourceLineNo">1247</span>    try {<a name="line.1247"></a>
<span class="sourceLineNo">1248</span>      this.clusterSchemaService.awaitRunning(getConfiguration().getInt(<a name="line.1248"></a>
<span class="sourceLineNo">1249</span>        HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS,<a name="line.1249"></a>
<span class="sourceLineNo">1250</span>        DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS), TimeUnit.SECONDS);<a name="line.1250"></a>
<span class="sourceLineNo">1251</span>    } catch (TimeoutException toe) {<a name="line.1251"></a>
<span class="sourceLineNo">1252</span>      throw new IOException("Timedout starting ClusterSchemaService", toe);<a name="line.1252"></a>
<span class="sourceLineNo">1253</span>    }<a name="line.1253"></a>
<span class="sourceLineNo">1254</span>  }<a name="line.1254"></a>
<span class="sourceLineNo">1255</span><a name="line.1255"></a>
<span class="sourceLineNo">1256</span>  private void initQuotaManager() throws IOException {<a name="line.1256"></a>
<span class="sourceLineNo">1257</span>    MasterQuotaManager quotaManager = new MasterQuotaManager(this);<a name="line.1257"></a>
<span class="sourceLineNo">1258</span>    quotaManager.start();<a name="line.1258"></a>
<span class="sourceLineNo">1259</span>    this.quotaManager = quotaManager;<a name="line.1259"></a>
<span class="sourceLineNo">1260</span>  }<a name="line.1260"></a>
<span class="sourceLineNo">1261</span><a name="line.1261"></a>
<span class="sourceLineNo">1262</span>  private SpaceQuotaSnapshotNotifier createQuotaSnapshotNotifier() {<a name="line.1262"></a>
<span class="sourceLineNo">1263</span>    SpaceQuotaSnapshotNotifier notifier =<a name="line.1263"></a>
<span class="sourceLineNo">1264</span>        SpaceQuotaSnapshotNotifierFactory.getInstance().create(getConfiguration());<a name="line.1264"></a>
<span class="sourceLineNo">1265</span>    return notifier;<a name="line.1265"></a>
<span class="sourceLineNo">1266</span>  }<a name="line.1266"></a>
<span class="sourceLineNo">1267</span><a name="line.1267"></a>
<span class="sourceLineNo">1268</span>  boolean isCatalogJanitorEnabled() {<a name="line.1268"></a>
<span class="sourceLineNo">1269</span>    return catalogJanitorChore != null ? catalogJanitorChore.getEnabled() : false;<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>  boolean isCleanerChoreEnabled() {<a name="line.1272"></a>
<span class="sourceLineNo">1273</span>    boolean hfileCleanerFlag = true, logCleanerFlag = true;<a name="line.1273"></a>
<span class="sourceLineNo">1274</span><a name="line.1274"></a>
<span class="sourceLineNo">1275</span>    if (hfileCleaner != null) {<a name="line.1275"></a>
<span class="sourceLineNo">1276</span>      hfileCleanerFlag = hfileCleaner.getEnabled();<a name="line.1276"></a>
<span class="sourceLineNo">1277</span>    }<a name="line.1277"></a>
<span class="sourceLineNo">1278</span><a name="line.1278"></a>
<span class="sourceLineNo">1279</span>    if (logCleaner != null) {<a name="line.1279"></a>
<span class="sourceLineNo">1280</span>      logCleanerFlag = logCleaner.getEnabled();<a name="line.1280"></a>
<span class="sourceLineNo">1281</span>    }<a name="line.1281"></a>
<span class="sourceLineNo">1282</span><a name="line.1282"></a>
<span class="sourceLineNo">1283</span>    return (hfileCleanerFlag &amp;&amp; logCleanerFlag);<a name="line.1283"></a>
<span class="sourceLineNo">1284</span>  }<a name="line.1284"></a>
<span class="sourceLineNo">1285</span><a name="line.1285"></a>
<span class="sourceLineNo">1286</span>  @Override<a name="line.1286"></a>
<span class="sourceLineNo">1287</span>  public ServerManager getServerManager() {<a name="line.1287"></a>
<span class="sourceLineNo">1288</span>    return this.serverManager;<a name="line.1288"></a>
<span class="sourceLineNo">1289</span>  }<a name="line.1289"></a>
<span class="sourceLineNo">1290</span><a name="line.1290"></a>
<span class="sourceLineNo">1291</span>  @Override<a name="line.1291"></a>
<span class="sourceLineNo">1292</span>  public MasterFileSystem getMasterFileSystem() {<a name="line.1292"></a>
<span class="sourceLineNo">1293</span>    return this.fileSystemManager;<a name="line.1293"></a>
<span class="sourceLineNo">1294</span>  }<a name="line.1294"></a>
<span class="sourceLineNo">1295</span><a name="line.1295"></a>
<span class="sourceLineNo">1296</span>  @Override<a name="line.1296"></a>
<span class="sourceLineNo">1297</span>  public MasterWalManager getMasterWalManager() {<a name="line.1297"></a>
<span class="sourceLineNo">1298</span>    return this.walManager;<a name="line.1298"></a>
<span class="sourceLineNo">1299</span>  }<a name="line.1299"></a>
<span class="sourceLineNo">1300</span><a name="line.1300"></a>
<span class="sourceLineNo">1301</span>  @Override<a name="line.1301"></a>
<span class="sourceLineNo">1302</span>  public SplitWALManager getSplitWALManager() {<a name="line.1302"></a>
<span class="sourceLineNo">1303</span>    return splitWALManager;<a name="line.1303"></a>
<span class="sourceLineNo">1304</span>  }<a name="line.1304"></a>
<span class="sourceLineNo">1305</span><a name="line.1305"></a>
<span class="sourceLineNo">1306</span>  @Override<a name="line.1306"></a>
<span class="sourceLineNo">1307</span>  public TableStateManager getTableStateManager() {<a name="line.1307"></a>
<span class="sourceLineNo">1308</span>    return tableStateManager;<a name="line.1308"></a>
<span class="sourceLineNo">1309</span>  }<a name="line.1309"></a>
<span class="sourceLineNo">1310</span><a name="line.1310"></a>
<span class="sourceLineNo">1311</span>  /*<a name="line.1311"></a>
<span class="sourceLineNo">1312</span>   * Start up all services. If any of these threads gets an unhandled exception<a name="line.1312"></a>
<span class="sourceLineNo">1313</span>   * then they just die with a logged message.  This should be fine because<a name="line.1313"></a>
<span class="sourceLineNo">1314</span>   * in general, we do not expect the master to get such unhandled exceptions<a name="line.1314"></a>
<span class="sourceLineNo">1315</span>   *  as OOMEs; it should be lightly loaded. See what HRegionServer does if<a name="line.1315"></a>
<span class="sourceLineNo">1316</span>   *  need to install an unexpected exception handler.<a name="line.1316"></a>
<span class="sourceLineNo">1317</span>   */<a name="line.1317"></a>
<span class="sourceLineNo">1318</span>  private void startServiceThreads() throws IOException {<a name="line.1318"></a>
<span class="sourceLineNo">1319</span>    // Start the executor service pools<a name="line.1319"></a>
<span class="sourceLineNo">1320</span>    final int masterOpenRegionPoolSize = conf.getInt(<a name="line.1320"></a>
<span class="sourceLineNo">1321</span>        HConstants.MASTER_OPEN_REGION_THREADS, HConstants.MASTER_OPEN_REGION_THREADS_DEFAULT);<a name="line.1321"></a>
<span class="sourceLineNo">1322</span>    executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.1322"></a>
<span class="sourceLineNo">1323</span>        ExecutorType.MASTER_OPEN_REGION).setCorePoolSize(masterOpenRegionPoolSize));<a name="line.1323"></a>
<span class="sourceLineNo">1324</span>    final int masterCloseRegionPoolSize = conf.getInt(<a name="line.1324"></a>
<span class="sourceLineNo">1325</span>        HConstants.MASTER_CLOSE_REGION_THREADS, HConstants.MASTER_CLOSE_REGION_THREADS_DEFAULT);<a name="line.1325"></a>
<span class="sourceLineNo">1326</span>    executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.1326"></a>
<span class="sourceLineNo">1327</span>        ExecutorType.MASTER_CLOSE_REGION).setCorePoolSize(masterCloseRegionPoolSize));<a name="line.1327"></a>
<span class="sourceLineNo">1328</span>    final int masterServerOpThreads = conf.getInt(HConstants.MASTER_SERVER_OPERATIONS_THREADS,<a name="line.1328"></a>
<span class="sourceLineNo">1329</span>        HConstants.MASTER_SERVER_OPERATIONS_THREADS_DEFAULT);<a name="line.1329"></a>
<span class="sourceLineNo">1330</span>    executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.1330"></a>
<span class="sourceLineNo">1331</span>        ExecutorType.MASTER_SERVER_OPERATIONS).setCorePoolSize(masterServerOpThreads));<a name="line.1331"></a>
<span class="sourceLineNo">1332</span>    final int masterServerMetaOpsThreads = conf.getInt(<a name="line.1332"></a>
<span class="sourceLineNo">1333</span>        HConstants.MASTER_META_SERVER_OPERATIONS_THREADS,<a name="line.1333"></a>
<span class="sourceLineNo">1334</span>        HConstants.MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT);<a name="line.1334"></a>
<span class="sourceLineNo">1335</span>    executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.1335"></a>
<span class="sourceLineNo">1336</span>        ExecutorType.MASTER_META_SERVER_OPERATIONS).setCorePoolSize(masterServerMetaOpsThreads));<a name="line.1336"></a>
<span class="sourceLineNo">1337</span>    final int masterLogReplayThreads = conf.getInt(<a name="line.1337"></a>
<span class="sourceLineNo">1338</span>        HConstants.MASTER_LOG_REPLAY_OPS_THREADS, HConstants.MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT);<a name="line.1338"></a>
<span class="sourceLineNo">1339</span>    executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.1339"></a>
<span class="sourceLineNo">1340</span>        ExecutorType.M_LOG_REPLAY_OPS).setCorePoolSize(masterLogReplayThreads));<a name="line.1340"></a>
<span class="sourceLineNo">1341</span>    final int masterSnapshotThreads = conf.getInt(<a name="line.1341"></a>
<span class="sourceLineNo">1342</span>        SnapshotManager.SNAPSHOT_POOL_THREADS_KEY, SnapshotManager.SNAPSHOT_POOL_THREADS_DEFAULT);<a name="line.1342"></a>
<span class="sourceLineNo">1343</span>    executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.1343"></a>
<span class="sourceLineNo">1344</span>        ExecutorType.MASTER_SNAPSHOT_OPERATIONS).setCorePoolSize(masterSnapshotThreads)<a name="line.1344"></a>
<span class="sourceLineNo">1345</span>        .setAllowCoreThreadTimeout(true));<a name="line.1345"></a>
<span class="sourceLineNo">1346</span>    final int masterMergeDispatchThreads = conf.getInt(HConstants.MASTER_MERGE_DISPATCH_THREADS,<a name="line.1346"></a>
<span class="sourceLineNo">1347</span>        HConstants.MASTER_MERGE_DISPATCH_THREADS_DEFAULT);<a name="line.1347"></a>
<span class="sourceLineNo">1348</span>    executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.1348"></a>
<span class="sourceLineNo">1349</span>        ExecutorType.MASTER_MERGE_OPERATIONS).setCorePoolSize(masterMergeDispatchThreads)<a name="line.1349"></a>
<span class="sourceLineNo">1350</span>        .setAllowCoreThreadTimeout(true));<a name="line.1350"></a>
<span class="sourceLineNo">1351</span><a name="line.1351"></a>
<span class="sourceLineNo">1352</span>    // We depend on there being only one instance of this executor running<a name="line.1352"></a>
<span class="sourceLineNo">1353</span>    // at a time. To do concurrency, would need fencing of enable/disable of<a name="line.1353"></a>
<span class="sourceLineNo">1354</span>    // tables.<a name="line.1354"></a>
<span class="sourceLineNo">1355</span>    // Any time changing this maxThreads to &gt; 1, pls see the comment at<a name="line.1355"></a>
<span class="sourceLineNo">1356</span>    // AccessController#postCompletedCreateTableAction<a name="line.1356"></a>
<span class="sourceLineNo">1357</span>    executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.1357"></a>
<span class="sourceLineNo">1358</span>        ExecutorType.MASTER_TABLE_OPERATIONS).setCorePoolSize(1));<a name="line.1358"></a>
<span class="sourceLineNo">1359</span>    startProcedureExecutor();<a name="line.1359"></a>
<span class="sourceLineNo">1360</span><a name="line.1360"></a>
<span class="sourceLineNo">1361</span>    // Create cleaner thread pool<a name="line.1361"></a>
<span class="sourceLineNo">1362</span>    cleanerPool = new DirScanPool(conf);<a name="line.1362"></a>
<span class="sourceLineNo">1363</span>    Map&lt;String, Object&gt; params = new HashMap&lt;&gt;();<a name="line.1363"></a>
<span class="sourceLineNo">1364</span>    params.put(MASTER, this);<a name="line.1364"></a>
<span class="sourceLineNo">1365</span>    // Start log cleaner thread<a name="line.1365"></a>
<span class="sourceLineNo">1366</span>    int cleanerInterval =<a name="line.1366"></a>
<span class="sourceLineNo">1367</span>      conf.getInt(HBASE_MASTER_CLEANER_INTERVAL, DEFAULT_HBASE_MASTER_CLEANER_INTERVAL);<a name="line.1367"></a>
<span class="sourceLineNo">1368</span>    this.logCleaner = new LogCleaner(cleanerInterval, this, conf,<a name="line.1368"></a>
<span class="sourceLineNo">1369</span>      getMasterWalManager().getFileSystem(), getMasterWalManager().getOldLogDir(), cleanerPool, params);<a name="line.1369"></a>
<span class="sourceLineNo">1370</span>    getChoreService().scheduleChore(logCleaner);<a name="line.1370"></a>
<span class="sourceLineNo">1371</span><a name="line.1371"></a>
<span class="sourceLineNo">1372</span>    // start the hfile archive cleaner thread<a name="line.1372"></a>
<span class="sourceLineNo">1373</span>    Path archiveDir = HFileArchiveUtil.getArchivePath(conf);<a name="line.1373"></a>
<span class="sourceLineNo">1374</span>    this.hfileCleaner = new HFileCleaner(cleanerInterval, this, conf,<a name="line.1374"></a>
<span class="sourceLineNo">1375</span>      getMasterFileSystem().getFileSystem(), archiveDir, cleanerPool, params);<a name="line.1375"></a>
<span class="sourceLineNo">1376</span>    getChoreService().scheduleChore(hfileCleaner);<a name="line.1376"></a>
<span class="sourceLineNo">1377</span><a name="line.1377"></a>
<span class="sourceLineNo">1378</span>    // Regions Reopen based on very high storeFileRefCount is considered enabled<a name="line.1378"></a>
<span class="sourceLineNo">1379</span>    // only if hbase.regions.recovery.store.file.ref.count has value &gt; 0<a name="line.1379"></a>
<span class="sourceLineNo">1380</span>    final int maxStoreFileRefCount = conf.getInt(<a name="line.1380"></a>
<span class="sourceLineNo">1381</span>      HConstants.STORE_FILE_REF_COUNT_THRESHOLD,<a name="line.1381"></a>
<span class="sourceLineNo">1382</span>      HConstants.DEFAULT_STORE_FILE_REF_COUNT_THRESHOLD);<a name="line.1382"></a>
<span class="sourceLineNo">1383</span>    if (maxStoreFileRefCount &gt; 0) {<a name="line.1383"></a>
<span class="sourceLineNo">1384</span>      this.regionsRecoveryChore = new RegionsRecoveryChore(this, conf, this);<a name="line.1384"></a>
<span class="sourceLineNo">1385</span>      getChoreService().scheduleChore(this.regionsRecoveryChore);<a name="line.1385"></a>
<span class="sourceLineNo">1386</span>    } else {<a name="line.1386"></a>
<span class="sourceLineNo">1387</span>      LOG.info("Reopening regions with very high storeFileRefCount is disabled. " +<a name="line.1387"></a>
<span class="sourceLineNo">1388</span>          "Provide threshold value &gt; 0 for {} to enable it.",<a name="line.1388"></a>
<span class="sourceLineNo">1389</span>        HConstants.STORE_FILE_REF_COUNT_THRESHOLD);<a name="line.1389"></a>
<span class="sourceLineNo">1390</span>    }<a name="line.1390"></a>
<span class="sourceLineNo">1391</span><a name="line.1391"></a>
<span class="sourceLineNo">1392</span>    this.regionsRecoveryConfigManager = new RegionsRecoveryConfigManager(this);<a name="line.1392"></a>
<span class="sourceLineNo">1393</span><a name="line.1393"></a>
<span class="sourceLineNo">1394</span>    replicationBarrierCleaner = new ReplicationBarrierCleaner(conf, this, getConnection(),<a name="line.1394"></a>
<span class="sourceLineNo">1395</span>      replicationPeerManager);<a name="line.1395"></a>
<span class="sourceLineNo">1396</span>    getChoreService().scheduleChore(replicationBarrierCleaner);<a name="line.1396"></a>
<span class="sourceLineNo">1397</span><a name="line.1397"></a>
<span class="sourceLineNo">1398</span>    final boolean isSnapshotChoreEnabled = this.snapshotCleanupTracker<a name="line.1398"></a>
<span class="sourceLineNo">1399</span>        .isSnapshotCleanupEnabled();<a name="line.1399"></a>
<span class="sourceLineNo">1400</span>    this.snapshotCleanerChore = new SnapshotCleanerChore(this, conf, getSnapshotManager());<a name="line.1400"></a>
<span class="sourceLineNo">1401</span>    if (isSnapshotChoreEnabled) {<a name="line.1401"></a>
<span class="sourceLineNo">1402</span>      getChoreService().scheduleChore(this.snapshotCleanerChore);<a name="line.1402"></a>
<span class="sourceLineNo">1403</span>    } else {<a name="line.1403"></a>
<span class="sourceLineNo">1404</span>      if (LOG.isTraceEnabled()) {<a name="line.1404"></a>
<span class="sourceLineNo">1405</span>        LOG.trace("Snapshot Cleaner Chore is disabled. Not starting up the chore..");<a name="line.1405"></a>
<span class="sourceLineNo">1406</span>      }<a name="line.1406"></a>
<span class="sourceLineNo">1407</span>    }<a name="line.1407"></a>
<span class="sourceLineNo">1408</span>    serviceStarted = true;<a name="line.1408"></a>
<span class="sourceLineNo">1409</span>    if (LOG.isTraceEnabled()) {<a name="line.1409"></a>
<span class="sourceLineNo">1410</span>      LOG.trace("Started service threads");<a name="line.1410"></a>
<span class="sourceLineNo">1411</span>    }<a name="line.1411"></a>
<span class="sourceLineNo">1412</span>  }<a name="line.1412"></a>
<span class="sourceLineNo">1413</span><a name="line.1413"></a>
<span class="sourceLineNo">1414</span>  @Override<a name="line.1414"></a>
<span class="sourceLineNo">1415</span>  protected void stopServiceThreads() {<a name="line.1415"></a>
<span class="sourceLineNo">1416</span>    if (masterJettyServer != null) {<a name="line.1416"></a>
<span class="sourceLineNo">1417</span>      LOG.info("Stopping master jetty server");<a name="line.1417"></a>
<span class="sourceLineNo">1418</span>      try {<a name="line.1418"></a>
<span class="sourceLineNo">1419</span>        masterJettyServer.stop();<a name="line.1419"></a>
<span class="sourceLineNo">1420</span>      } catch (Exception e) {<a name="line.1420"></a>
<span class="sourceLineNo">1421</span>        LOG.error("Failed to stop master jetty server", e);<a name="line.1421"></a>
<span class="sourceLineNo">1422</span>      }<a name="line.1422"></a>
<span class="sourceLineNo">1423</span>    }<a name="line.1423"></a>
<span class="sourceLineNo">1424</span>    stopChores();<a name="line.1424"></a>
<span class="sourceLineNo">1425</span><a name="line.1425"></a>
<span class="sourceLineNo">1426</span>    super.stopServiceThreads();<a name="line.1426"></a>
<span class="sourceLineNo">1427</span>    if (cleanerPool != null) {<a name="line.1427"></a>
<span class="sourceLineNo">1428</span>      cleanerPool.shutdownNow();<a name="line.1428"></a>
<span class="sourceLineNo">1429</span>      cleanerPool = null;<a name="line.1429"></a>
<span class="sourceLineNo">1430</span>    }<a name="line.1430"></a>
<span class="sourceLineNo">1431</span><a name="line.1431"></a>
<span class="sourceLineNo">1432</span>    LOG.debug("Stopping service threads");<a name="line.1432"></a>
<span class="sourceLineNo">1433</span><a name="line.1433"></a>
<span class="sourceLineNo">1434</span>    // stop procedure executor prior to other services such as server manager and assignment<a name="line.1434"></a>
<span class="sourceLineNo">1435</span>    // manager, as these services are important for some running procedures. See HBASE-24117 for<a name="line.1435"></a>
<span class="sourceLineNo">1436</span>    // example.<a name="line.1436"></a>
<span class="sourceLineNo">1437</span>    stopProcedureExecutor();<a name="line.1437"></a>
<span class="sourceLineNo">1438</span><a name="line.1438"></a>
<span class="sourceLineNo">1439</span>    if (regionNormalizerManager != null) {<a name="line.1439"></a>
<span class="sourceLineNo">1440</span>      regionNormalizerManager.stop();<a name="line.1440"></a>
<span class="sourceLineNo">1441</span>    }<a name="line.1441"></a>
<span class="sourceLineNo">1442</span>    if (this.quotaManager != null) {<a name="line.1442"></a>
<span class="sourceLineNo">1443</span>      this.quotaManager.stop();<a name="line.1443"></a>
<span class="sourceLineNo">1444</span>    }<a name="line.1444"></a>
<span class="sourceLineNo">1445</span><a name="line.1445"></a>
<span class="sourceLineNo">1446</span>    if (this.activeMasterManager != null) {<a name="line.1446"></a>
<span class="sourceLineNo">1447</span>      this.activeMasterManager.stop();<a name="line.1447"></a>
<span class="sourceLineNo">1448</span>    }<a name="line.1448"></a>
<span class="sourceLineNo">1449</span>    if (this.serverManager != null) {<a name="line.1449"></a>
<span class="sourceLineNo">1450</span>      this.serverManager.stop();<a name="line.1450"></a>
<span class="sourceLineNo">1451</span>    }<a name="line.1451"></a>
<span class="sourceLineNo">1452</span>    if (this.assignmentManager != null) {<a name="line.1452"></a>
<span class="sourceLineNo">1453</span>      this.assignmentManager.stop();<a name="line.1453"></a>
<span class="sourceLineNo">1454</span>    }<a name="line.1454"></a>
<span class="sourceLineNo">1455</span><a name="line.1455"></a>
<span class="sourceLineNo">1456</span>    if (masterRegion != null) {<a name="line.1456"></a>
<span class="sourceLineNo">1457</span>      masterRegion.close(isAborted());<a name="line.1457"></a>
<span class="sourceLineNo">1458</span>    }<a name="line.1458"></a>
<span class="sourceLineNo">1459</span>    if (this.walManager != null) {<a name="line.1459"></a>
<span class="sourceLineNo">1460</span>      this.walManager.stop();<a name="line.1460"></a>
<span class="sourceLineNo">1461</span>    }<a name="line.1461"></a>
<span class="sourceLineNo">1462</span>    if (this.fileSystemManager != null) {<a name="line.1462"></a>
<span class="sourceLineNo">1463</span>      this.fileSystemManager.stop();<a name="line.1463"></a>
<span class="sourceLineNo">1464</span>    }<a name="line.1464"></a>
<span class="sourceLineNo">1465</span>    if (this.mpmHost != null) {<a name="line.1465"></a>
<span class="sourceLineNo">1466</span>      this.mpmHost.stop("server shutting down.");<a name="line.1466"></a>
<span class="sourceLineNo">1467</span>    }<a name="line.1467"></a>
<span class="sourceLineNo">1468</span>    if (this.regionServerTracker != null) {<a name="line.1468"></a>
<span class="sourceLineNo">1469</span>      this.regionServerTracker.stop();<a name="line.1469"></a>
<span class="sourceLineNo">1470</span>    }<a name="line.1470"></a>
<span class="sourceLineNo">1471</span>  }<a name="line.1471"></a>
<span class="sourceLineNo">1472</span><a name="line.1472"></a>
<span class="sourceLineNo">1473</span>  private void createProcedureExecutor() throws IOException {<a name="line.1473"></a>
<span class="sourceLineNo">1474</span>    MasterProcedureEnv procEnv = new MasterProcedureEnv(this);<a name="line.1474"></a>
<span class="sourceLineNo">1475</span>    procedureStore =<a name="line.1475"></a>
<span class="sourceLineNo">1476</span>      new RegionProcedureStore(this, masterRegion, new MasterProcedureEnv.FsUtilsLeaseRecovery(this));<a name="line.1476"></a>
<span class="sourceLineNo">1477</span>    procedureStore.registerListener(new ProcedureStoreListener() {<a name="line.1477"></a>
<span class="sourceLineNo">1478</span><a name="line.1478"></a>
<span class="sourceLineNo">1479</span>      @Override<a name="line.1479"></a>
<span class="sourceLineNo">1480</span>      public void abortProcess() {<a name="line.1480"></a>
<span class="sourceLineNo">1481</span>        abort("The Procedure Store lost the lease", null);<a name="line.1481"></a>
<span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
<span class="sourceLineNo">1483</span>    });<a name="line.1483"></a>
<span class="sourceLineNo">1484</span>    MasterProcedureScheduler procedureScheduler = procEnv.getProcedureScheduler();<a name="line.1484"></a>
<span class="sourceLineNo">1485</span>    procedureExecutor = new ProcedureExecutor&lt;&gt;(conf, procEnv, procedureStore, procedureScheduler);<a name="line.1485"></a>
<span class="sourceLineNo">1486</span>    configurationManager.registerObserver(procEnv);<a name="line.1486"></a>
<span class="sourceLineNo">1487</span><a name="line.1487"></a>
<span class="sourceLineNo">1488</span>    int cpus = Runtime.getRuntime().availableProcessors();<a name="line.1488"></a>
<span class="sourceLineNo">1489</span>    final int numThreads = conf.getInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, Math.max(<a name="line.1489"></a>
<span class="sourceLineNo">1490</span>      (cpus &gt; 0 ? cpus / 4 : 0), MasterProcedureConstants.DEFAULT_MIN_MASTER_PROCEDURE_THREADS));<a name="line.1490"></a>
<span class="sourceLineNo">1491</span>    final boolean abortOnCorruption =<a name="line.1491"></a>
<span class="sourceLineNo">1492</span>      conf.getBoolean(MasterProcedureConstants.EXECUTOR_ABORT_ON_CORRUPTION,<a name="line.1492"></a>
<span class="sourceLineNo">1493</span>        MasterProcedureConstants.DEFAULT_EXECUTOR_ABORT_ON_CORRUPTION);<a name="line.1493"></a>
<span class="sourceLineNo">1494</span>    procedureStore.start(numThreads);<a name="line.1494"></a>
<span class="sourceLineNo">1495</span>    // Just initialize it but do not start the workers, we will start the workers later by calling<a name="line.1495"></a>
<span class="sourceLineNo">1496</span>    // startProcedureExecutor. See the javadoc for finishActiveMasterInitialization for more<a name="line.1496"></a>
<span class="sourceLineNo">1497</span>    // details.<a name="line.1497"></a>
<span class="sourceLineNo">1498</span>    procedureExecutor.init(numThreads, abortOnCorruption);<a name="line.1498"></a>
<span class="sourceLineNo">1499</span>    if (!procEnv.getRemoteDispatcher().start()) {<a name="line.1499"></a>
<span class="sourceLineNo">1500</span>      throw new HBaseIOException("Failed start of remote dispatcher");<a name="line.1500"></a>
<span class="sourceLineNo">1501</span>    }<a name="line.1501"></a>
<span class="sourceLineNo">1502</span>  }<a name="line.1502"></a>
<span class="sourceLineNo">1503</span><a name="line.1503"></a>
<span class="sourceLineNo">1504</span>  private void startProcedureExecutor() throws IOException {<a name="line.1504"></a>
<span class="sourceLineNo">1505</span>    procedureExecutor.startWorkers();<a name="line.1505"></a>
<span class="sourceLineNo">1506</span>  }<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>   * Turn on/off Snapshot Cleanup Chore<a name="line.1509"></a>
<span class="sourceLineNo">1510</span>   *<a name="line.1510"></a>
<span class="sourceLineNo">1511</span>   * @param on indicates whether Snapshot Cleanup Chore is to be run<a name="line.1511"></a>
<span class="sourceLineNo">1512</span>   */<a name="line.1512"></a>
<span class="sourceLineNo">1513</span>  void switchSnapshotCleanup(final boolean on, final boolean synchronous) {<a name="line.1513"></a>
<span class="sourceLineNo">1514</span>    if (synchronous) {<a name="line.1514"></a>
<span class="sourceLineNo">1515</span>      synchronized (this.snapshotCleanerChore) {<a name="line.1515"></a>
<span class="sourceLineNo">1516</span>        switchSnapshotCleanup(on);<a name="line.1516"></a>
<span class="sourceLineNo">1517</span>      }<a name="line.1517"></a>
<span class="sourceLineNo">1518</span>    } else {<a name="line.1518"></a>
<span class="sourceLineNo">1519</span>      switchSnapshotCleanup(on);<a name="line.1519"></a>
<span class="sourceLineNo">1520</span>    }<a name="line.1520"></a>
<span class="sourceLineNo">1521</span>  }<a name="line.1521"></a>
<span class="sourceLineNo">1522</span><a name="line.1522"></a>
<span class="sourceLineNo">1523</span>  private void switchSnapshotCleanup(final boolean on) {<a name="line.1523"></a>
<span class="sourceLineNo">1524</span>    try {<a name="line.1524"></a>
<span class="sourceLineNo">1525</span>      snapshotCleanupTracker.setSnapshotCleanupEnabled(on);<a name="line.1525"></a>
<span class="sourceLineNo">1526</span>      if (on) {<a name="line.1526"></a>
<span class="sourceLineNo">1527</span>        getChoreService().scheduleChore(this.snapshotCleanerChore);<a name="line.1527"></a>
<span class="sourceLineNo">1528</span>      } else {<a name="line.1528"></a>
<span class="sourceLineNo">1529</span>        this.snapshotCleanerChore.cancel();<a name="line.1529"></a>
<span class="sourceLineNo">1530</span>      }<a name="line.1530"></a>
<span class="sourceLineNo">1531</span>    } catch (KeeperException e) {<a name="line.1531"></a>
<span class="sourceLineNo">1532</span>      LOG.error("Error updating snapshot cleanup mode to {}", on, e);<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><a name="line.1535"></a>
<span class="sourceLineNo">1536</span><a name="line.1536"></a>
<span class="sourceLineNo">1537</span>  private void stopProcedureExecutor() {<a name="line.1537"></a>
<span class="sourceLineNo">1538</span>    if (procedureExecutor != null) {<a name="line.1538"></a>
<span class="sourceLineNo">1539</span>      configurationManager.deregisterObserver(procedureExecutor.getEnvironment());<a name="line.1539"></a>
<span class="sourceLineNo">1540</span>      procedureExecutor.getEnvironment().getRemoteDispatcher().stop();<a name="line.1540"></a>
<span class="sourceLineNo">1541</span>      procedureExecutor.stop();<a name="line.1541"></a>
<span class="sourceLineNo">1542</span>      procedureExecutor.join();<a name="line.1542"></a>
<span class="sourceLineNo">1543</span>      procedureExecutor = 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>    if (procedureStore != null) {<a name="line.1546"></a>
<span class="sourceLineNo">1547</span>      procedureStore.stop(isAborted());<a name="line.1547"></a>
<span class="sourceLineNo">1548</span>      procedureStore = null;<a name="line.1548"></a>
<span class="sourceLineNo">1549</span>    }<a name="line.1549"></a>
<span class="sourceLineNo">1550</span>  }<a name="line.1550"></a>
<span class="sourceLineNo">1551</span><a name="line.1551"></a>
<span class="sourceLineNo">1552</span>  private void stopChores() {<a name="line.1552"></a>
<span class="sourceLineNo">1553</span>    if (getChoreService() != null) {<a name="line.1553"></a>
<span class="sourceLineNo">1554</span>      shutdownChore(mobFileCleanerChore);<a name="line.1554"></a>
<span class="sourceLineNo">1555</span>      shutdownChore(mobFileCompactionChore);<a name="line.1555"></a>
<span class="sourceLineNo">1556</span>      shutdownChore(balancerChore);<a name="line.1556"></a>
<span class="sourceLineNo">1557</span>      if (regionNormalizerManager != null) {<a name="line.1557"></a>
<span class="sourceLineNo">1558</span>        shutdownChore(regionNormalizerManager.getRegionNormalizerChore());<a name="line.1558"></a>
<span class="sourceLineNo">1559</span>      }<a name="line.1559"></a>
<span class="sourceLineNo">1560</span>      shutdownChore(clusterStatusChore);<a name="line.1560"></a>
<span class="sourceLineNo">1561</span>      shutdownChore(catalogJanitorChore);<a name="line.1561"></a>
<span class="sourceLineNo">1562</span>      shutdownChore(clusterStatusPublisherChore);<a name="line.1562"></a>
<span class="sourceLineNo">1563</span>      shutdownChore(snapshotQuotaChore);<a name="line.1563"></a>
<span class="sourceLineNo">1564</span>      shutdownChore(logCleaner);<a name="line.1564"></a>
<span class="sourceLineNo">1565</span>      shutdownChore(hfileCleaner);<a name="line.1565"></a>
<span class="sourceLineNo">1566</span>      shutdownChore(replicationBarrierCleaner);<a name="line.1566"></a>
<span class="sourceLineNo">1567</span>      shutdownChore(snapshotCleanerChore);<a name="line.1567"></a>
<span class="sourceLineNo">1568</span>      shutdownChore(hbckChore);<a name="line.1568"></a>
<span class="sourceLineNo">1569</span>      shutdownChore(regionsRecoveryChore);<a name="line.1569"></a>
<span class="sourceLineNo">1570</span>    }<a name="line.1570"></a>
<span class="sourceLineNo">1571</span>  }<a name="line.1571"></a>
<span class="sourceLineNo">1572</span><a name="line.1572"></a>
<span class="sourceLineNo">1573</span>  /**<a name="line.1573"></a>
<span class="sourceLineNo">1574</span>   * @return Get remote side's InetAddress<a name="line.1574"></a>
<span class="sourceLineNo">1575</span>   */<a name="line.1575"></a>
<span class="sourceLineNo">1576</span>  InetAddress getRemoteInetAddress(final int port,<a name="line.1576"></a>
<span class="sourceLineNo">1577</span>      final long serverStartCode) throws UnknownHostException {<a name="line.1577"></a>
<span class="sourceLineNo">1578</span>    // Do it out here in its own little method so can fake an address when<a name="line.1578"></a>
<span class="sourceLineNo">1579</span>    // mocking up in tests.<a name="line.1579"></a>
<span class="sourceLineNo">1580</span>    InetAddress ia = RpcServer.getRemoteIp();<a name="line.1580"></a>
<span class="sourceLineNo">1581</span><a name="line.1581"></a>
<span class="sourceLineNo">1582</span>    // The call could be from the local regionserver,<a name="line.1582"></a>
<span class="sourceLineNo">1583</span>    // in which case, there is no remote address.<a name="line.1583"></a>
<span class="sourceLineNo">1584</span>    if (ia == null &amp;&amp; serverStartCode == startcode) {<a name="line.1584"></a>
<span class="sourceLineNo">1585</span>      InetSocketAddress isa = rpcServices.getSocketAddress();<a name="line.1585"></a>
<span class="sourceLineNo">1586</span>      if (isa != null &amp;&amp; isa.getPort() == port) {<a name="line.1586"></a>
<span class="sourceLineNo">1587</span>        ia = isa.getAddress();<a name="line.1587"></a>
<span class="sourceLineNo">1588</span>      }<a name="line.1588"></a>
<span class="sourceLineNo">1589</span>    }<a name="line.1589"></a>
<span class="sourceLineNo">1590</span>    return ia;<a name="line.1590"></a>
<span class="sourceLineNo">1591</span>  }<a name="line.1591"></a>
<span class="sourceLineNo">1592</span><a name="line.1592"></a>
<span class="sourceLineNo">1593</span>  /**<a name="line.1593"></a>
<span class="sourceLineNo">1594</span>   * @return Maximum time we should run balancer for<a name="line.1594"></a>
<span class="sourceLineNo">1595</span>   */<a name="line.1595"></a>
<span class="sourceLineNo">1596</span>  private int getMaxBalancingTime() {<a name="line.1596"></a>
<span class="sourceLineNo">1597</span>    // if max balancing time isn't set, defaulting it to period time<a name="line.1597"></a>
<span class="sourceLineNo">1598</span>    int maxBalancingTime = getConfiguration().getInt(HConstants.HBASE_BALANCER_MAX_BALANCING,<a name="line.1598"></a>
<span class="sourceLineNo">1599</span>      getConfiguration()<a name="line.1599"></a>
<span class="sourceLineNo">1600</span>        .getInt(HConstants.HBASE_BALANCER_PERIOD, HConstants.DEFAULT_HBASE_BALANCER_PERIOD));<a name="line.1600"></a>
<span class="sourceLineNo">1601</span>    return maxBalancingTime;<a name="line.1601"></a>
<span class="sourceLineNo">1602</span>  }<a name="line.1602"></a>
<span class="sourceLineNo">1603</span><a name="line.1603"></a>
<span class="sourceLineNo">1604</span>  /**<a name="line.1604"></a>
<span class="sourceLineNo">1605</span>   * @return Maximum number of regions in transition<a name="line.1605"></a>
<span class="sourceLineNo">1606</span>   */<a name="line.1606"></a>
<span class="sourceLineNo">1607</span>  private int getMaxRegionsInTransition() {<a name="line.1607"></a>
<span class="sourceLineNo">1608</span>    int numRegions = this.assignmentManager.getRegionStates().getRegionAssignments().size();<a name="line.1608"></a>
<span class="sourceLineNo">1609</span>    return Math.max((int) Math.floor(numRegions * this.maxRitPercent), 1);<a name="line.1609"></a>
<span class="sourceLineNo">1610</span>  }<a name="line.1610"></a>
<span class="sourceLineNo">1611</span><a name="line.1611"></a>
<span class="sourceLineNo">1612</span>  /**<a name="line.1612"></a>
<span class="sourceLineNo">1613</span>   * It first sleep to the next balance plan start time. Meanwhile, throttling by the max<a name="line.1613"></a>
<span class="sourceLineNo">1614</span>   * number regions in transition to protect availability.<a name="line.1614"></a>
<span class="sourceLineNo">1615</span>   * @param nextBalanceStartTime The next balance plan start time<a name="line.1615"></a>
<span class="sourceLineNo">1616</span>   * @param maxRegionsInTransition max number of regions in transition<a name="line.1616"></a>
<span class="sourceLineNo">1617</span>   * @param cutoffTime when to exit balancer<a name="line.1617"></a>
<span class="sourceLineNo">1618</span>   */<a name="line.1618"></a>
<span class="sourceLineNo">1619</span>  private void balanceThrottling(long nextBalanceStartTime, int maxRegionsInTransition,<a name="line.1619"></a>
<span class="sourceLineNo">1620</span>      long cutoffTime) {<a name="line.1620"></a>
<span class="sourceLineNo">1621</span>    boolean interrupted = false;<a name="line.1621"></a>
<span class="sourceLineNo">1622</span><a name="line.1622"></a>
<span class="sourceLineNo">1623</span>    // Sleep to next balance plan start time<a name="line.1623"></a>
<span class="sourceLineNo">1624</span>    // But if there are zero regions in transition, it can skip sleep to speed up.<a name="line.1624"></a>
<span class="sourceLineNo">1625</span>    while (!interrupted &amp;&amp; System.currentTimeMillis() &lt; nextBalanceStartTime<a name="line.1625"></a>
<span class="sourceLineNo">1626</span>        &amp;&amp; this.assignmentManager.getRegionStates().hasRegionsInTransition()) {<a name="line.1626"></a>
<span class="sourceLineNo">1627</span>      try {<a name="line.1627"></a>
<span class="sourceLineNo">1628</span>        Thread.sleep(100);<a name="line.1628"></a>
<span class="sourceLineNo">1629</span>      } catch (InterruptedException ie) {<a name="line.1629"></a>
<span class="sourceLineNo">1630</span>        interrupted = true;<a name="line.1630"></a>
<span class="sourceLineNo">1631</span>      }<a name="line.1631"></a>
<span class="sourceLineNo">1632</span>    }<a name="line.1632"></a>
<span class="sourceLineNo">1633</span><a name="line.1633"></a>
<span class="sourceLineNo">1634</span>    // Throttling by max number regions in transition<a name="line.1634"></a>
<span class="sourceLineNo">1635</span>    while (!interrupted<a name="line.1635"></a>
<span class="sourceLineNo">1636</span>        &amp;&amp; maxRegionsInTransition &gt; 0<a name="line.1636"></a>
<span class="sourceLineNo">1637</span>        &amp;&amp; this.assignmentManager.getRegionStates().getRegionsInTransitionCount()<a name="line.1637"></a>
<span class="sourceLineNo">1638</span>        &gt;= maxRegionsInTransition &amp;&amp; System.currentTimeMillis() &lt;= cutoffTime) {<a name="line.1638"></a>
<span class="sourceLineNo">1639</span>      try {<a name="line.1639"></a>
<span class="sourceLineNo">1640</span>        // sleep if the number of regions in transition exceeds the limit<a name="line.1640"></a>
<span class="sourceLineNo">1641</span>        Thread.sleep(100);<a name="line.1641"></a>
<span class="sourceLineNo">1642</span>      } catch (InterruptedException ie) {<a name="line.1642"></a>
<span class="sourceLineNo">1643</span>        interrupted = true;<a name="line.1643"></a>
<span class="sourceLineNo">1644</span>      }<a name="line.1644"></a>
<span class="sourceLineNo">1645</span>    }<a name="line.1645"></a>
<span class="sourceLineNo">1646</span><a name="line.1646"></a>
<span class="sourceLineNo">1647</span>    if (interrupted) Thread.currentThread().interrupt();<a name="line.1647"></a>
<span class="sourceLineNo">1648</span>  }<a name="line.1648"></a>
<span class="sourceLineNo">1649</span><a name="line.1649"></a>
<span class="sourceLineNo">1650</span>  public boolean balance() throws IOException {<a name="line.1650"></a>
<span class="sourceLineNo">1651</span>    return balance(false);<a name="line.1651"></a>
<span class="sourceLineNo">1652</span>  }<a name="line.1652"></a>
<span class="sourceLineNo">1653</span><a name="line.1653"></a>
<span class="sourceLineNo">1654</span>  /**<a name="line.1654"></a>
<span class="sourceLineNo">1655</span>   * Checks master state before initiating action over region topology.<a name="line.1655"></a>
<span class="sourceLineNo">1656</span>   * @param action the name of the action under consideration, for logging.<a name="line.1656"></a>
<span class="sourceLineNo">1657</span>   * @return {@code true} when the caller should exit early, {@code false} otherwise.<a name="line.1657"></a>
<span class="sourceLineNo">1658</span>   */<a name="line.1658"></a>
<span class="sourceLineNo">1659</span>  @Override<a name="line.1659"></a>
<span class="sourceLineNo">1660</span>  public boolean skipRegionManagementAction(final String action) {<a name="line.1660"></a>
<span class="sourceLineNo">1661</span>    // Note: this method could be `default` on MasterServices if but for logging.<a name="line.1661"></a>
<span class="sourceLineNo">1662</span>    if (!isInitialized()) {<a name="line.1662"></a>
<span class="sourceLineNo">1663</span>      LOG.debug("Master has not been initialized, don't run {}.", action);<a name="line.1663"></a>
<span class="sourceLineNo">1664</span>      return true;<a name="line.1664"></a>
<span class="sourceLineNo">1665</span>    }<a name="line.1665"></a>
<span class="sourceLineNo">1666</span>    if (this.getServerManager().isClusterShutdown()) {<a name="line.1666"></a>
<span class="sourceLineNo">1667</span>      LOG.info("Cluster is shutting down, don't run {}.", action);<a name="line.1667"></a>
<span class="sourceLineNo">1668</span>      return true;<a name="line.1668"></a>
<span class="sourceLineNo">1669</span>    }<a name="line.1669"></a>
<span class="sourceLineNo">1670</span>    if (isInMaintenanceMode()) {<a name="line.1670"></a>
<span class="sourceLineNo">1671</span>      LOG.info("Master is in maintenance mode, don't run {}.", action);<a name="line.1671"></a>
<span class="sourceLineNo">1672</span>      return true;<a name="line.1672"></a>
<span class="sourceLineNo">1673</span>    }<a name="line.1673"></a>
<span class="sourceLineNo">1674</span>    return false;<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>  public boolean balance(boolean force) throws IOException {<a name="line.1677"></a>
<span class="sourceLineNo">1678</span>    if (loadBalancerTracker == null || !loadBalancerTracker.isBalancerOn()) {<a name="line.1678"></a>
<span class="sourceLineNo">1679</span>      return false;<a name="line.1679"></a>
<span class="sourceLineNo">1680</span>    }<a name="line.1680"></a>
<span class="sourceLineNo">1681</span>    if (skipRegionManagementAction("balancer")) {<a name="line.1681"></a>
<span class="sourceLineNo">1682</span>      return 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>    synchronized (this.balancer) {<a name="line.1685"></a>
<span class="sourceLineNo">1686</span>        // Only allow one balance run at at time.<a name="line.1686"></a>
<span class="sourceLineNo">1687</span>      if (this.assignmentManager.hasRegionsInTransition()) {<a name="line.1687"></a>
<span class="sourceLineNo">1688</span>        List&lt;RegionStateNode&gt; regionsInTransition = assignmentManager.getRegionsInTransition();<a name="line.1688"></a>
<span class="sourceLineNo">1689</span>        // if hbase:meta region is in transition, result of assignment cannot be recorded<a name="line.1689"></a>
<span class="sourceLineNo">1690</span>        // ignore the force flag in that case<a name="line.1690"></a>
<span class="sourceLineNo">1691</span>        boolean metaInTransition = assignmentManager.isMetaRegionInTransition();<a name="line.1691"></a>
<span class="sourceLineNo">1692</span>        String prefix = force &amp;&amp; !metaInTransition ? "R" : "Not r";<a name="line.1692"></a>
<span class="sourceLineNo">1693</span>        List&lt;RegionStateNode&gt; toPrint = regionsInTransition;<a name="line.1693"></a>
<span class="sourceLineNo">1694</span>        int max = 5;<a name="line.1694"></a>
<span class="sourceLineNo">1695</span>        boolean truncated = false;<a name="line.1695"></a>
<span class="sourceLineNo">1696</span>        if (regionsInTransition.size() &gt; max) {<a name="line.1696"></a>
<span class="sourceLineNo">1697</span>          toPrint = regionsInTransition.subList(0, max);<a name="line.1697"></a>
<span class="sourceLineNo">1698</span>          truncated = true;<a name="line.1698"></a>
<span class="sourceLineNo">1699</span>        }<a name="line.1699"></a>
<span class="sourceLineNo">1700</span>        LOG.info(prefix + " not running balancer because " + regionsInTransition.size() +<a name="line.1700"></a>
<span class="sourceLineNo">1701</span>          " region(s) in transition: " + toPrint + (truncated? "(truncated list)": ""));<a name="line.1701"></a>
<span class="sourceLineNo">1702</span>        if (!force || metaInTransition) return false;<a name="line.1702"></a>
<span class="sourceLineNo">1703</span>      }<a name="line.1703"></a>
<span class="sourceLineNo">1704</span>      if (this.serverManager.areDeadServersInProgress()) {<a name="line.1704"></a>
<span class="sourceLineNo">1705</span>        LOG.info("Not running balancer because processing dead regionserver(s): " +<a name="line.1705"></a>
<span class="sourceLineNo">1706</span>          this.serverManager.getDeadServers());<a name="line.1706"></a>
<span class="sourceLineNo">1707</span>        return false;<a name="line.1707"></a>
<span class="sourceLineNo">1708</span>      }<a name="line.1708"></a>
<span class="sourceLineNo">1709</span><a name="line.1709"></a>
<span class="sourceLineNo">1710</span>      if (this.cpHost != null) {<a name="line.1710"></a>
<span class="sourceLineNo">1711</span>        try {<a name="line.1711"></a>
<span class="sourceLineNo">1712</span>          if (this.cpHost.preBalance()) {<a name="line.1712"></a>
<span class="sourceLineNo">1713</span>            LOG.debug("Coprocessor bypassing balancer request");<a name="line.1713"></a>
<span class="sourceLineNo">1714</span>            return false;<a name="line.1714"></a>
<span class="sourceLineNo">1715</span>          }<a name="line.1715"></a>
<span class="sourceLineNo">1716</span>        } catch (IOException ioe) {<a name="line.1716"></a>
<span class="sourceLineNo">1717</span>          LOG.error("Error invoking master coprocessor preBalance()", ioe);<a name="line.1717"></a>
<span class="sourceLineNo">1718</span>          return false;<a name="line.1718"></a>
<span class="sourceLineNo">1719</span>        }<a name="line.1719"></a>
<span class="sourceLineNo">1720</span>      }<a name="line.1720"></a>
<span class="sourceLineNo">1721</span><a name="line.1721"></a>
<span class="sourceLineNo">1722</span>      Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; assignments =<a name="line.1722"></a>
<span class="sourceLineNo">1723</span>        this.assignmentManager.getRegionStates()<a name="line.1723"></a>
<span class="sourceLineNo">1724</span>          .getAssignmentsForBalancer(tableStateManager, this.serverManager.getOnlineServersList());<a name="line.1724"></a>
<span class="sourceLineNo">1725</span>      for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; serverMap : assignments.values()) {<a name="line.1725"></a>
<span class="sourceLineNo">1726</span>        serverMap.keySet().removeAll(this.serverManager.getDrainingServersList());<a name="line.1726"></a>
<span class="sourceLineNo">1727</span>      }<a name="line.1727"></a>
<span class="sourceLineNo">1728</span><a name="line.1728"></a>
<span class="sourceLineNo">1729</span>      //Give the balancer the current cluster state.<a name="line.1729"></a>
<span class="sourceLineNo">1730</span>      this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1730"></a>
<span class="sourceLineNo">1731</span><a name="line.1731"></a>
<span class="sourceLineNo">1732</span>      List&lt;RegionPlan&gt; plans = this.balancer.balanceCluster(assignments);<a name="line.1732"></a>
<span class="sourceLineNo">1733</span><a name="line.1733"></a>
<span class="sourceLineNo">1734</span>      if (skipRegionManagementAction("balancer")) {<a name="line.1734"></a>
<span class="sourceLineNo">1735</span>        // make one last check that the cluster isn't shutting down before proceeding.<a name="line.1735"></a>
<span class="sourceLineNo">1736</span>        return false;<a name="line.1736"></a>
<span class="sourceLineNo">1737</span>      }<a name="line.1737"></a>
<span class="sourceLineNo">1738</span><a name="line.1738"></a>
<span class="sourceLineNo">1739</span>      List&lt;RegionPlan&gt; sucRPs = executeRegionPlansWithThrottling(plans);<a name="line.1739"></a>
<span class="sourceLineNo">1740</span><a name="line.1740"></a>
<span class="sourceLineNo">1741</span>      if (this.cpHost != null) {<a name="line.1741"></a>
<span class="sourceLineNo">1742</span>        try {<a name="line.1742"></a>
<span class="sourceLineNo">1743</span>          this.cpHost.postBalance(sucRPs);<a name="line.1743"></a>
<span class="sourceLineNo">1744</span>        } catch (IOException ioe) {<a name="line.1744"></a>
<span class="sourceLineNo">1745</span>          // balancing already succeeded so don't change the result<a name="line.1745"></a>
<span class="sourceLineNo">1746</span>          LOG.error("Error invoking master coprocessor postBalance()", ioe);<a name="line.1746"></a>
<span class="sourceLineNo">1747</span>        }<a name="line.1747"></a>
<span class="sourceLineNo">1748</span>      }<a name="line.1748"></a>
<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
<span class="sourceLineNo">1750</span>    // If LoadBalancer did not generate any plans, it means the cluster is already balanced.<a name="line.1750"></a>
<span class="sourceLineNo">1751</span>    // Return true indicating a success.<a name="line.1751"></a>
<span class="sourceLineNo">1752</span>    return true;<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>  /**<a name="line.1755"></a>
<span class="sourceLineNo">1756</span>   * Execute region plans with throttling<a name="line.1756"></a>
<span class="sourceLineNo">1757</span>   * @param plans to execute<a name="line.1757"></a>
<span class="sourceLineNo">1758</span>   * @return succeeded plans<a name="line.1758"></a>
<span class="sourceLineNo">1759</span>   */<a name="line.1759"></a>
<span class="sourceLineNo">1760</span>  public List&lt;RegionPlan&gt; executeRegionPlansWithThrottling(List&lt;RegionPlan&gt; plans) {<a name="line.1760"></a>
<span class="sourceLineNo">1761</span>    List&lt;RegionPlan&gt; successRegionPlans = new ArrayList&lt;&gt;();<a name="line.1761"></a>
<span class="sourceLineNo">1762</span>    int maxRegionsInTransition = getMaxRegionsInTransition();<a name="line.1762"></a>
<span class="sourceLineNo">1763</span>    long balanceStartTime = System.currentTimeMillis();<a name="line.1763"></a>
<span class="sourceLineNo">1764</span>    long cutoffTime = balanceStartTime + this.maxBalancingTime;<a name="line.1764"></a>
<span class="sourceLineNo">1765</span>    int rpCount = 0;  // number of RegionPlans balanced so far<a name="line.1765"></a>
<span class="sourceLineNo">1766</span>    if (plans != null &amp;&amp; !plans.isEmpty()) {<a name="line.1766"></a>
<span class="sourceLineNo">1767</span>      int balanceInterval = this.maxBalancingTime / plans.size();<a name="line.1767"></a>
<span class="sourceLineNo">1768</span>      LOG.info("Balancer plans size is " + plans.size() + ", the balance interval is "<a name="line.1768"></a>
<span class="sourceLineNo">1769</span>          + balanceInterval + " ms, and the max number regions in transition is "<a name="line.1769"></a>
<span class="sourceLineNo">1770</span>          + maxRegionsInTransition);<a name="line.1770"></a>
<span class="sourceLineNo">1771</span><a name="line.1771"></a>
<span class="sourceLineNo">1772</span>      for (RegionPlan plan: plans) {<a name="line.1772"></a>
<span class="sourceLineNo">1773</span>        LOG.info("balance " + plan);<a name="line.1773"></a>
<span class="sourceLineNo">1774</span>        //TODO: bulk assign<a name="line.1774"></a>
<span class="sourceLineNo">1775</span>        try {<a name="line.1775"></a>
<span class="sourceLineNo">1776</span>          this.assignmentManager.balance(plan);<a name="line.1776"></a>
<span class="sourceLineNo">1777</span>        } catch (HBaseIOException hioe) {<a name="line.1777"></a>
<span class="sourceLineNo">1778</span>          //should ignore failed plans here, avoiding the whole balance plans be aborted<a name="line.1778"></a>
<span class="sourceLineNo">1779</span>          //later calls of balance() can fetch up the failed and skipped plans<a name="line.1779"></a>
<span class="sourceLineNo">1780</span>          LOG.warn("Failed balance plan {}, skipping...", plan, hioe);<a name="line.1780"></a>
<span class="sourceLineNo">1781</span>        }<a name="line.1781"></a>
<span class="sourceLineNo">1782</span>        //rpCount records balance plans processed, does not care if a plan succeeds<a name="line.1782"></a>
<span class="sourceLineNo">1783</span>        rpCount++;<a name="line.1783"></a>
<span class="sourceLineNo">1784</span>        successRegionPlans.add(plan);<a name="line.1784"></a>
<span class="sourceLineNo">1785</span><a name="line.1785"></a>
<span class="sourceLineNo">1786</span>        if (this.maxBalancingTime &gt; 0) {<a name="line.1786"></a>
<span class="sourceLineNo">1787</span>          balanceThrottling(balanceStartTime + rpCount * balanceInterval, maxRegionsInTransition,<a name="line.1787"></a>
<span class="sourceLineNo">1788</span>            cutoffTime);<a name="line.1788"></a>
<span class="sourceLineNo">1789</span>        }<a name="line.1789"></a>
<span class="sourceLineNo">1790</span><a name="line.1790"></a>
<span class="sourceLineNo">1791</span>        // if performing next balance exceeds cutoff time, exit the loop<a name="line.1791"></a>
<span class="sourceLineNo">1792</span>        if (this.maxBalancingTime &gt; 0 &amp;&amp; rpCount &lt; plans.size()<a name="line.1792"></a>
<span class="sourceLineNo">1793</span>          &amp;&amp; System.currentTimeMillis() &gt; cutoffTime) {<a name="line.1793"></a>
<span class="sourceLineNo">1794</span>          // TODO: After balance, there should not be a cutoff time (keeping it as<a name="line.1794"></a>
<span class="sourceLineNo">1795</span>          // a security net for now)<a name="line.1795"></a>
<span class="sourceLineNo">1796</span>          LOG.debug("No more balancing till next balance run; maxBalanceTime="<a name="line.1796"></a>
<span class="sourceLineNo">1797</span>              + this.maxBalancingTime);<a name="line.1797"></a>
<span class="sourceLineNo">1798</span>          break;<a name="line.1798"></a>
<span class="sourceLineNo">1799</span>        }<a name="line.1799"></a>
<span class="sourceLineNo">1800</span>      }<a name="line.1800"></a>
<span class="sourceLineNo">1801</span>    }<a name="line.1801"></a>
<span class="sourceLineNo">1802</span>    return successRegionPlans;<a name="line.1802"></a>
<span class="sourceLineNo">1803</span>  }<a name="line.1803"></a>
<span class="sourceLineNo">1804</span><a name="line.1804"></a>
<span class="sourceLineNo">1805</span>  @Override<a name="line.1805"></a>
<span class="sourceLineNo">1806</span>  public RegionNormalizerManager getRegionNormalizerManager() {<a name="line.1806"></a>
<span class="sourceLineNo">1807</span>    return regionNormalizerManager;<a name="line.1807"></a>
<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
<span class="sourceLineNo">1809</span><a name="line.1809"></a>
<span class="sourceLineNo">1810</span>  @Override<a name="line.1810"></a>
<span class="sourceLineNo">1811</span>  public boolean normalizeRegions(<a name="line.1811"></a>
<span class="sourceLineNo">1812</span>    final NormalizeTableFilterParams ntfp,<a name="line.1812"></a>
<span class="sourceLineNo">1813</span>    final boolean isHighPriority<a name="line.1813"></a>
<span class="sourceLineNo">1814</span>  ) throws IOException {<a name="line.1814"></a>
<span class="sourceLineNo">1815</span>    if (regionNormalizerManager == null || !regionNormalizerManager.isNormalizerOn()) {<a name="line.1815"></a>
<span class="sourceLineNo">1816</span>      LOG.debug("Region normalization is disabled, don't run region normalizer.");<a name="line.1816"></a>
<span class="sourceLineNo">1817</span>      return false;<a name="line.1817"></a>
<span class="sourceLineNo">1818</span>    }<a name="line.1818"></a>
<span class="sourceLineNo">1819</span>    if (skipRegionManagementAction("region normalizer")) {<a name="line.1819"></a>
<span class="sourceLineNo">1820</span>      return false;<a name="line.1820"></a>
<span class="sourceLineNo">1821</span>    }<a name="line.1821"></a>
<span class="sourceLineNo">1822</span>    if (assignmentManager.hasRegionsInTransition()) {<a name="line.1822"></a>
<span class="sourceLineNo">1823</span>      return false;<a name="line.1823"></a>
<span class="sourceLineNo">1824</span>    }<a name="line.1824"></a>
<span class="sourceLineNo">1825</span><a name="line.1825"></a>
<span class="sourceLineNo">1826</span>    final Set&lt;TableName&gt; matchingTables = getTableDescriptors(new LinkedList&lt;&gt;(),<a name="line.1826"></a>
<span class="sourceLineNo">1827</span>      ntfp.getNamespace(), ntfp.getRegex(), ntfp.getTableNames(), false)<a name="line.1827"></a>
<span class="sourceLineNo">1828</span>      .stream()<a name="line.1828"></a>
<span class="sourceLineNo">1829</span>      .map(TableDescriptor::getTableName)<a name="line.1829"></a>
<span class="sourceLineNo">1830</span>      .collect(Collectors.toSet());<a name="line.1830"></a>
<span class="sourceLineNo">1831</span>    final Set&lt;TableName&gt; allEnabledTables =<a name="line.1831"></a>
<span class="sourceLineNo">1832</span>      tableStateManager.getTablesInStates(TableState.State.ENABLED);<a name="line.1832"></a>
<span class="sourceLineNo">1833</span>    final List&lt;TableName&gt; targetTables =<a name="line.1833"></a>
<span class="sourceLineNo">1834</span>      new ArrayList&lt;&gt;(Sets.intersection(matchingTables, allEnabledTables));<a name="line.1834"></a>
<span class="sourceLineNo">1835</span>    Collections.shuffle(targetTables);<a name="line.1835"></a>
<span class="sourceLineNo">1836</span>    return regionNormalizerManager.normalizeRegions(targetTables, isHighPriority);<a name="line.1836"></a>
<span class="sourceLineNo">1837</span>  }<a name="line.1837"></a>
<span class="sourceLineNo">1838</span><a name="line.1838"></a>
<span class="sourceLineNo">1839</span>  /**<a name="line.1839"></a>
<span class="sourceLineNo">1840</span>   * @return Client info for use as prefix on an audit log string; who did an action<a name="line.1840"></a>
<span class="sourceLineNo">1841</span>   */<a name="line.1841"></a>
<span class="sourceLineNo">1842</span>  @Override<a name="line.1842"></a>
<span class="sourceLineNo">1843</span>  public String getClientIdAuditPrefix() {<a name="line.1843"></a>
<span class="sourceLineNo">1844</span>    return "Client=" + RpcServer.getRequestUserName().orElse(null)<a name="line.1844"></a>
<span class="sourceLineNo">1845</span>        + "/" + RpcServer.getRemoteAddress().orElse(null);<a name="line.1845"></a>
<span class="sourceLineNo">1846</span>  }<a name="line.1846"></a>
<span class="sourceLineNo">1847</span><a name="line.1847"></a>
<span class="sourceLineNo">1848</span>  /**<a name="line.1848"></a>
<span class="sourceLineNo">1849</span>   * Switch for the background CatalogJanitor thread.<a name="line.1849"></a>
<span class="sourceLineNo">1850</span>   * Used for testing.  The thread will continue to run.  It will just be a noop<a name="line.1850"></a>
<span class="sourceLineNo">1851</span>   * if disabled.<a name="line.1851"></a>
<span class="sourceLineNo">1852</span>   * @param b If false, the catalog janitor won't do anything.<a name="line.1852"></a>
<span class="sourceLineNo">1853</span>   */<a name="line.1853"></a>
<span class="sourceLineNo">1854</span>  public void setCatalogJanitorEnabled(final boolean b) {<a name="line.1854"></a>
<span class="sourceLineNo">1855</span>    this.catalogJanitorChore.setEnabled(b);<a name="line.1855"></a>
<span class="sourceLineNo">1856</span>  }<a name="line.1856"></a>
<span class="sourceLineNo">1857</span><a name="line.1857"></a>
<span class="sourceLineNo">1858</span>  @Override<a name="line.1858"></a>
<span class="sourceLineNo">1859</span>  public long mergeRegions(<a name="line.1859"></a>
<span class="sourceLineNo">1860</span>      final RegionInfo[] regionsToMerge,<a name="line.1860"></a>
<span class="sourceLineNo">1861</span>      final boolean forcible,<a name="line.1861"></a>
<span class="sourceLineNo">1862</span>      final long ng,<a name="line.1862"></a>
<span class="sourceLineNo">1863</span>      final long nonce) throws IOException {<a name="line.1863"></a>
<span class="sourceLineNo">1864</span>    checkInitialized();<a name="line.1864"></a>
<span class="sourceLineNo">1865</span><a name="line.1865"></a>
<span class="sourceLineNo">1866</span>    if (!isSplitOrMergeEnabled(MasterSwitchType.MERGE)) {<a name="line.1866"></a>
<span class="sourceLineNo">1867</span>      String regionsStr = Arrays.deepToString(regionsToMerge);<a name="line.1867"></a>
<span class="sourceLineNo">1868</span>      LOG.warn("Merge switch is off! skip merge of " + regionsStr);<a name="line.1868"></a>
<span class="sourceLineNo">1869</span>      throw new DoNotRetryIOException("Merge of " + regionsStr +<a name="line.1869"></a>
<span class="sourceLineNo">1870</span>          " failed because merge switch is off");<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>    final String mergeRegionsStr = Arrays.stream(regionsToMerge).map(RegionInfo::getEncodedName)<a name="line.1873"></a>
<span class="sourceLineNo">1874</span>      .collect(Collectors.joining(", "));<a name="line.1874"></a>
<span class="sourceLineNo">1875</span>    return MasterProcedureUtil.submitProcedure(new NonceProcedureRunnable(this, ng, nonce) {<a name="line.1875"></a>
<span class="sourceLineNo">1876</span>      @Override<a name="line.1876"></a>
<span class="sourceLineNo">1877</span>      protected void run() throws IOException {<a name="line.1877"></a>
<span class="sourceLineNo">1878</span>        getMaster().getMasterCoprocessorHost().preMergeRegions(regionsToMerge);<a name="line.1878"></a>
<span class="sourceLineNo">1879</span>        String aid = getClientIdAuditPrefix();<a name="line.1879"></a>
<span class="sourceLineNo">1880</span>        LOG.info("{} merge regions {}", aid, mergeRegionsStr);<a name="line.1880"></a>
<span class="sourceLineNo">1881</span>        submitProcedure(new MergeTableRegionsProcedure(procedureExecutor.getEnvironment(),<a name="line.1881"></a>
<span class="sourceLineNo">1882</span>            regionsToMerge, forcible));<a name="line.1882"></a>
<span class="sourceLineNo">1883</span>        getMaster().getMasterCoprocessorHost().postMergeRegions(regionsToMerge);<a name="line.1883"></a>
<span class="sourceLineNo">1884</span>      }<a name="line.1884"></a>
<span class="sourceLineNo">1885</span><a name="line.1885"></a>
<span class="sourceLineNo">1886</span>      @Override<a name="line.1886"></a>
<span class="sourceLineNo">1887</span>      protected String getDescription() {<a name="line.1887"></a>
<span class="sourceLineNo">1888</span>        return "MergeTableProcedure";<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>  }<a name="line.1891"></a>
<span class="sourceLineNo">1892</span><a name="line.1892"></a>
<span class="sourceLineNo">1893</span>  @Override<a name="line.1893"></a>
<span class="sourceLineNo">1894</span>  public long splitRegion(final RegionInfo regionInfo, final byte[] splitRow,<a name="line.1894"></a>
<span class="sourceLineNo">1895</span>      final long nonceGroup, final long nonce)<a name="line.1895"></a>
<span class="sourceLineNo">1896</span>  throws IOException {<a name="line.1896"></a>
<span class="sourceLineNo">1897</span>    checkInitialized();<a name="line.1897"></a>
<span class="sourceLineNo">1898</span><a name="line.1898"></a>
<span class="sourceLineNo">1899</span>    if (!isSplitOrMergeEnabled(MasterSwitchType.SPLIT)) {<a name="line.1899"></a>
<span class="sourceLineNo">1900</span>      LOG.warn("Split switch is off! skip split of " + regionInfo);<a name="line.1900"></a>
<span class="sourceLineNo">1901</span>      throw new DoNotRetryIOException("Split region " + regionInfo.getRegionNameAsString() +<a name="line.1901"></a>
<span class="sourceLineNo">1902</span>          " failed due to split switch off");<a name="line.1902"></a>
<span class="sourceLineNo">1903</span>    }<a name="line.1903"></a>
<span class="sourceLineNo">1904</span><a name="line.1904"></a>
<span class="sourceLineNo">1905</span>    return MasterProcedureUtil.submitProcedure(<a name="line.1905"></a>
<span class="sourceLineNo">1906</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.1906"></a>
<span class="sourceLineNo">1907</span>      @Override<a name="line.1907"></a>
<span class="sourceLineNo">1908</span>      protected void run() throws IOException {<a name="line.1908"></a>
<span class="sourceLineNo">1909</span>        getMaster().getMasterCoprocessorHost().preSplitRegion(regionInfo.getTable(), splitRow);<a name="line.1909"></a>
<span class="sourceLineNo">1910</span>        LOG.info(getClientIdAuditPrefix() + " split " + regionInfo.getRegionNameAsString());<a name="line.1910"></a>
<span class="sourceLineNo">1911</span><a name="line.1911"></a>
<span class="sourceLineNo">1912</span>        // Execute the operation asynchronously<a name="line.1912"></a>
<span class="sourceLineNo">1913</span>        submitProcedure(getAssignmentManager().createSplitProcedure(regionInfo, splitRow));<a name="line.1913"></a>
<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
<span class="sourceLineNo">1915</span><a name="line.1915"></a>
<span class="sourceLineNo">1916</span>      @Override<a name="line.1916"></a>
<span class="sourceLineNo">1917</span>      protected String getDescription() {<a name="line.1917"></a>
<span class="sourceLineNo">1918</span>        return "SplitTableProcedure";<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>  }<a name="line.1921"></a>
<span class="sourceLineNo">1922</span><a name="line.1922"></a>
<span class="sourceLineNo">1923</span>  private void warmUpRegion(ServerName server, RegionInfo region) {<a name="line.1923"></a>
<span class="sourceLineNo">1924</span>    FutureUtils.addListener(asyncClusterConnection.getRegionServerAdmin(server)<a name="line.1924"></a>
<span class="sourceLineNo">1925</span>      .warmupRegion(RequestConverter.buildWarmupRegionRequest(region)), (r, e) -&gt; {<a name="line.1925"></a>
<span class="sourceLineNo">1926</span>        if (e != null) {<a name="line.1926"></a>
<span class="sourceLineNo">1927</span>          LOG.warn("Failed to warm up region {} on server {}", region, server, e);<a name="line.1927"></a>
<span class="sourceLineNo">1928</span>        }<a name="line.1928"></a>
<span class="sourceLineNo">1929</span>      });<a name="line.1929"></a>
<span class="sourceLineNo">1930</span>  }<a name="line.1930"></a>
<span class="sourceLineNo">1931</span><a name="line.1931"></a>
<span class="sourceLineNo">1932</span>  // Public so can be accessed by tests. Blocks until move is done.<a name="line.1932"></a>
<span class="sourceLineNo">1933</span>  // Replace with an async implementation from which you can get<a name="line.1933"></a>
<span class="sourceLineNo">1934</span>  // a success/failure result.<a name="line.1934"></a>
<span class="sourceLineNo">1935</span>  @InterfaceAudience.Private<a name="line.1935"></a>
<span class="sourceLineNo">1936</span>  public void move(final byte[] encodedRegionName, byte[] destServerName) throws IOException {<a name="line.1936"></a>
<span class="sourceLineNo">1937</span>    RegionState regionState = assignmentManager.getRegionStates().<a name="line.1937"></a>
<span class="sourceLineNo">1938</span>      getRegionState(Bytes.toString(encodedRegionName));<a name="line.1938"></a>
<span class="sourceLineNo">1939</span><a name="line.1939"></a>
<span class="sourceLineNo">1940</span>    RegionInfo hri;<a name="line.1940"></a>
<span class="sourceLineNo">1941</span>    if (regionState != null) {<a name="line.1941"></a>
<span class="sourceLineNo">1942</span>      hri = regionState.getRegion();<a name="line.1942"></a>
<span class="sourceLineNo">1943</span>    } else {<a name="line.1943"></a>
<span class="sourceLineNo">1944</span>      throw new UnknownRegionException(Bytes.toStringBinary(encodedRegionName));<a name="line.1944"></a>
<span class="sourceLineNo">1945</span>    }<a name="line.1945"></a>
<span class="sourceLineNo">1946</span><a name="line.1946"></a>
<span class="sourceLineNo">1947</span>    ServerName dest;<a name="line.1947"></a>
<span class="sourceLineNo">1948</span>    List&lt;ServerName&gt; exclude = hri.getTable().isSystemTable() ? assignmentManager.getExcludedServersForSystemTable()<a name="line.1948"></a>
<span class="sourceLineNo">1949</span>        : new ArrayList&lt;&gt;(1);<a name="line.1949"></a>
<span class="sourceLineNo">1950</span>    if (destServerName != null &amp;&amp; exclude.contains(ServerName.valueOf(Bytes.toString(destServerName)))) {<a name="line.1950"></a>
<span class="sourceLineNo">1951</span>      LOG.info(<a name="line.1951"></a>
<span class="sourceLineNo">1952</span>          Bytes.toString(encodedRegionName) + " can not move to " + Bytes.toString(destServerName)<a name="line.1952"></a>
<span class="sourceLineNo">1953</span>              + " because the server is in exclude list");<a name="line.1953"></a>
<span class="sourceLineNo">1954</span>      destServerName = null;<a name="line.1954"></a>
<span class="sourceLineNo">1955</span>    }<a name="line.1955"></a>
<span class="sourceLineNo">1956</span>    if (destServerName == null || destServerName.length == 0) {<a name="line.1956"></a>
<span class="sourceLineNo">1957</span>      LOG.info("Passed destination servername is null/empty so " +<a name="line.1957"></a>
<span class="sourceLineNo">1958</span>        "choosing a server at random");<a name="line.1958"></a>
<span class="sourceLineNo">1959</span>      exclude.add(regionState.getServerName());<a name="line.1959"></a>
<span class="sourceLineNo">1960</span>      final List&lt;ServerName&gt; destServers = this.serverManager.createDestinationServersList(exclude);<a name="line.1960"></a>
<span class="sourceLineNo">1961</span>      dest = balancer.randomAssignment(hri, destServers);<a name="line.1961"></a>
<span class="sourceLineNo">1962</span>      if (dest == null) {<a name="line.1962"></a>
<span class="sourceLineNo">1963</span>        LOG.debug("Unable to determine a plan to assign " + hri);<a name="line.1963"></a>
<span class="sourceLineNo">1964</span>        return;<a name="line.1964"></a>
<span class="sourceLineNo">1965</span>      }<a name="line.1965"></a>
<span class="sourceLineNo">1966</span>    } else {<a name="line.1966"></a>
<span class="sourceLineNo">1967</span>      ServerName candidate = ServerName.valueOf(Bytes.toString(destServerName));<a name="line.1967"></a>
<span class="sourceLineNo">1968</span>      dest = balancer.randomAssignment(hri, Lists.newArrayList(candidate));<a name="line.1968"></a>
<span class="sourceLineNo">1969</span>      if (dest == null) {<a name="line.1969"></a>
<span class="sourceLineNo">1970</span>        LOG.debug("Unable to determine a plan to assign " + hri);<a name="line.1970"></a>
<span class="sourceLineNo">1971</span>        return;<a name="line.1971"></a>
<span class="sourceLineNo">1972</span>      }<a name="line.1972"></a>
<span class="sourceLineNo">1973</span>      // TODO: deal with table on master for rs group.<a name="line.1973"></a>
<span class="sourceLineNo">1974</span>      if (dest.equals(serverName)) {<a name="line.1974"></a>
<span class="sourceLineNo">1975</span>        // To avoid unnecessary region moving later by balancer. Don't put user<a name="line.1975"></a>
<span class="sourceLineNo">1976</span>        // regions on master.<a name="line.1976"></a>
<span class="sourceLineNo">1977</span>        LOG.debug("Skipping move of region " + hri.getRegionNameAsString() +<a name="line.1977"></a>
<span class="sourceLineNo">1978</span>          " to avoid unnecessary region moving later by load balancer," +<a name="line.1978"></a>
<span class="sourceLineNo">1979</span>          " because it should not be on master");<a name="line.1979"></a>
<span class="sourceLineNo">1980</span>        return;<a name="line.1980"></a>
<span class="sourceLineNo">1981</span>      }<a name="line.1981"></a>
<span class="sourceLineNo">1982</span>    }<a name="line.1982"></a>
<span class="sourceLineNo">1983</span><a name="line.1983"></a>
<span class="sourceLineNo">1984</span>    if (dest.equals(regionState.getServerName())) {<a name="line.1984"></a>
<span class="sourceLineNo">1985</span>      LOG.debug("Skipping move of region " + hri.getRegionNameAsString()<a name="line.1985"></a>
<span class="sourceLineNo">1986</span>        + " because region already assigned to the same server " + dest + ".");<a name="line.1986"></a>
<span class="sourceLineNo">1987</span>      return;<a name="line.1987"></a>
<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
<span class="sourceLineNo">1989</span><a name="line.1989"></a>
<span class="sourceLineNo">1990</span>    // Now we can do the move<a name="line.1990"></a>
<span class="sourceLineNo">1991</span>    RegionPlan rp = new RegionPlan(hri, regionState.getServerName(), dest);<a name="line.1991"></a>
<span class="sourceLineNo">1992</span>    assert rp.getDestination() != null: rp.toString() + " " + dest;<a name="line.1992"></a>
<span class="sourceLineNo">1993</span><a name="line.1993"></a>
<span class="sourceLineNo">1994</span>    try {<a name="line.1994"></a>
<span class="sourceLineNo">1995</span>      checkInitialized();<a name="line.1995"></a>
<span class="sourceLineNo">1996</span>      if (this.cpHost != null) {<a name="line.1996"></a>
<span class="sourceLineNo">1997</span>        this.cpHost.preMove(hri, rp.getSource(), rp.getDestination());<a name="line.1997"></a>
<span class="sourceLineNo">1998</span>      }<a name="line.1998"></a>
<span class="sourceLineNo">1999</span><a name="line.1999"></a>
<span class="sourceLineNo">2000</span>      TransitRegionStateProcedure proc =<a name="line.2000"></a>
<span class="sourceLineNo">2001</span>        this.assignmentManager.createMoveRegionProcedure(rp.getRegionInfo(), rp.getDestination());<a name="line.2001"></a>
<span class="sourceLineNo">2002</span>      // Warmup the region on the destination before initiating the move.<a name="line.2002"></a>
<span class="sourceLineNo">2003</span>      // A region server could reject the close request because it either does not<a name="line.2003"></a>
<span class="sourceLineNo">2004</span>      // have the specified region or the region is being split.<a name="line.2004"></a>
<span class="sourceLineNo">2005</span>      warmUpRegion(rp.getDestination(), hri);<a name="line.2005"></a>
<span class="sourceLineNo">2006</span><a name="line.2006"></a>
<span class="sourceLineNo">2007</span>      LOG.info(getClientIdAuditPrefix() + " move " + rp + ", running balancer");<a name="line.2007"></a>
<span class="sourceLineNo">2008</span>      Future&lt;byte[]&gt; future = ProcedureSyncWait.submitProcedure(this.procedureExecutor, proc);<a name="line.2008"></a>
<span class="sourceLineNo">2009</span>      try {<a name="line.2009"></a>
<span class="sourceLineNo">2010</span>        // Is this going to work? Will we throw exception on error?<a name="line.2010"></a>
<span class="sourceLineNo">2011</span>        // TODO: CompletableFuture rather than this stunted Future.<a name="line.2011"></a>
<span class="sourceLineNo">2012</span>        future.get();<a name="line.2012"></a>
<span class="sourceLineNo">2013</span>      } catch (InterruptedException | ExecutionException e) {<a name="line.2013"></a>
<span class="sourceLineNo">2014</span>        throw new HBaseIOException(e);<a name="line.2014"></a>
<span class="sourceLineNo">2015</span>      }<a name="line.2015"></a>
<span class="sourceLineNo">2016</span>      if (this.cpHost != null) {<a name="line.2016"></a>
<span class="sourceLineNo">2017</span>        this.cpHost.postMove(hri, rp.getSource(), rp.getDestination());<a name="line.2017"></a>
<span class="sourceLineNo">2018</span>      }<a name="line.2018"></a>
<span class="sourceLineNo">2019</span>    } catch (IOException ioe) {<a name="line.2019"></a>
<span class="sourceLineNo">2020</span>      if (ioe instanceof HBaseIOException) {<a name="line.2020"></a>
<span class="sourceLineNo">2021</span>        throw (HBaseIOException)ioe;<a name="line.2021"></a>
<span class="sourceLineNo">2022</span>      }<a name="line.2022"></a>
<span class="sourceLineNo">2023</span>      throw new HBaseIOException(ioe);<a name="line.2023"></a>
<span class="sourceLineNo">2024</span>    }<a name="line.2024"></a>
<span class="sourceLineNo">2025</span>  }<a name="line.2025"></a>
<span class="sourceLineNo">2026</span><a name="line.2026"></a>
<span class="sourceLineNo">2027</span>  @Override<a name="line.2027"></a>
<span class="sourceLineNo">2028</span>  public long createTable(final TableDescriptor tableDescriptor, final byte[][] splitKeys,<a name="line.2028"></a>
<span class="sourceLineNo">2029</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2029"></a>
<span class="sourceLineNo">2030</span>    checkInitialized();<a name="line.2030"></a>
<span class="sourceLineNo">2031</span>    TableDescriptor desc = getMasterCoprocessorHost().preCreateTableRegionsInfos(tableDescriptor);<a name="line.2031"></a>
<span class="sourceLineNo">2032</span>    if (desc == null) {<a name="line.2032"></a>
<span class="sourceLineNo">2033</span>      throw new IOException("Creation for " + tableDescriptor + " is canceled by CP");<a name="line.2033"></a>
<span class="sourceLineNo">2034</span>    }<a name="line.2034"></a>
<span class="sourceLineNo">2035</span>    String namespace = desc.getTableName().getNamespaceAsString();<a name="line.2035"></a>
<span class="sourceLineNo">2036</span>    this.clusterSchemaService.getNamespace(namespace);<a name="line.2036"></a>
<span class="sourceLineNo">2037</span><a name="line.2037"></a>
<span class="sourceLineNo">2038</span>    RegionInfo[] newRegions = ModifyRegionUtils.createRegionInfos(desc, splitKeys);<a name="line.2038"></a>
<span class="sourceLineNo">2039</span>    TableDescriptorChecker.sanityCheck(conf, desc);<a name="line.2039"></a>
<span class="sourceLineNo">2040</span><a name="line.2040"></a>
<span class="sourceLineNo">2041</span>    return MasterProcedureUtil<a name="line.2041"></a>
<span class="sourceLineNo">2042</span>      .submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2042"></a>
<span class="sourceLineNo">2043</span>        @Override<a name="line.2043"></a>
<span class="sourceLineNo">2044</span>        protected void run() throws IOException {<a name="line.2044"></a>
<span class="sourceLineNo">2045</span>          getMaster().getMasterCoprocessorHost().preCreateTable(desc, newRegions);<a name="line.2045"></a>
<span class="sourceLineNo">2046</span><a name="line.2046"></a>
<span class="sourceLineNo">2047</span>          LOG.info(getClientIdAuditPrefix() + " create " + desc);<a name="line.2047"></a>
<span class="sourceLineNo">2048</span><a name="line.2048"></a>
<span class="sourceLineNo">2049</span>          // TODO: We can handle/merge duplicate requests, and differentiate the case of<a name="line.2049"></a>
<span class="sourceLineNo">2050</span>          // TableExistsException by saying if the schema is the same or not.<a name="line.2050"></a>
<span class="sourceLineNo">2051</span>          //<a name="line.2051"></a>
<span class="sourceLineNo">2052</span>          // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2052"></a>
<span class="sourceLineNo">2053</span>          // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2053"></a>
<span class="sourceLineNo">2054</span>          ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2054"></a>
<span class="sourceLineNo">2055</span>          submitProcedure(<a name="line.2055"></a>
<span class="sourceLineNo">2056</span>            new CreateTableProcedure(procedureExecutor.getEnvironment(), desc, newRegions, latch));<a name="line.2056"></a>
<span class="sourceLineNo">2057</span>          latch.await();<a name="line.2057"></a>
<span class="sourceLineNo">2058</span><a name="line.2058"></a>
<span class="sourceLineNo">2059</span>          getMaster().getMasterCoprocessorHost().postCreateTable(desc, newRegions);<a name="line.2059"></a>
<span class="sourceLineNo">2060</span>        }<a name="line.2060"></a>
<span class="sourceLineNo">2061</span><a name="line.2061"></a>
<span class="sourceLineNo">2062</span>        @Override<a name="line.2062"></a>
<span class="sourceLineNo">2063</span>        protected String getDescription() {<a name="line.2063"></a>
<span class="sourceLineNo">2064</span>          return "CreateTableProcedure";<a name="line.2064"></a>
<span class="sourceLineNo">2065</span>        }<a name="line.2065"></a>
<span class="sourceLineNo">2066</span>      });<a name="line.2066"></a>
<span class="sourceLineNo">2067</span>  }<a name="line.2067"></a>
<span class="sourceLineNo">2068</span><a name="line.2068"></a>
<span class="sourceLineNo">2069</span>  @Override<a name="line.2069"></a>
<span class="sourceLineNo">2070</span>  public long createSystemTable(final TableDescriptor tableDescriptor) throws IOException {<a name="line.2070"></a>
<span class="sourceLineNo">2071</span>    if (isStopped()) {<a name="line.2071"></a>
<span class="sourceLineNo">2072</span>      throw new MasterNotRunningException();<a name="line.2072"></a>
<span class="sourceLineNo">2073</span>    }<a name="line.2073"></a>
<span class="sourceLineNo">2074</span><a name="line.2074"></a>
<span class="sourceLineNo">2075</span>    TableName tableName = tableDescriptor.getTableName();<a name="line.2075"></a>
<span class="sourceLineNo">2076</span>    if (!(tableName.isSystemTable())) {<a name="line.2076"></a>
<span class="sourceLineNo">2077</span>      throw new IllegalArgumentException(<a name="line.2077"></a>
<span class="sourceLineNo">2078</span>        "Only system table creation can use this createSystemTable API");<a name="line.2078"></a>
<span class="sourceLineNo">2079</span>    }<a name="line.2079"></a>
<span class="sourceLineNo">2080</span><a name="line.2080"></a>
<span class="sourceLineNo">2081</span>    RegionInfo[] newRegions = ModifyRegionUtils.createRegionInfos(tableDescriptor, null);<a name="line.2081"></a>
<span class="sourceLineNo">2082</span><a name="line.2082"></a>
<span class="sourceLineNo">2083</span>    LOG.info(getClientIdAuditPrefix() + " create " + tableDescriptor);<a name="line.2083"></a>
<span class="sourceLineNo">2084</span><a name="line.2084"></a>
<span class="sourceLineNo">2085</span>    // This special create table is called locally to master.  Therefore, no RPC means no need<a name="line.2085"></a>
<span class="sourceLineNo">2086</span>    // to use nonce to detect duplicated RPC call.<a name="line.2086"></a>
<span class="sourceLineNo">2087</span>    long procId = this.procedureExecutor.submitProcedure(<a name="line.2087"></a>
<span class="sourceLineNo">2088</span>      new CreateTableProcedure(procedureExecutor.getEnvironment(), tableDescriptor, newRegions));<a name="line.2088"></a>
<span class="sourceLineNo">2089</span><a name="line.2089"></a>
<span class="sourceLineNo">2090</span>    return procId;<a name="line.2090"></a>
<span class="sourceLineNo">2091</span>  }<a name="line.2091"></a>
<span class="sourceLineNo">2092</span><a name="line.2092"></a>
<span class="sourceLineNo">2093</span>  private void startActiveMasterManager(int infoPort) throws KeeperException {<a name="line.2093"></a>
<span class="sourceLineNo">2094</span>    String backupZNode = ZNodePaths.joinZNode(<a name="line.2094"></a>
<span class="sourceLineNo">2095</span>      zooKeeper.getZNodePaths().backupMasterAddressesZNode, serverName.toString());<a name="line.2095"></a>
<span class="sourceLineNo">2096</span>    /*<a name="line.2096"></a>
<span class="sourceLineNo">2097</span>    * Add a ZNode for ourselves in the backup master directory since we<a name="line.2097"></a>
<span class="sourceLineNo">2098</span>    * may not become the active master. If so, we want the actual active<a name="line.2098"></a>
<span class="sourceLineNo">2099</span>    * master to know we are backup masters, so that it won't assign<a name="line.2099"></a>
<span class="sourceLineNo">2100</span>    * regions to us if so configured.<a name="line.2100"></a>
<span class="sourceLineNo">2101</span>    *<a name="line.2101"></a>
<span class="sourceLineNo">2102</span>    * If we become the active master later, ActiveMasterManager will delete<a name="line.2102"></a>
<span class="sourceLineNo">2103</span>    * this node explicitly.  If we crash before then, ZooKeeper will delete<a name="line.2103"></a>
<span class="sourceLineNo">2104</span>    * this node for us since it is ephemeral.<a name="line.2104"></a>
<span class="sourceLineNo">2105</span>    */<a name="line.2105"></a>
<span class="sourceLineNo">2106</span>    LOG.info("Adding backup master ZNode " + backupZNode);<a name="line.2106"></a>
<span class="sourceLineNo">2107</span>    if (!MasterAddressTracker.setMasterAddress(zooKeeper, backupZNode, serverName, infoPort)) {<a name="line.2107"></a>
<span class="sourceLineNo">2108</span>      LOG.warn("Failed create of " + backupZNode + " by " + serverName);<a name="line.2108"></a>
<span class="sourceLineNo">2109</span>    }<a name="line.2109"></a>
<span class="sourceLineNo">2110</span>    this.activeMasterManager.setInfoPort(infoPort);<a name="line.2110"></a>
<span class="sourceLineNo">2111</span>    int timeout = conf.getInt(HConstants.ZK_SESSION_TIMEOUT, HConstants.DEFAULT_ZK_SESSION_TIMEOUT);<a name="line.2111"></a>
<span class="sourceLineNo">2112</span>    // If we're a backup master, stall until a primary to write this address<a name="line.2112"></a>
<span class="sourceLineNo">2113</span>    if (conf.getBoolean(HConstants.MASTER_TYPE_BACKUP, HConstants.DEFAULT_MASTER_TYPE_BACKUP)) {<a name="line.2113"></a>
<span class="sourceLineNo">2114</span>      LOG.debug("HMaster started in backup mode. Stalling until master znode is written.");<a name="line.2114"></a>
<span class="sourceLineNo">2115</span>      // This will only be a minute or so while the cluster starts up,<a name="line.2115"></a>
<span class="sourceLineNo">2116</span>      // so don't worry about setting watches on the parent znode<a name="line.2116"></a>
<span class="sourceLineNo">2117</span>      while (!activeMasterManager.hasActiveMaster()) {<a name="line.2117"></a>
<span class="sourceLineNo">2118</span>        LOG.debug("Waiting for master address and cluster state znode to be written.");<a name="line.2118"></a>
<span class="sourceLineNo">2119</span>        Threads.sleep(timeout);<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>    MonitoredTask status = TaskMonitor.get().createStatus("Master startup");<a name="line.2122"></a>
<span class="sourceLineNo">2123</span>    status.setDescription("Master startup");<a name="line.2123"></a>
<span class="sourceLineNo">2124</span>    try {<a name="line.2124"></a>
<span class="sourceLineNo">2125</span>      if (activeMasterManager.blockUntilBecomingActiveMaster(timeout, status)) {<a name="line.2125"></a>
<span class="sourceLineNo">2126</span>        finishActiveMasterInitialization(status);<a name="line.2126"></a>
<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
<span class="sourceLineNo">2128</span>    } catch (Throwable t) {<a name="line.2128"></a>
<span class="sourceLineNo">2129</span>      status.setStatus("Failed to become active: " + t.getMessage());<a name="line.2129"></a>
<span class="sourceLineNo">2130</span>      LOG.error(HBaseMarkers.FATAL, "Failed to become active master", t);<a name="line.2130"></a>
<span class="sourceLineNo">2131</span>      // HBASE-5680: Likely hadoop23 vs hadoop 20.x/1.x incompatibility<a name="line.2131"></a>
<span class="sourceLineNo">2132</span>      if (t instanceof NoClassDefFoundError &amp;&amp; t.getMessage().<a name="line.2132"></a>
<span class="sourceLineNo">2133</span>          contains("org/apache/hadoop/hdfs/protocol/HdfsConstants$SafeModeAction")) {<a name="line.2133"></a>
<span class="sourceLineNo">2134</span>        // improved error message for this special case<a name="line.2134"></a>
<span class="sourceLineNo">2135</span>        abort("HBase is having a problem with its Hadoop jars.  You may need to recompile " +<a name="line.2135"></a>
<span class="sourceLineNo">2136</span>          "HBase against Hadoop version " + org.apache.hadoop.util.VersionInfo.getVersion() +<a name="line.2136"></a>
<span class="sourceLineNo">2137</span>          " or change your hadoop jars to start properly", t);<a name="line.2137"></a>
<span class="sourceLineNo">2138</span>      } else {<a name="line.2138"></a>
<span class="sourceLineNo">2139</span>        abort("Unhandled exception. Starting shutdown.", t);<a name="line.2139"></a>
<span class="sourceLineNo">2140</span>      }<a name="line.2140"></a>
<span class="sourceLineNo">2141</span>    } finally {<a name="line.2141"></a>
<span class="sourceLineNo">2142</span>      status.cleanup();<a name="line.2142"></a>
<span class="sourceLineNo">2143</span>    }<a name="line.2143"></a>
<span class="sourceLineNo">2144</span>  }<a name="line.2144"></a>
<span class="sourceLineNo">2145</span><a name="line.2145"></a>
<span class="sourceLineNo">2146</span>  private static boolean isCatalogTable(final TableName tableName) {<a name="line.2146"></a>
<span class="sourceLineNo">2147</span>    return tableName.equals(TableName.META_TABLE_NAME);<a name="line.2147"></a>
<span class="sourceLineNo">2148</span>  }<a name="line.2148"></a>
<span class="sourceLineNo">2149</span><a name="line.2149"></a>
<span class="sourceLineNo">2150</span>  @Override<a name="line.2150"></a>
<span class="sourceLineNo">2151</span>  public long deleteTable(<a name="line.2151"></a>
<span class="sourceLineNo">2152</span>      final TableName tableName,<a name="line.2152"></a>
<span class="sourceLineNo">2153</span>      final long nonceGroup,<a name="line.2153"></a>
<span class="sourceLineNo">2154</span>      final long nonce) throws IOException {<a name="line.2154"></a>
<span class="sourceLineNo">2155</span>    checkInitialized();<a name="line.2155"></a>
<span class="sourceLineNo">2156</span><a name="line.2156"></a>
<span class="sourceLineNo">2157</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2157"></a>
<span class="sourceLineNo">2158</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2158"></a>
<span class="sourceLineNo">2159</span>      @Override<a name="line.2159"></a>
<span class="sourceLineNo">2160</span>      protected void run() throws IOException {<a name="line.2160"></a>
<span class="sourceLineNo">2161</span>        getMaster().getMasterCoprocessorHost().preDeleteTable(tableName);<a name="line.2161"></a>
<span class="sourceLineNo">2162</span><a name="line.2162"></a>
<span class="sourceLineNo">2163</span>        LOG.info(getClientIdAuditPrefix() + " delete " + tableName);<a name="line.2163"></a>
<span class="sourceLineNo">2164</span><a name="line.2164"></a>
<span class="sourceLineNo">2165</span>        // TODO: We can handle/merge duplicate request<a name="line.2165"></a>
<span class="sourceLineNo">2166</span>        //<a name="line.2166"></a>
<span class="sourceLineNo">2167</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2167"></a>
<span class="sourceLineNo">2168</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2168"></a>
<span class="sourceLineNo">2169</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2169"></a>
<span class="sourceLineNo">2170</span>        submitProcedure(new DeleteTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2170"></a>
<span class="sourceLineNo">2171</span>            tableName, latch));<a name="line.2171"></a>
<span class="sourceLineNo">2172</span>        latch.await();<a name="line.2172"></a>
<span class="sourceLineNo">2173</span><a name="line.2173"></a>
<span class="sourceLineNo">2174</span>        getMaster().getMasterCoprocessorHost().postDeleteTable(tableName);<a name="line.2174"></a>
<span class="sourceLineNo">2175</span>      }<a name="line.2175"></a>
<span class="sourceLineNo">2176</span><a name="line.2176"></a>
<span class="sourceLineNo">2177</span>      @Override<a name="line.2177"></a>
<span class="sourceLineNo">2178</span>      protected String getDescription() {<a name="line.2178"></a>
<span class="sourceLineNo">2179</span>        return "DeleteTableProcedure";<a name="line.2179"></a>
<span class="sourceLineNo">2180</span>      }<a name="line.2180"></a>
<span class="sourceLineNo">2181</span>    });<a name="line.2181"></a>
<span class="sourceLineNo">2182</span>  }<a name="line.2182"></a>
<span class="sourceLineNo">2183</span><a name="line.2183"></a>
<span class="sourceLineNo">2184</span>  @Override<a name="line.2184"></a>
<span class="sourceLineNo">2185</span>  public long truncateTable(<a name="line.2185"></a>
<span class="sourceLineNo">2186</span>      final TableName tableName,<a name="line.2186"></a>
<span class="sourceLineNo">2187</span>      final boolean preserveSplits,<a name="line.2187"></a>
<span class="sourceLineNo">2188</span>      final long nonceGroup,<a name="line.2188"></a>
<span class="sourceLineNo">2189</span>      final long nonce) throws IOException {<a name="line.2189"></a>
<span class="sourceLineNo">2190</span>    checkInitialized();<a name="line.2190"></a>
<span class="sourceLineNo">2191</span><a name="line.2191"></a>
<span class="sourceLineNo">2192</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2192"></a>
<span class="sourceLineNo">2193</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2193"></a>
<span class="sourceLineNo">2194</span>      @Override<a name="line.2194"></a>
<span class="sourceLineNo">2195</span>      protected void run() throws IOException {<a name="line.2195"></a>
<span class="sourceLineNo">2196</span>        getMaster().getMasterCoprocessorHost().preTruncateTable(tableName);<a name="line.2196"></a>
<span class="sourceLineNo">2197</span><a name="line.2197"></a>
<span class="sourceLineNo">2198</span>        LOG.info(getClientIdAuditPrefix() + " truncate " + tableName);<a name="line.2198"></a>
<span class="sourceLineNo">2199</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createLatch(2, 0);<a name="line.2199"></a>
<span class="sourceLineNo">2200</span>        submitProcedure(new TruncateTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2200"></a>
<span class="sourceLineNo">2201</span>            tableName, preserveSplits, latch));<a name="line.2201"></a>
<span class="sourceLineNo">2202</span>        latch.await();<a name="line.2202"></a>
<span class="sourceLineNo">2203</span><a name="line.2203"></a>
<span class="sourceLineNo">2204</span>        getMaster().getMasterCoprocessorHost().postTruncateTable(tableName);<a name="line.2204"></a>
<span class="sourceLineNo">2205</span>      }<a name="line.2205"></a>
<span class="sourceLineNo">2206</span><a name="line.2206"></a>
<span class="sourceLineNo">2207</span>      @Override<a name="line.2207"></a>
<span class="sourceLineNo">2208</span>      protected String getDescription() {<a name="line.2208"></a>
<span class="sourceLineNo">2209</span>        return "TruncateTableProcedure";<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><a name="line.2213"></a>
<span class="sourceLineNo">2214</span>  @Override<a name="line.2214"></a>
<span class="sourceLineNo">2215</span>  public long addColumn(final TableName tableName, final ColumnFamilyDescriptor column,<a name="line.2215"></a>
<span class="sourceLineNo">2216</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2216"></a>
<span class="sourceLineNo">2217</span>    checkInitialized();<a name="line.2217"></a>
<span class="sourceLineNo">2218</span>    checkTableExists(tableName);<a name="line.2218"></a>
<span class="sourceLineNo">2219</span><a name="line.2219"></a>
<span class="sourceLineNo">2220</span>    return modifyTable(tableName, new TableDescriptorGetter() {<a name="line.2220"></a>
<span class="sourceLineNo">2221</span><a name="line.2221"></a>
<span class="sourceLineNo">2222</span>      @Override<a name="line.2222"></a>
<span class="sourceLineNo">2223</span>      public TableDescriptor get() throws IOException {<a name="line.2223"></a>
<span class="sourceLineNo">2224</span>        TableDescriptor old = getTableDescriptors().get(tableName);<a name="line.2224"></a>
<span class="sourceLineNo">2225</span>        if (old.hasColumnFamily(column.getName())) {<a name="line.2225"></a>
<span class="sourceLineNo">2226</span>          throw new InvalidFamilyOperationException("Column family '" + column.getNameAsString()<a name="line.2226"></a>
<span class="sourceLineNo">2227</span>              + "' in table '" + tableName + "' already exists so cannot be added");<a name="line.2227"></a>
<span class="sourceLineNo">2228</span>        }<a name="line.2228"></a>
<span class="sourceLineNo">2229</span><a name="line.2229"></a>
<span class="sourceLineNo">2230</span>        return TableDescriptorBuilder.newBuilder(old).setColumnFamily(column).build();<a name="line.2230"></a>
<span class="sourceLineNo">2231</span>      }<a name="line.2231"></a>
<span class="sourceLineNo">2232</span>    }, nonceGroup, nonce, true);<a name="line.2232"></a>
<span class="sourceLineNo">2233</span>  }<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>   * Implement to return TableDescriptor after pre-checks<a name="line.2236"></a>
<span class="sourceLineNo">2237</span>   */<a name="line.2237"></a>
<span class="sourceLineNo">2238</span>  protected interface TableDescriptorGetter {<a name="line.2238"></a>
<span class="sourceLineNo">2239</span>    TableDescriptor get() throws IOException;<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>  @Override<a name="line.2242"></a>
<span class="sourceLineNo">2243</span>  public long modifyColumn(final TableName tableName, final ColumnFamilyDescriptor descriptor,<a name="line.2243"></a>
<span class="sourceLineNo">2244</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2244"></a>
<span class="sourceLineNo">2245</span>    checkInitialized();<a name="line.2245"></a>
<span class="sourceLineNo">2246</span>    checkTableExists(tableName);<a name="line.2246"></a>
<span class="sourceLineNo">2247</span>    return modifyTable(tableName, new TableDescriptorGetter() {<a name="line.2247"></a>
<span class="sourceLineNo">2248</span><a name="line.2248"></a>
<span class="sourceLineNo">2249</span>      @Override<a name="line.2249"></a>
<span class="sourceLineNo">2250</span>      public TableDescriptor get() throws IOException {<a name="line.2250"></a>
<span class="sourceLineNo">2251</span>        TableDescriptor old = getTableDescriptors().get(tableName);<a name="line.2251"></a>
<span class="sourceLineNo">2252</span>        if (!old.hasColumnFamily(descriptor.getName())) {<a name="line.2252"></a>
<span class="sourceLineNo">2253</span>          throw new InvalidFamilyOperationException("Family '" + descriptor.getNameAsString()<a name="line.2253"></a>
<span class="sourceLineNo">2254</span>              + "' does not exist, so it cannot be modified");<a name="line.2254"></a>
<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
<span class="sourceLineNo">2256</span><a name="line.2256"></a>
<span class="sourceLineNo">2257</span>        return TableDescriptorBuilder.newBuilder(old).modifyColumnFamily(descriptor).build();<a name="line.2257"></a>
<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
<span class="sourceLineNo">2259</span>    }, nonceGroup, nonce, true);<a name="line.2259"></a>
<span class="sourceLineNo">2260</span>  }<a name="line.2260"></a>
<span class="sourceLineNo">2261</span><a name="line.2261"></a>
<span class="sourceLineNo">2262</span>  @Override<a name="line.2262"></a>
<span class="sourceLineNo">2263</span>  public long deleteColumn(final TableName tableName, final byte[] columnName,<a name="line.2263"></a>
<span class="sourceLineNo">2264</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2264"></a>
<span class="sourceLineNo">2265</span>    checkInitialized();<a name="line.2265"></a>
<span class="sourceLineNo">2266</span>    checkTableExists(tableName);<a name="line.2266"></a>
<span class="sourceLineNo">2267</span><a name="line.2267"></a>
<span class="sourceLineNo">2268</span>    return modifyTable(tableName, new TableDescriptorGetter() {<a name="line.2268"></a>
<span class="sourceLineNo">2269</span><a name="line.2269"></a>
<span class="sourceLineNo">2270</span>      @Override<a name="line.2270"></a>
<span class="sourceLineNo">2271</span>      public TableDescriptor get() throws IOException {<a name="line.2271"></a>
<span class="sourceLineNo">2272</span>        TableDescriptor old = getTableDescriptors().get(tableName);<a name="line.2272"></a>
<span class="sourceLineNo">2273</span><a name="line.2273"></a>
<span class="sourceLineNo">2274</span>        if (!old.hasColumnFamily(columnName)) {<a name="line.2274"></a>
<span class="sourceLineNo">2275</span>          throw new InvalidFamilyOperationException("Family '" + Bytes.toString(columnName)<a name="line.2275"></a>
<span class="sourceLineNo">2276</span>              + "' does not exist, so it cannot be deleted");<a name="line.2276"></a>
<span class="sourceLineNo">2277</span>        }<a name="line.2277"></a>
<span class="sourceLineNo">2278</span>        if (old.getColumnFamilyCount() == 1) {<a name="line.2278"></a>
<span class="sourceLineNo">2279</span>          throw new InvalidFamilyOperationException("Family '" + Bytes.toString(columnName)<a name="line.2279"></a>
<span class="sourceLineNo">2280</span>              + "' is the only column family in the table, so it cannot be deleted");<a name="line.2280"></a>
<span class="sourceLineNo">2281</span>        }<a name="line.2281"></a>
<span class="sourceLineNo">2282</span>        return TableDescriptorBuilder.newBuilder(old).removeColumnFamily(columnName).build();<a name="line.2282"></a>
<span class="sourceLineNo">2283</span>      }<a name="line.2283"></a>
<span class="sourceLineNo">2284</span>    }, nonceGroup, nonce, true);<a name="line.2284"></a>
<span class="sourceLineNo">2285</span>  }<a name="line.2285"></a>
<span class="sourceLineNo">2286</span><a name="line.2286"></a>
<span class="sourceLineNo">2287</span>  @Override<a name="line.2287"></a>
<span class="sourceLineNo">2288</span>  public long enableTable(final TableName tableName, final long nonceGroup, final long nonce)<a name="line.2288"></a>
<span class="sourceLineNo">2289</span>      throws IOException {<a name="line.2289"></a>
<span class="sourceLineNo">2290</span>    checkInitialized();<a name="line.2290"></a>
<span class="sourceLineNo">2291</span><a name="line.2291"></a>
<span class="sourceLineNo">2292</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2292"></a>
<span class="sourceLineNo">2293</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2293"></a>
<span class="sourceLineNo">2294</span>      @Override<a name="line.2294"></a>
<span class="sourceLineNo">2295</span>      protected void run() throws IOException {<a name="line.2295"></a>
<span class="sourceLineNo">2296</span>        getMaster().getMasterCoprocessorHost().preEnableTable(tableName);<a name="line.2296"></a>
<span class="sourceLineNo">2297</span><a name="line.2297"></a>
<span class="sourceLineNo">2298</span>        // Normally, it would make sense for this authorization check to exist inside<a name="line.2298"></a>
<span class="sourceLineNo">2299</span>        // AccessController, but because the authorization check is done based on internal state<a name="line.2299"></a>
<span class="sourceLineNo">2300</span>        // (rather than explicit permissions) we'll do the check here instead of in the<a name="line.2300"></a>
<span class="sourceLineNo">2301</span>        // coprocessor.<a name="line.2301"></a>
<span class="sourceLineNo">2302</span>        MasterQuotaManager quotaManager = getMasterQuotaManager();<a name="line.2302"></a>
<span class="sourceLineNo">2303</span>        if (quotaManager != null) {<a name="line.2303"></a>
<span class="sourceLineNo">2304</span>          if (quotaManager.isQuotaInitialized()) {<a name="line.2304"></a>
<span class="sourceLineNo">2305</span>              SpaceQuotaSnapshot currSnapshotOfTable =<a name="line.2305"></a>
<span class="sourceLineNo">2306</span>                  QuotaTableUtil.getCurrentSnapshotFromQuotaTable(getConnection(), tableName);<a name="line.2306"></a>
<span class="sourceLineNo">2307</span>              if (currSnapshotOfTable != null) {<a name="line.2307"></a>
<span class="sourceLineNo">2308</span>                SpaceQuotaStatus quotaStatus = currSnapshotOfTable.getQuotaStatus();<a name="line.2308"></a>
<span class="sourceLineNo">2309</span>                if (quotaStatus.isInViolation()<a name="line.2309"></a>
<span class="sourceLineNo">2310</span>                    &amp;&amp; SpaceViolationPolicy.DISABLE == quotaStatus.getPolicy().orElse(null)) {<a name="line.2310"></a>
<span class="sourceLineNo">2311</span>                throw new AccessDeniedException("Enabling the table '" + tableName<a name="line.2311"></a>
<span class="sourceLineNo">2312</span>                    + "' is disallowed due to a violated space quota.");<a name="line.2312"></a>
<span class="sourceLineNo">2313</span>              }<a name="line.2313"></a>
<span class="sourceLineNo">2314</span>            }<a name="line.2314"></a>
<span class="sourceLineNo">2315</span>          } else if (LOG.isTraceEnabled()) {<a name="line.2315"></a>
<span class="sourceLineNo">2316</span>            LOG.trace("Unable to check for space quotas as the MasterQuotaManager is not enabled");<a name="line.2316"></a>
<span class="sourceLineNo">2317</span>          }<a name="line.2317"></a>
<span class="sourceLineNo">2318</span>        }<a name="line.2318"></a>
<span class="sourceLineNo">2319</span><a name="line.2319"></a>
<span class="sourceLineNo">2320</span>        LOG.info(getClientIdAuditPrefix() + " enable " + tableName);<a name="line.2320"></a>
<span class="sourceLineNo">2321</span><a name="line.2321"></a>
<span class="sourceLineNo">2322</span>        // Execute the operation asynchronously - client will check the progress of the operation<a name="line.2322"></a>
<span class="sourceLineNo">2323</span>        // In case the request is from a &lt;1.1 client before returning,<a name="line.2323"></a>
<span class="sourceLineNo">2324</span>        // we want to make sure that the table is prepared to be<a name="line.2324"></a>
<span class="sourceLineNo">2325</span>        // enabled (the table is locked and the table state is set).<a name="line.2325"></a>
<span class="sourceLineNo">2326</span>        // Note: if the procedure throws exception, we will catch it and rethrow.<a name="line.2326"></a>
<span class="sourceLineNo">2327</span>        final ProcedurePrepareLatch prepareLatch = ProcedurePrepareLatch.createLatch();<a name="line.2327"></a>
<span class="sourceLineNo">2328</span>        submitProcedure(new EnableTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2328"></a>
<span class="sourceLineNo">2329</span>            tableName, prepareLatch));<a name="line.2329"></a>
<span class="sourceLineNo">2330</span>        prepareLatch.await();<a name="line.2330"></a>
<span class="sourceLineNo">2331</span><a name="line.2331"></a>
<span class="sourceLineNo">2332</span>        getMaster().getMasterCoprocessorHost().postEnableTable(tableName);<a name="line.2332"></a>
<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
<span class="sourceLineNo">2334</span><a name="line.2334"></a>
<span class="sourceLineNo">2335</span>      @Override<a name="line.2335"></a>
<span class="sourceLineNo">2336</span>      protected String getDescription() {<a name="line.2336"></a>
<span class="sourceLineNo">2337</span>        return "EnableTableProcedure";<a name="line.2337"></a>
<span class="sourceLineNo">2338</span>      }<a name="line.2338"></a>
<span class="sourceLineNo">2339</span>    });<a name="line.2339"></a>
<span class="sourceLineNo">2340</span>  }<a name="line.2340"></a>
<span class="sourceLineNo">2341</span><a name="line.2341"></a>
<span class="sourceLineNo">2342</span>  @Override<a name="line.2342"></a>
<span class="sourceLineNo">2343</span>  public long disableTable(final TableName tableName, final long nonceGroup, final long nonce)<a name="line.2343"></a>
<span class="sourceLineNo">2344</span>      throws IOException {<a name="line.2344"></a>
<span class="sourceLineNo">2345</span>    checkInitialized();<a name="line.2345"></a>
<span class="sourceLineNo">2346</span><a name="line.2346"></a>
<span class="sourceLineNo">2347</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2347"></a>
<span class="sourceLineNo">2348</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2348"></a>
<span class="sourceLineNo">2349</span>      @Override<a name="line.2349"></a>
<span class="sourceLineNo">2350</span>      protected void run() throws IOException {<a name="line.2350"></a>
<span class="sourceLineNo">2351</span>        getMaster().getMasterCoprocessorHost().preDisableTable(tableName);<a name="line.2351"></a>
<span class="sourceLineNo">2352</span><a name="line.2352"></a>
<span class="sourceLineNo">2353</span>        LOG.info(getClientIdAuditPrefix() + " disable " + tableName);<a name="line.2353"></a>
<span class="sourceLineNo">2354</span><a name="line.2354"></a>
<span class="sourceLineNo">2355</span>        // Execute the operation asynchronously - client will check the progress of the operation<a name="line.2355"></a>
<span class="sourceLineNo">2356</span>        // In case the request is from a &lt;1.1 client before returning,<a name="line.2356"></a>
<span class="sourceLineNo">2357</span>        // we want to make sure that the table is prepared to be<a name="line.2357"></a>
<span class="sourceLineNo">2358</span>        // enabled (the table is locked and the table state is set).<a name="line.2358"></a>
<span class="sourceLineNo">2359</span>        // Note: if the procedure throws exception, we will catch it and rethrow.<a name="line.2359"></a>
<span class="sourceLineNo">2360</span>        //<a name="line.2360"></a>
<span class="sourceLineNo">2361</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2361"></a>
<span class="sourceLineNo">2362</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2362"></a>
<span class="sourceLineNo">2363</span>        final ProcedurePrepareLatch prepareLatch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2363"></a>
<span class="sourceLineNo">2364</span>        submitProcedure(new DisableTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2364"></a>
<span class="sourceLineNo">2365</span>            tableName, false, prepareLatch));<a name="line.2365"></a>
<span class="sourceLineNo">2366</span>        prepareLatch.await();<a name="line.2366"></a>
<span class="sourceLineNo">2367</span><a name="line.2367"></a>
<span class="sourceLineNo">2368</span>        getMaster().getMasterCoprocessorHost().postDisableTable(tableName);<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>      protected String getDescription() {<a name="line.2372"></a>
<span class="sourceLineNo">2373</span>        return "DisableTableProcedure";<a name="line.2373"></a>
<span class="sourceLineNo">2374</span>      }<a name="line.2374"></a>
<span class="sourceLineNo">2375</span>    });<a name="line.2375"></a>
<span class="sourceLineNo">2376</span>  }<a name="line.2376"></a>
<span class="sourceLineNo">2377</span><a name="line.2377"></a>
<span class="sourceLineNo">2378</span>  private long modifyTable(final TableName tableName,<a name="line.2378"></a>
<span class="sourceLineNo">2379</span>      final TableDescriptorGetter newDescriptorGetter, final long nonceGroup, final long nonce,<a name="line.2379"></a>
<span class="sourceLineNo">2380</span>      final boolean shouldCheckDescriptor) throws IOException {<a name="line.2380"></a>
<span class="sourceLineNo">2381</span>    return MasterProcedureUtil<a name="line.2381"></a>
<span class="sourceLineNo">2382</span>        .submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2382"></a>
<span class="sourceLineNo">2383</span>          @Override<a name="line.2383"></a>
<span class="sourceLineNo">2384</span>          protected void run() throws IOException {<a name="line.2384"></a>
<span class="sourceLineNo">2385</span>            TableDescriptor oldDescriptor = getMaster().getTableDescriptors().get(tableName);<a name="line.2385"></a>
<span class="sourceLineNo">2386</span>            TableDescriptor newDescriptor = getMaster().getMasterCoprocessorHost()<a name="line.2386"></a>
<span class="sourceLineNo">2387</span>                .preModifyTable(tableName, oldDescriptor, newDescriptorGetter.get());<a name="line.2387"></a>
<span class="sourceLineNo">2388</span>            TableDescriptorChecker.sanityCheck(conf, newDescriptor);<a name="line.2388"></a>
<span class="sourceLineNo">2389</span>            LOG.info("{} modify table {} from {} to {}", getClientIdAuditPrefix(), tableName,<a name="line.2389"></a>
<span class="sourceLineNo">2390</span>                oldDescriptor, newDescriptor);<a name="line.2390"></a>
<span class="sourceLineNo">2391</span><a name="line.2391"></a>
<span class="sourceLineNo">2392</span>            // Execute the operation synchronously - wait for the operation completes before<a name="line.2392"></a>
<span class="sourceLineNo">2393</span>            // continuing.<a name="line.2393"></a>
<span class="sourceLineNo">2394</span>            //<a name="line.2394"></a>
<span class="sourceLineNo">2395</span>            // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2395"></a>
<span class="sourceLineNo">2396</span>            // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2396"></a>
<span class="sourceLineNo">2397</span>            ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2397"></a>
<span class="sourceLineNo">2398</span>            submitProcedure(new ModifyTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2398"></a>
<span class="sourceLineNo">2399</span>                newDescriptor, latch, oldDescriptor, shouldCheckDescriptor));<a name="line.2399"></a>
<span class="sourceLineNo">2400</span>            latch.await();<a name="line.2400"></a>
<span class="sourceLineNo">2401</span><a name="line.2401"></a>
<span class="sourceLineNo">2402</span>            getMaster().getMasterCoprocessorHost().postModifyTable(tableName, oldDescriptor,<a name="line.2402"></a>
<span class="sourceLineNo">2403</span>              newDescriptor);<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>          @Override<a name="line.2406"></a>
<span class="sourceLineNo">2407</span>          protected String getDescription() {<a name="line.2407"></a>
<span class="sourceLineNo">2408</span>            return "ModifyTableProcedure";<a name="line.2408"></a>
<span class="sourceLineNo">2409</span>          }<a name="line.2409"></a>
<span class="sourceLineNo">2410</span>        });<a name="line.2410"></a>
<span class="sourceLineNo">2411</span><a name="line.2411"></a>
<span class="sourceLineNo">2412</span>  }<a name="line.2412"></a>
<span class="sourceLineNo">2413</span><a name="line.2413"></a>
<span class="sourceLineNo">2414</span>  @Override<a name="line.2414"></a>
<span class="sourceLineNo">2415</span>  public long modifyTable(final TableName tableName, final TableDescriptor newDescriptor,<a name="line.2415"></a>
<span class="sourceLineNo">2416</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2416"></a>
<span class="sourceLineNo">2417</span>    checkInitialized();<a name="line.2417"></a>
<span class="sourceLineNo">2418</span>    return modifyTable(tableName, new TableDescriptorGetter() {<a name="line.2418"></a>
<span class="sourceLineNo">2419</span>      @Override<a name="line.2419"></a>
<span class="sourceLineNo">2420</span>      public TableDescriptor get() throws IOException {<a name="line.2420"></a>
<span class="sourceLineNo">2421</span>        return newDescriptor;<a name="line.2421"></a>
<span class="sourceLineNo">2422</span>      }<a name="line.2422"></a>
<span class="sourceLineNo">2423</span>    }, nonceGroup, nonce, false);<a name="line.2423"></a>
<span class="sourceLineNo">2424</span><a name="line.2424"></a>
<span class="sourceLineNo">2425</span>  }<a name="line.2425"></a>
<span class="sourceLineNo">2426</span><a name="line.2426"></a>
<span class="sourceLineNo">2427</span>  public long restoreSnapshot(final SnapshotDescription snapshotDesc,<a name="line.2427"></a>
<span class="sourceLineNo">2428</span>      final long nonceGroup, final long nonce, final boolean restoreAcl) throws IOException {<a name="line.2428"></a>
<span class="sourceLineNo">2429</span>    checkInitialized();<a name="line.2429"></a>
<span class="sourceLineNo">2430</span>    getSnapshotManager().checkSnapshotSupport();<a name="line.2430"></a>
<span class="sourceLineNo">2431</span><a name="line.2431"></a>
<span class="sourceLineNo">2432</span>    // Ensure namespace exists. Will throw exception if non-known NS.<a name="line.2432"></a>
<span class="sourceLineNo">2433</span>    final TableName dstTable = TableName.valueOf(snapshotDesc.getTable());<a name="line.2433"></a>
<span class="sourceLineNo">2434</span>    getClusterSchema().getNamespace(dstTable.getNamespaceAsString());<a name="line.2434"></a>
<span class="sourceLineNo">2435</span><a name="line.2435"></a>
<span class="sourceLineNo">2436</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2436"></a>
<span class="sourceLineNo">2437</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2437"></a>
<span class="sourceLineNo">2438</span>      @Override<a name="line.2438"></a>
<span class="sourceLineNo">2439</span>      protected void run() throws IOException {<a name="line.2439"></a>
<span class="sourceLineNo">2440</span>          setProcId(<a name="line.2440"></a>
<span class="sourceLineNo">2441</span>            getSnapshotManager().restoreOrCloneSnapshot(snapshotDesc, getNonceKey(), restoreAcl));<a name="line.2441"></a>
<span class="sourceLineNo">2442</span>      }<a name="line.2442"></a>
<span class="sourceLineNo">2443</span><a name="line.2443"></a>
<span class="sourceLineNo">2444</span>      @Override<a name="line.2444"></a>
<span class="sourceLineNo">2445</span>      protected String getDescription() {<a name="line.2445"></a>
<span class="sourceLineNo">2446</span>        return "RestoreSnapshotProcedure";<a name="line.2446"></a>
<span class="sourceLineNo">2447</span>      }<a name="line.2447"></a>
<span class="sourceLineNo">2448</span>    });<a name="line.2448"></a>
<span class="sourceLineNo">2449</span>  }<a name="line.2449"></a>
<span class="sourceLineNo">2450</span><a name="line.2450"></a>
<span class="sourceLineNo">2451</span>  private void checkTableExists(final TableName tableName)<a name="line.2451"></a>
<span class="sourceLineNo">2452</span>    throws IOException, TableNotFoundException {<a name="line.2452"></a>
<span class="sourceLineNo">2453</span>    if (!tableDescriptors.exists(tableName)) {<a name="line.2453"></a>
<span class="sourceLineNo">2454</span>      throw new TableNotFoundException(tableName);<a name="line.2454"></a>
<span class="sourceLineNo">2455</span>    }<a name="line.2455"></a>
<span class="sourceLineNo">2456</span>  }<a name="line.2456"></a>
<span class="sourceLineNo">2457</span><a name="line.2457"></a>
<span class="sourceLineNo">2458</span>  @Override<a name="line.2458"></a>
<span class="sourceLineNo">2459</span>  public void checkTableModifiable(final TableName tableName)<a name="line.2459"></a>
<span class="sourceLineNo">2460</span>      throws IOException, TableNotFoundException, TableNotDisabledException {<a name="line.2460"></a>
<span class="sourceLineNo">2461</span>    if (isCatalogTable(tableName)) {<a name="line.2461"></a>
<span class="sourceLineNo">2462</span>      throw new IOException("Can't modify catalog tables");<a name="line.2462"></a>
<span class="sourceLineNo">2463</span>    }<a name="line.2463"></a>
<span class="sourceLineNo">2464</span>    checkTableExists(tableName);<a name="line.2464"></a>
<span class="sourceLineNo">2465</span>    TableState ts = getTableStateManager().getTableState(tableName);<a name="line.2465"></a>
<span class="sourceLineNo">2466</span>    if (!ts.isDisabled()) {<a name="line.2466"></a>
<span class="sourceLineNo">2467</span>      throw new TableNotDisabledException("Not DISABLED; " + ts);<a name="line.2467"></a>
<span class="sourceLineNo">2468</span>    }<a name="line.2468"></a>
<span class="sourceLineNo">2469</span>  }<a name="line.2469"></a>
<span class="sourceLineNo">2470</span><a name="line.2470"></a>
<span class="sourceLineNo">2471</span>  public ClusterMetrics getClusterMetricsWithoutCoprocessor() throws InterruptedIOException {<a name="line.2471"></a>
<span class="sourceLineNo">2472</span>    return getClusterMetricsWithoutCoprocessor(EnumSet.allOf(Option.class));<a name="line.2472"></a>
<span class="sourceLineNo">2473</span>  }<a name="line.2473"></a>
<span class="sourceLineNo">2474</span><a name="line.2474"></a>
<span class="sourceLineNo">2475</span>  public ClusterMetrics getClusterMetricsWithoutCoprocessor(EnumSet&lt;Option&gt; options)<a name="line.2475"></a>
<span class="sourceLineNo">2476</span>      throws InterruptedIOException {<a name="line.2476"></a>
<span class="sourceLineNo">2477</span>    ClusterMetricsBuilder builder = ClusterMetricsBuilder.newBuilder();<a name="line.2477"></a>
<span class="sourceLineNo">2478</span>    // given that hbase1 can't submit the request with Option,<a name="line.2478"></a>
<span class="sourceLineNo">2479</span>    // we return all information to client if the list of Option is empty.<a name="line.2479"></a>
<span class="sourceLineNo">2480</span>    if (options.isEmpty()) {<a name="line.2480"></a>
<span class="sourceLineNo">2481</span>      options = EnumSet.allOf(Option.class);<a name="line.2481"></a>
<span class="sourceLineNo">2482</span>    }<a name="line.2482"></a>
<span class="sourceLineNo">2483</span><a name="line.2483"></a>
<span class="sourceLineNo">2484</span>    for (Option opt : options) {<a name="line.2484"></a>
<span class="sourceLineNo">2485</span>      switch (opt) {<a name="line.2485"></a>
<span class="sourceLineNo">2486</span>        case HBASE_VERSION: builder.setHBaseVersion(VersionInfo.getVersion()); break;<a name="line.2486"></a>
<span class="sourceLineNo">2487</span>        case CLUSTER_ID: builder.setClusterId(getClusterId()); break;<a name="line.2487"></a>
<span class="sourceLineNo">2488</span>        case MASTER: builder.setMasterName(getServerName()); break;<a name="line.2488"></a>
<span class="sourceLineNo">2489</span>        case BACKUP_MASTERS: builder.setBackerMasterNames(getBackupMasters()); break;<a name="line.2489"></a>
<span class="sourceLineNo">2490</span>        case LIVE_SERVERS: {<a name="line.2490"></a>
<span class="sourceLineNo">2491</span>          if (serverManager != null) {<a name="line.2491"></a>
<span class="sourceLineNo">2492</span>            builder.setLiveServerMetrics(serverManager.getOnlineServers().entrySet().stream()<a name="line.2492"></a>
<span class="sourceLineNo">2493</span>              .collect(Collectors.toMap(e -&gt; e.getKey(), e -&gt; e.getValue())));<a name="line.2493"></a>
<span class="sourceLineNo">2494</span>          }<a name="line.2494"></a>
<span class="sourceLineNo">2495</span>          break;<a name="line.2495"></a>
<span class="sourceLineNo">2496</span>        }<a name="line.2496"></a>
<span class="sourceLineNo">2497</span>        case DEAD_SERVERS: {<a name="line.2497"></a>
<span class="sourceLineNo">2498</span>          if (serverManager != null) {<a name="line.2498"></a>
<span class="sourceLineNo">2499</span>            builder.setDeadServerNames(new ArrayList&lt;&gt;(<a name="line.2499"></a>
<span class="sourceLineNo">2500</span>              serverManager.getDeadServers().copyServerNames()));<a name="line.2500"></a>
<span class="sourceLineNo">2501</span>          }<a name="line.2501"></a>
<span class="sourceLineNo">2502</span>          break;<a name="line.2502"></a>
<span class="sourceLineNo">2503</span>        }<a name="line.2503"></a>
<span class="sourceLineNo">2504</span>        case MASTER_COPROCESSORS: {<a name="line.2504"></a>
<span class="sourceLineNo">2505</span>          if (cpHost != null) {<a name="line.2505"></a>
<span class="sourceLineNo">2506</span>            builder.setMasterCoprocessorNames(Arrays.asList(getMasterCoprocessors()));<a name="line.2506"></a>
<span class="sourceLineNo">2507</span>          }<a name="line.2507"></a>
<span class="sourceLineNo">2508</span>          break;<a name="line.2508"></a>
<span class="sourceLineNo">2509</span>        }<a name="line.2509"></a>
<span class="sourceLineNo">2510</span>        case REGIONS_IN_TRANSITION: {<a name="line.2510"></a>
<span class="sourceLineNo">2511</span>          if (assignmentManager != null) {<a name="line.2511"></a>
<span class="sourceLineNo">2512</span>            builder.setRegionsInTransition(assignmentManager.getRegionStates()<a name="line.2512"></a>
<span class="sourceLineNo">2513</span>                .getRegionsStateInTransition());<a name="line.2513"></a>
<span class="sourceLineNo">2514</span>          }<a name="line.2514"></a>
<span class="sourceLineNo">2515</span>          break;<a name="line.2515"></a>
<span class="sourceLineNo">2516</span>        }<a name="line.2516"></a>
<span class="sourceLineNo">2517</span>        case BALANCER_ON: {<a name="line.2517"></a>
<span class="sourceLineNo">2518</span>          if (loadBalancerTracker != null) {<a name="line.2518"></a>
<span class="sourceLineNo">2519</span>            builder.setBalancerOn(loadBalancerTracker.isBalancerOn());<a name="line.2519"></a>
<span class="sourceLineNo">2520</span>          }<a name="line.2520"></a>
<span class="sourceLineNo">2521</span>          break;<a name="line.2521"></a>
<span class="sourceLineNo">2522</span>        }<a name="line.2522"></a>
<span class="sourceLineNo">2523</span>        case MASTER_INFO_PORT: {<a name="line.2523"></a>
<span class="sourceLineNo">2524</span>          if (infoServer != null) {<a name="line.2524"></a>
<span class="sourceLineNo">2525</span>            builder.setMasterInfoPort(infoServer.getPort());<a name="line.2525"></a>
<span class="sourceLineNo">2526</span>          }<a name="line.2526"></a>
<span class="sourceLineNo">2527</span>          break;<a name="line.2527"></a>
<span class="sourceLineNo">2528</span>        }<a name="line.2528"></a>
<span class="sourceLineNo">2529</span>        case SERVERS_NAME: {<a name="line.2529"></a>
<span class="sourceLineNo">2530</span>          if (serverManager != null) {<a name="line.2530"></a>
<span class="sourceLineNo">2531</span>            builder.setServerNames(serverManager.getOnlineServersList());<a name="line.2531"></a>
<span class="sourceLineNo">2532</span>          }<a name="line.2532"></a>
<span class="sourceLineNo">2533</span>          break;<a name="line.2533"></a>
<span class="sourceLineNo">2534</span>        }<a name="line.2534"></a>
<span class="sourceLineNo">2535</span>        case TABLE_TO_REGIONS_COUNT: {<a name="line.2535"></a>
<span class="sourceLineNo">2536</span>          if (isActiveMaster() &amp;&amp; isInitialized() &amp;&amp; assignmentManager != null) {<a name="line.2536"></a>
<span class="sourceLineNo">2537</span>            try {<a name="line.2537"></a>
<span class="sourceLineNo">2538</span>              Map&lt;TableName, RegionStatesCount&gt; tableRegionStatesCountMap = new HashMap&lt;&gt;();<a name="line.2538"></a>
<span class="sourceLineNo">2539</span>              Map&lt;String, TableDescriptor&gt; tableDescriptorMap = getTableDescriptors().getAll();<a name="line.2539"></a>
<span class="sourceLineNo">2540</span>              for (TableDescriptor tableDescriptor : tableDescriptorMap.values()) {<a name="line.2540"></a>
<span class="sourceLineNo">2541</span>                TableName tableName = tableDescriptor.getTableName();<a name="line.2541"></a>
<span class="sourceLineNo">2542</span>                RegionStatesCount regionStatesCount = assignmentManager<a name="line.2542"></a>
<span class="sourceLineNo">2543</span>                  .getRegionStatesCount(tableName);<a name="line.2543"></a>
<span class="sourceLineNo">2544</span>                tableRegionStatesCountMap.put(tableName, regionStatesCount);<a name="line.2544"></a>
<span class="sourceLineNo">2545</span>              }<a name="line.2545"></a>
<span class="sourceLineNo">2546</span>              builder.setTableRegionStatesCount(tableRegionStatesCountMap);<a name="line.2546"></a>
<span class="sourceLineNo">2547</span>            } catch (IOException e) {<a name="line.2547"></a>
<span class="sourceLineNo">2548</span>              LOG.error("Error while populating TABLE_TO_REGIONS_COUNT for Cluster Metrics..", e);<a name="line.2548"></a>
<span class="sourceLineNo">2549</span>            }<a name="line.2549"></a>
<span class="sourceLineNo">2550</span>          }<a name="line.2550"></a>
<span class="sourceLineNo">2551</span>          break;<a name="line.2551"></a>
<span class="sourceLineNo">2552</span>        }<a name="line.2552"></a>
<span class="sourceLineNo">2553</span>      }<a name="line.2553"></a>
<span class="sourceLineNo">2554</span>    }<a name="line.2554"></a>
<span class="sourceLineNo">2555</span>    return builder.build();<a name="line.2555"></a>
<span class="sourceLineNo">2556</span>  }<a name="line.2556"></a>
<span class="sourceLineNo">2557</span><a name="line.2557"></a>
<span class="sourceLineNo">2558</span>  /**<a name="line.2558"></a>
<span class="sourceLineNo">2559</span>   * @return cluster status<a name="line.2559"></a>
<span class="sourceLineNo">2560</span>   */<a name="line.2560"></a>
<span class="sourceLineNo">2561</span>  public ClusterMetrics getClusterMetrics() throws IOException {<a name="line.2561"></a>
<span class="sourceLineNo">2562</span>    return getClusterMetrics(EnumSet.allOf(Option.class));<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>  public ClusterMetrics getClusterMetrics(EnumSet&lt;Option&gt; options) throws IOException {<a name="line.2565"></a>
<span class="sourceLineNo">2566</span>    if (cpHost != null) {<a name="line.2566"></a>
<span class="sourceLineNo">2567</span>      cpHost.preGetClusterMetrics();<a name="line.2567"></a>
<span class="sourceLineNo">2568</span>    }<a name="line.2568"></a>
<span class="sourceLineNo">2569</span>    ClusterMetrics status = getClusterMetricsWithoutCoprocessor(options);<a name="line.2569"></a>
<span class="sourceLineNo">2570</span>    if (cpHost != null) {<a name="line.2570"></a>
<span class="sourceLineNo">2571</span>      cpHost.postGetClusterMetrics(status);<a name="line.2571"></a>
<span class="sourceLineNo">2572</span>    }<a name="line.2572"></a>
<span class="sourceLineNo">2573</span>    return status;<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>  List&lt;ServerName&gt; getBackupMasters() {<a name="line.2576"></a>
<span class="sourceLineNo">2577</span>    return activeMasterManager.getBackupMasters();<a name="line.2577"></a>
<span class="sourceLineNo">2578</span>  }<a name="line.2578"></a>
<span class="sourceLineNo">2579</span><a name="line.2579"></a>
<span class="sourceLineNo">2580</span>  /**<a name="line.2580"></a>
<span class="sourceLineNo">2581</span>   * The set of loaded coprocessors is stored in a static set. Since it's<a name="line.2581"></a>
<span class="sourceLineNo">2582</span>   * statically allocated, it does not require that HMaster's cpHost be<a name="line.2582"></a>
<span class="sourceLineNo">2583</span>   * initialized prior to accessing it.<a name="line.2583"></a>
<span class="sourceLineNo">2584</span>   * @return a String representation of the set of names of the loaded coprocessors.<a name="line.2584"></a>
<span class="sourceLineNo">2585</span>   */<a name="line.2585"></a>
<span class="sourceLineNo">2586</span>  public static String getLoadedCoprocessors() {<a name="line.2586"></a>
<span class="sourceLineNo">2587</span>    return CoprocessorHost.getLoadedCoprocessors().toString();<a name="line.2587"></a>
<span class="sourceLineNo">2588</span>  }<a name="line.2588"></a>
<span class="sourceLineNo">2589</span><a name="line.2589"></a>
<span class="sourceLineNo">2590</span>  /**<a name="line.2590"></a>
<span class="sourceLineNo">2591</span>   * @return timestamp in millis when HMaster was started.<a name="line.2591"></a>
<span class="sourceLineNo">2592</span>   */<a name="line.2592"></a>
<span class="sourceLineNo">2593</span>  public long getMasterStartTime() {<a name="line.2593"></a>
<span class="sourceLineNo">2594</span>    return startcode;<a name="line.2594"></a>
<span class="sourceLineNo">2595</span>  }<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>   * @return timestamp in millis when HMaster became the active master.<a name="line.2598"></a>
<span class="sourceLineNo">2599</span>   */<a name="line.2599"></a>
<span class="sourceLineNo">2600</span>  public long getMasterActiveTime() {<a name="line.2600"></a>
<span class="sourceLineNo">2601</span>    return masterActiveTime;<a name="line.2601"></a>
<span class="sourceLineNo">2602</span>  }<a name="line.2602"></a>
<span class="sourceLineNo">2603</span><a name="line.2603"></a>
<span class="sourceLineNo">2604</span>  /**<a name="line.2604"></a>
<span class="sourceLineNo">2605</span>   * @return timestamp in millis when HMaster finished becoming the active master<a name="line.2605"></a>
<span class="sourceLineNo">2606</span>   */<a name="line.2606"></a>
<span class="sourceLineNo">2607</span>  public long getMasterFinishedInitializationTime() {<a name="line.2607"></a>
<span class="sourceLineNo">2608</span>    return masterFinishedInitializationTime;<a name="line.2608"></a>
<span class="sourceLineNo">2609</span>  }<a name="line.2609"></a>
<span class="sourceLineNo">2610</span><a name="line.2610"></a>
<span class="sourceLineNo">2611</span>  public int getNumWALFiles() {<a name="line.2611"></a>
<span class="sourceLineNo">2612</span>    return 0;<a name="line.2612"></a>
<span class="sourceLineNo">2613</span>  }<a name="line.2613"></a>
<span class="sourceLineNo">2614</span><a name="line.2614"></a>
<span class="sourceLineNo">2615</span>  public ProcedureStore getProcedureStore() {<a name="line.2615"></a>
<span class="sourceLineNo">2616</span>    return procedureStore;<a name="line.2616"></a>
<span class="sourceLineNo">2617</span>  }<a name="line.2617"></a>
<span class="sourceLineNo">2618</span><a name="line.2618"></a>
<span class="sourceLineNo">2619</span>  public int getRegionServerInfoPort(final ServerName sn) {<a name="line.2619"></a>
<span class="sourceLineNo">2620</span>    int port = this.serverManager.getInfoPort(sn);<a name="line.2620"></a>
<span class="sourceLineNo">2621</span>    return port == 0 ? conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.2621"></a>
<span class="sourceLineNo">2622</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT) : port;<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>  @Override<a name="line.2625"></a>
<span class="sourceLineNo">2626</span>  public String getRegionServerVersion(ServerName sn) {<a name="line.2626"></a>
<span class="sourceLineNo">2627</span>    // Will return "0.0.0" if the server is not online to prevent move system region to unknown<a name="line.2627"></a>
<span class="sourceLineNo">2628</span>    // version RS.<a name="line.2628"></a>
<span class="sourceLineNo">2629</span>    return this.serverManager.getVersion(sn);<a name="line.2629"></a>
<span class="sourceLineNo">2630</span>  }<a name="line.2630"></a>
<span class="sourceLineNo">2631</span><a name="line.2631"></a>
<span class="sourceLineNo">2632</span>  @Override<a name="line.2632"></a>
<span class="sourceLineNo">2633</span>  public void checkIfShouldMoveSystemRegionAsync() {<a name="line.2633"></a>
<span class="sourceLineNo">2634</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.2634"></a>
<span class="sourceLineNo">2635</span>  }<a name="line.2635"></a>
<span class="sourceLineNo">2636</span><a name="line.2636"></a>
<span class="sourceLineNo">2637</span>  /**<a name="line.2637"></a>
<span class="sourceLineNo">2638</span>   * @return array of coprocessor SimpleNames.<a name="line.2638"></a>
<span class="sourceLineNo">2639</span>   */<a name="line.2639"></a>
<span class="sourceLineNo">2640</span>  public String[] getMasterCoprocessors() {<a name="line.2640"></a>
<span class="sourceLineNo">2641</span>    Set&lt;String&gt; masterCoprocessors = getMasterCoprocessorHost().getCoprocessors();<a name="line.2641"></a>
<span class="sourceLineNo">2642</span>    return masterCoprocessors.toArray(new String[masterCoprocessors.size()]);<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>  @Override<a name="line.2645"></a>
<span class="sourceLineNo">2646</span>  public void abort(String reason, Throwable cause) {<a name="line.2646"></a>
<span class="sourceLineNo">2647</span>    if (!setAbortRequested() || isStopped()) {<a name="line.2647"></a>
<span class="sourceLineNo">2648</span>      LOG.debug("Abort called but aborted={}, stopped={}", isAborted(), isStopped());<a name="line.2648"></a>
<span class="sourceLineNo">2649</span>      return;<a name="line.2649"></a>
<span class="sourceLineNo">2650</span>    }<a name="line.2650"></a>
<span class="sourceLineNo">2651</span>    if (cpHost != null) {<a name="line.2651"></a>
<span class="sourceLineNo">2652</span>      // HBASE-4014: dump a list of loaded coprocessors.<a name="line.2652"></a>
<span class="sourceLineNo">2653</span>      LOG.error(HBaseMarkers.FATAL, "Master server abort: loaded coprocessors are: " +<a name="line.2653"></a>
<span class="sourceLineNo">2654</span>          getLoadedCoprocessors());<a name="line.2654"></a>
<span class="sourceLineNo">2655</span>    }<a name="line.2655"></a>
<span class="sourceLineNo">2656</span>    String msg = "***** ABORTING master " + this + ": " + reason + " *****";<a name="line.2656"></a>
<span class="sourceLineNo">2657</span>    if (cause != null) {<a name="line.2657"></a>
<span class="sourceLineNo">2658</span>      LOG.error(HBaseMarkers.FATAL, msg, cause);<a name="line.2658"></a>
<span class="sourceLineNo">2659</span>    } else {<a name="line.2659"></a>
<span class="sourceLineNo">2660</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.2660"></a>
<span class="sourceLineNo">2661</span>    }<a name="line.2661"></a>
<span class="sourceLineNo">2662</span><a name="line.2662"></a>
<span class="sourceLineNo">2663</span>    try {<a name="line.2663"></a>
<span class="sourceLineNo">2664</span>      stopMaster();<a name="line.2664"></a>
<span class="sourceLineNo">2665</span>    } catch (IOException e) {<a name="line.2665"></a>
<span class="sourceLineNo">2666</span>      LOG.error("Exception occurred while stopping master", e);<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><a name="line.2669"></a>
<span class="sourceLineNo">2670</span>  @Override<a name="line.2670"></a>
<span class="sourceLineNo">2671</span>  public ZKWatcher getZooKeeper() {<a name="line.2671"></a>
<span class="sourceLineNo">2672</span>    return zooKeeper;<a name="line.2672"></a>
<span class="sourceLineNo">2673</span>  }<a name="line.2673"></a>
<span class="sourceLineNo">2674</span><a name="line.2674"></a>
<span class="sourceLineNo">2675</span>  @Override<a name="line.2675"></a>
<span class="sourceLineNo">2676</span>  public MasterCoprocessorHost getMasterCoprocessorHost() {<a name="line.2676"></a>
<span class="sourceLineNo">2677</span>    return cpHost;<a name="line.2677"></a>
<span class="sourceLineNo">2678</span>  }<a name="line.2678"></a>
<span class="sourceLineNo">2679</span><a name="line.2679"></a>
<span class="sourceLineNo">2680</span>  @Override<a name="line.2680"></a>
<span class="sourceLineNo">2681</span>  public MasterQuotaManager getMasterQuotaManager() {<a name="line.2681"></a>
<span class="sourceLineNo">2682</span>    return quotaManager;<a name="line.2682"></a>
<span class="sourceLineNo">2683</span>  }<a name="line.2683"></a>
<span class="sourceLineNo">2684</span><a name="line.2684"></a>
<span class="sourceLineNo">2685</span>  @Override<a name="line.2685"></a>
<span class="sourceLineNo">2686</span>  public ProcedureExecutor&lt;MasterProcedureEnv&gt; getMasterProcedureExecutor() {<a name="line.2686"></a>
<span class="sourceLineNo">2687</span>    return procedureExecutor;<a name="line.2687"></a>
<span class="sourceLineNo">2688</span>  }<a name="line.2688"></a>
<span class="sourceLineNo">2689</span><a name="line.2689"></a>
<span class="sourceLineNo">2690</span>  @Override<a name="line.2690"></a>
<span class="sourceLineNo">2691</span>  public ServerName getServerName() {<a name="line.2691"></a>
<span class="sourceLineNo">2692</span>    return this.serverName;<a name="line.2692"></a>
<span class="sourceLineNo">2693</span>  }<a name="line.2693"></a>
<span class="sourceLineNo">2694</span><a name="line.2694"></a>
<span class="sourceLineNo">2695</span>  @Override<a name="line.2695"></a>
<span class="sourceLineNo">2696</span>  public AssignmentManager getAssignmentManager() {<a name="line.2696"></a>
<span class="sourceLineNo">2697</span>    return this.assignmentManager;<a name="line.2697"></a>
<span class="sourceLineNo">2698</span>  }<a name="line.2698"></a>
<span class="sourceLineNo">2699</span><a name="line.2699"></a>
<span class="sourceLineNo">2700</span>  @Override<a name="line.2700"></a>
<span class="sourceLineNo">2701</span>  public CatalogJanitor getCatalogJanitor() {<a name="line.2701"></a>
<span class="sourceLineNo">2702</span>    return this.catalogJanitorChore;<a name="line.2702"></a>
<span class="sourceLineNo">2703</span>  }<a name="line.2703"></a>
<span class="sourceLineNo">2704</span><a name="line.2704"></a>
<span class="sourceLineNo">2705</span>  public MemoryBoundedLogMessageBuffer getRegionServerFatalLogBuffer() {<a name="line.2705"></a>
<span class="sourceLineNo">2706</span>    return rsFatals;<a name="line.2706"></a>
<span class="sourceLineNo">2707</span>  }<a name="line.2707"></a>
<span class="sourceLineNo">2708</span><a name="line.2708"></a>
<span class="sourceLineNo">2709</span>  /**<a name="line.2709"></a>
<span class="sourceLineNo">2710</span>   * Shutdown the cluster.<a name="line.2710"></a>
<span class="sourceLineNo">2711</span>   * Master runs a coordinated stop of all RegionServers and then itself.<a name="line.2711"></a>
<span class="sourceLineNo">2712</span>   */<a name="line.2712"></a>
<span class="sourceLineNo">2713</span>  public void shutdown() throws IOException {<a name="line.2713"></a>
<span class="sourceLineNo">2714</span>    if (cpHost != null) {<a name="line.2714"></a>
<span class="sourceLineNo">2715</span>      cpHost.preShutdown();<a name="line.2715"></a>
<span class="sourceLineNo">2716</span>    }<a name="line.2716"></a>
<span class="sourceLineNo">2717</span><a name="line.2717"></a>
<span class="sourceLineNo">2718</span>    // Tell the servermanager cluster shutdown has been called. This makes it so when Master is<a name="line.2718"></a>
<span class="sourceLineNo">2719</span>    // last running server, it'll stop itself. Next, we broadcast the cluster shutdown by setting<a name="line.2719"></a>
<span class="sourceLineNo">2720</span>    // the cluster status as down. RegionServers will notice this change in state and will start<a name="line.2720"></a>
<span class="sourceLineNo">2721</span>    // shutting themselves down. When last has exited, Master can go down.<a name="line.2721"></a>
<span class="sourceLineNo">2722</span>    if (this.serverManager != null) {<a name="line.2722"></a>
<span class="sourceLineNo">2723</span>      this.serverManager.shutdownCluster();<a name="line.2723"></a>
<span class="sourceLineNo">2724</span>    }<a name="line.2724"></a>
<span class="sourceLineNo">2725</span>    if (this.clusterStatusTracker != null) {<a name="line.2725"></a>
<span class="sourceLineNo">2726</span>      try {<a name="line.2726"></a>
<span class="sourceLineNo">2727</span>        this.clusterStatusTracker.setClusterDown();<a name="line.2727"></a>
<span class="sourceLineNo">2728</span>      } catch (KeeperException e) {<a name="line.2728"></a>
<span class="sourceLineNo">2729</span>        LOG.error("ZooKeeper exception trying to set cluster as down in ZK", e);<a name="line.2729"></a>
<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
<span class="sourceLineNo">2731</span>    }<a name="line.2731"></a>
<span class="sourceLineNo">2732</span>    // Stop the procedure executor. Will stop any ongoing assign, unassign, server crash etc.,<a name="line.2732"></a>
<span class="sourceLineNo">2733</span>    // processing so we can go down.<a name="line.2733"></a>
<span class="sourceLineNo">2734</span>    if (this.procedureExecutor != null) {<a name="line.2734"></a>
<span class="sourceLineNo">2735</span>      this.procedureExecutor.stop();<a name="line.2735"></a>
<span class="sourceLineNo">2736</span>    }<a name="line.2736"></a>
<span class="sourceLineNo">2737</span>    // Shutdown our cluster connection. This will kill any hosted RPCs that might be going on;<a name="line.2737"></a>
<span class="sourceLineNo">2738</span>    // this is what we want especially if the Master is in startup phase doing call outs to<a name="line.2738"></a>
<span class="sourceLineNo">2739</span>    // hbase:meta, etc. when cluster is down. Without ths connection close, we'd have to wait on<a name="line.2739"></a>
<span class="sourceLineNo">2740</span>    // the rpc to timeout.<a name="line.2740"></a>
<span class="sourceLineNo">2741</span>    if (this.asyncClusterConnection != null) {<a name="line.2741"></a>
<span class="sourceLineNo">2742</span>      this.asyncClusterConnection.close();<a name="line.2742"></a>
<span class="sourceLineNo">2743</span>    }<a name="line.2743"></a>
<span class="sourceLineNo">2744</span>  }<a name="line.2744"></a>
<span class="sourceLineNo">2745</span><a name="line.2745"></a>
<span class="sourceLineNo">2746</span>  public void stopMaster() throws IOException {<a name="line.2746"></a>
<span class="sourceLineNo">2747</span>    if (cpHost != null) {<a name="line.2747"></a>
<span class="sourceLineNo">2748</span>      cpHost.preStopMaster();<a name="line.2748"></a>
<span class="sourceLineNo">2749</span>    }<a name="line.2749"></a>
<span class="sourceLineNo">2750</span>    stop("Stopped by " + Thread.currentThread().getName());<a name="line.2750"></a>
<span class="sourceLineNo">2751</span>  }<a name="line.2751"></a>
<span class="sourceLineNo">2752</span><a name="line.2752"></a>
<span class="sourceLineNo">2753</span>  @Override<a name="line.2753"></a>
<span class="sourceLineNo">2754</span>  public void stop(String msg) {<a name="line.2754"></a>
<span class="sourceLineNo">2755</span>    if (!isStopped()) {<a name="line.2755"></a>
<span class="sourceLineNo">2756</span>      super.stop(msg);<a name="line.2756"></a>
<span class="sourceLineNo">2757</span>      if (this.activeMasterManager != null) {<a name="line.2757"></a>
<span class="sourceLineNo">2758</span>        this.activeMasterManager.stop();<a name="line.2758"></a>
<span class="sourceLineNo">2759</span>      }<a name="line.2759"></a>
<span class="sourceLineNo">2760</span>    }<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>  @InterfaceAudience.Private<a name="line.2763"></a>
<span class="sourceLineNo">2764</span>  protected void checkServiceStarted() throws ServerNotRunningYetException {<a name="line.2764"></a>
<span class="sourceLineNo">2765</span>    if (!serviceStarted) {<a name="line.2765"></a>
<span class="sourceLineNo">2766</span>      throw new ServerNotRunningYetException("Server is not running yet");<a name="line.2766"></a>
<span class="sourceLineNo">2767</span>    }<a name="line.2767"></a>
<span class="sourceLineNo">2768</span>  }<a name="line.2768"></a>
<span class="sourceLineNo">2769</span><a name="line.2769"></a>
<span class="sourceLineNo">2770</span>  void checkInitialized() throws PleaseHoldException, ServerNotRunningYetException,<a name="line.2770"></a>
<span class="sourceLineNo">2771</span>      MasterNotRunningException, MasterStoppedException {<a name="line.2771"></a>
<span class="sourceLineNo">2772</span>    checkServiceStarted();<a name="line.2772"></a>
<span class="sourceLineNo">2773</span>    if (!isInitialized()) {<a name="line.2773"></a>
<span class="sourceLineNo">2774</span>      throw new PleaseHoldException("Master is initializing");<a name="line.2774"></a>
<span class="sourceLineNo">2775</span>    }<a name="line.2775"></a>
<span class="sourceLineNo">2776</span>    if (isStopped()) {<a name="line.2776"></a>
<span class="sourceLineNo">2777</span>      throw new MasterStoppedException();<a name="line.2777"></a>
<span class="sourceLineNo">2778</span>    }<a name="line.2778"></a>
<span class="sourceLineNo">2779</span>  }<a name="line.2779"></a>
<span class="sourceLineNo">2780</span><a name="line.2780"></a>
<span class="sourceLineNo">2781</span>  /**<a name="line.2781"></a>
<span class="sourceLineNo">2782</span>   * Report whether this master is currently the active master or not.<a name="line.2782"></a>
<span class="sourceLineNo">2783</span>   * If not active master, we are parked on ZK waiting to become active.<a name="line.2783"></a>
<span class="sourceLineNo">2784</span>   *<a name="line.2784"></a>
<span class="sourceLineNo">2785</span>   * This method is used for testing.<a name="line.2785"></a>
<span class="sourceLineNo">2786</span>   *<a name="line.2786"></a>
<span class="sourceLineNo">2787</span>   * @return true if active master, false if not.<a name="line.2787"></a>
<span class="sourceLineNo">2788</span>   */<a name="line.2788"></a>
<span class="sourceLineNo">2789</span>  @Override<a name="line.2789"></a>
<span class="sourceLineNo">2790</span>  public boolean isActiveMaster() {<a name="line.2790"></a>
<span class="sourceLineNo">2791</span>    return activeMaster;<a name="line.2791"></a>
<span class="sourceLineNo">2792</span>  }<a name="line.2792"></a>
<span class="sourceLineNo">2793</span><a name="line.2793"></a>
<span class="sourceLineNo">2794</span>  /**<a name="line.2794"></a>
<span class="sourceLineNo">2795</span>   * Report whether this master has completed with its initialization and is<a name="line.2795"></a>
<span class="sourceLineNo">2796</span>   * ready.  If ready, the master is also the active master.  A standby master<a name="line.2796"></a>
<span class="sourceLineNo">2797</span>   * is never ready.<a name="line.2797"></a>
<span class="sourceLineNo">2798</span>   *<a name="line.2798"></a>
<span class="sourceLineNo">2799</span>   * This method is used for testing.<a name="line.2799"></a>
<span class="sourceLineNo">2800</span>   *<a name="line.2800"></a>
<span class="sourceLineNo">2801</span>   * @return true if master is ready to go, false if not.<a name="line.2801"></a>
<span class="sourceLineNo">2802</span>   */<a name="line.2802"></a>
<span class="sourceLineNo">2803</span>  @Override<a name="line.2803"></a>
<span class="sourceLineNo">2804</span>  public boolean isInitialized() {<a name="line.2804"></a>
<span class="sourceLineNo">2805</span>    return initialized.isReady();<a name="line.2805"></a>
<span class="sourceLineNo">2806</span>  }<a name="line.2806"></a>
<span class="sourceLineNo">2807</span><a name="line.2807"></a>
<span class="sourceLineNo">2808</span>  /**<a name="line.2808"></a>
<span class="sourceLineNo">2809</span>   * Report whether this master is started<a name="line.2809"></a>
<span class="sourceLineNo">2810</span>   *<a name="line.2810"></a>
<span class="sourceLineNo">2811</span>   * This method is used for testing.<a name="line.2811"></a>
<span class="sourceLineNo">2812</span>   *<a name="line.2812"></a>
<span class="sourceLineNo">2813</span>   * @return true if master is ready to go, false if not.<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>  @Override<a name="line.2816"></a>
<span class="sourceLineNo">2817</span>  public boolean isOnline() {<a name="line.2817"></a>
<span class="sourceLineNo">2818</span>    return serviceStarted;<a name="line.2818"></a>
<span class="sourceLineNo">2819</span>  }<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>   * Report whether this master is in maintenance mode.<a name="line.2822"></a>
<span class="sourceLineNo">2823</span>   *<a name="line.2823"></a>
<span class="sourceLineNo">2824</span>   * @return true if master is in maintenanceMode<a name="line.2824"></a>
<span class="sourceLineNo">2825</span>   */<a name="line.2825"></a>
<span class="sourceLineNo">2826</span>  @Override<a name="line.2826"></a>
<span class="sourceLineNo">2827</span>  public boolean isInMaintenanceMode() {<a name="line.2827"></a>
<span class="sourceLineNo">2828</span>    return maintenanceMode;<a name="line.2828"></a>
<span class="sourceLineNo">2829</span>  }<a name="line.2829"></a>
<span class="sourceLineNo">2830</span><a name="line.2830"></a>
<span class="sourceLineNo">2831</span>  @InterfaceAudience.Private<a name="line.2831"></a>
<span class="sourceLineNo">2832</span>  public void setInitialized(boolean isInitialized) {<a name="line.2832"></a>
<span class="sourceLineNo">2833</span>    procedureExecutor.getEnvironment().setEventReady(initialized, isInitialized);<a name="line.2833"></a>
<span class="sourceLineNo">2834</span>  }<a name="line.2834"></a>
<span class="sourceLineNo">2835</span><a name="line.2835"></a>
<span class="sourceLineNo">2836</span>  @Override<a name="line.2836"></a>
<span class="sourceLineNo">2837</span>  public ProcedureEvent&lt;?&gt; getInitializedEvent() {<a name="line.2837"></a>
<span class="sourceLineNo">2838</span>    return initialized;<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>  /**<a name="line.2841"></a>
<span class="sourceLineNo">2842</span>   * Compute the average load across all region servers.<a name="line.2842"></a>
<span class="sourceLineNo">2843</span>   * Currently, this uses a very naive computation - just uses the number of<a name="line.2843"></a>
<span class="sourceLineNo">2844</span>   * regions being served, ignoring stats about number of requests.<a name="line.2844"></a>
<span class="sourceLineNo">2845</span>   * @return the average load<a name="line.2845"></a>
<span class="sourceLineNo">2846</span>   */<a name="line.2846"></a>
<span class="sourceLineNo">2847</span>  public double getAverageLoad() {<a name="line.2847"></a>
<span class="sourceLineNo">2848</span>    if (this.assignmentManager == null) {<a name="line.2848"></a>
<span class="sourceLineNo">2849</span>      return 0;<a name="line.2849"></a>
<span class="sourceLineNo">2850</span>    }<a name="line.2850"></a>
<span class="sourceLineNo">2851</span><a name="line.2851"></a>
<span class="sourceLineNo">2852</span>    RegionStates regionStates = this.assignmentManager.getRegionStates();<a name="line.2852"></a>
<span class="sourceLineNo">2853</span>    if (regionStates == null) {<a name="line.2853"></a>
<span class="sourceLineNo">2854</span>      return 0;<a name="line.2854"></a>
<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
<span class="sourceLineNo">2856</span>    return regionStates.getAverageLoad();<a name="line.2856"></a>
<span class="sourceLineNo">2857</span>  }<a name="line.2857"></a>
<span class="sourceLineNo">2858</span><a name="line.2858"></a>
<span class="sourceLineNo">2859</span>  @Override<a name="line.2859"></a>
<span class="sourceLineNo">2860</span>  public boolean registerService(Service instance) {<a name="line.2860"></a>
<span class="sourceLineNo">2861</span>    /*<a name="line.2861"></a>
<span class="sourceLineNo">2862</span>     * No stacking of instances is allowed for a single service name<a name="line.2862"></a>
<span class="sourceLineNo">2863</span>     */<a name="line.2863"></a>
<span class="sourceLineNo">2864</span>    Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.2864"></a>
<span class="sourceLineNo">2865</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.2865"></a>
<span class="sourceLineNo">2866</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.2866"></a>
<span class="sourceLineNo">2867</span>      LOG.error("Coprocessor service "+serviceName+<a name="line.2867"></a>
<span class="sourceLineNo">2868</span>          " already registered, rejecting request from "+instance<a name="line.2868"></a>
<span class="sourceLineNo">2869</span>      );<a name="line.2869"></a>
<span class="sourceLineNo">2870</span>      return false;<a name="line.2870"></a>
<span class="sourceLineNo">2871</span>    }<a name="line.2871"></a>
<span class="sourceLineNo">2872</span><a name="line.2872"></a>
<span class="sourceLineNo">2873</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.2873"></a>
<span class="sourceLineNo">2874</span>    if (LOG.isDebugEnabled()) {<a name="line.2874"></a>
<span class="sourceLineNo">2875</span>      LOG.debug("Registered master coprocessor service: service="+serviceName);<a name="line.2875"></a>
<span class="sourceLineNo">2876</span>    }<a name="line.2876"></a>
<span class="sourceLineNo">2877</span>    return true;<a name="line.2877"></a>
<span class="sourceLineNo">2878</span>  }<a name="line.2878"></a>
<span class="sourceLineNo">2879</span><a name="line.2879"></a>
<span class="sourceLineNo">2880</span>  /**<a name="line.2880"></a>
<span class="sourceLineNo">2881</span>   * Utility for constructing an instance of the passed HMaster class.<a name="line.2881"></a>
<span class="sourceLineNo">2882</span>   * @param masterClass<a name="line.2882"></a>
<span class="sourceLineNo">2883</span>   * @return HMaster instance.<a name="line.2883"></a>
<span class="sourceLineNo">2884</span>   */<a name="line.2884"></a>
<span class="sourceLineNo">2885</span>  public static HMaster constructMaster(Class&lt;? extends HMaster&gt; masterClass,<a name="line.2885"></a>
<span class="sourceLineNo">2886</span>      final Configuration conf)  {<a name="line.2886"></a>
<span class="sourceLineNo">2887</span>    try {<a name="line.2887"></a>
<span class="sourceLineNo">2888</span>      Constructor&lt;? extends HMaster&gt; c = masterClass.getConstructor(Configuration.class);<a name="line.2888"></a>
<span class="sourceLineNo">2889</span>      return c.newInstance(conf);<a name="line.2889"></a>
<span class="sourceLineNo">2890</span>    } catch(Exception e) {<a name="line.2890"></a>
<span class="sourceLineNo">2891</span>      Throwable error = e;<a name="line.2891"></a>
<span class="sourceLineNo">2892</span>      if (e instanceof InvocationTargetException &amp;&amp;<a name="line.2892"></a>
<span class="sourceLineNo">2893</span>          ((InvocationTargetException)e).getTargetException() != null) {<a name="line.2893"></a>
<span class="sourceLineNo">2894</span>        error = ((InvocationTargetException)e).getTargetException();<a name="line.2894"></a>
<span class="sourceLineNo">2895</span>      }<a name="line.2895"></a>
<span class="sourceLineNo">2896</span>      throw new RuntimeException("Failed construction of Master: " + masterClass.toString() + ". "<a name="line.2896"></a>
<span class="sourceLineNo">2897</span>        , error);<a name="line.2897"></a>
<span class="sourceLineNo">2898</span>    }<a name="line.2898"></a>
<span class="sourceLineNo">2899</span>  }<a name="line.2899"></a>
<span class="sourceLineNo">2900</span><a name="line.2900"></a>
<span class="sourceLineNo">2901</span>  /**<a name="line.2901"></a>
<span class="sourceLineNo">2902</span>   * @see org.apache.hadoop.hbase.master.HMasterCommandLine<a name="line.2902"></a>
<span class="sourceLineNo">2903</span>   */<a name="line.2903"></a>
<span class="sourceLineNo">2904</span>  public static void main(String [] args) {<a name="line.2904"></a>
<span class="sourceLineNo">2905</span>    LOG.info("STARTING service " + HMaster.class.getSimpleName());<a name="line.2905"></a>
<span class="sourceLineNo">2906</span>    VersionInfo.logVersion();<a name="line.2906"></a>
<span class="sourceLineNo">2907</span>    new HMasterCommandLine(HMaster.class).doMain(args);<a name="line.2907"></a>
<span class="sourceLineNo">2908</span>  }<a name="line.2908"></a>
<span class="sourceLineNo">2909</span><a name="line.2909"></a>
<span class="sourceLineNo">2910</span>  public HFileCleaner getHFileCleaner() {<a name="line.2910"></a>
<span class="sourceLineNo">2911</span>    return this.hfileCleaner;<a name="line.2911"></a>
<span class="sourceLineNo">2912</span>  }<a name="line.2912"></a>
<span class="sourceLineNo">2913</span><a name="line.2913"></a>
<span class="sourceLineNo">2914</span>  public LogCleaner getLogCleaner() {<a name="line.2914"></a>
<span class="sourceLineNo">2915</span>    return this.logCleaner;<a name="line.2915"></a>
<span class="sourceLineNo">2916</span>  }<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>   * @return the underlying snapshot manager<a name="line.2919"></a>
<span class="sourceLineNo">2920</span>   */<a name="line.2920"></a>
<span class="sourceLineNo">2921</span>  @Override<a name="line.2921"></a>
<span class="sourceLineNo">2922</span>  public SnapshotManager getSnapshotManager() {<a name="line.2922"></a>
<span class="sourceLineNo">2923</span>    return this.snapshotManager;<a name="line.2923"></a>
<span class="sourceLineNo">2924</span>  }<a name="line.2924"></a>
<span class="sourceLineNo">2925</span><a name="line.2925"></a>
<span class="sourceLineNo">2926</span>  /**<a name="line.2926"></a>
<span class="sourceLineNo">2927</span>   * @return the underlying MasterProcedureManagerHost<a name="line.2927"></a>
<span class="sourceLineNo">2928</span>   */<a name="line.2928"></a>
<span class="sourceLineNo">2929</span>  @Override<a name="line.2929"></a>
<span class="sourceLineNo">2930</span>  public MasterProcedureManagerHost getMasterProcedureManagerHost() {<a name="line.2930"></a>
<span class="sourceLineNo">2931</span>    return mpmHost;<a name="line.2931"></a>
<span class="sourceLineNo">2932</span>  }<a name="line.2932"></a>
<span class="sourceLineNo">2933</span><a name="line.2933"></a>
<span class="sourceLineNo">2934</span>  @Override<a name="line.2934"></a>
<span class="sourceLineNo">2935</span>  public ClusterSchema getClusterSchema() {<a name="line.2935"></a>
<span class="sourceLineNo">2936</span>    return this.clusterSchemaService;<a name="line.2936"></a>
<span class="sourceLineNo">2937</span>  }<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>   * Create a new Namespace.<a name="line.2940"></a>
<span class="sourceLineNo">2941</span>   * @param namespaceDescriptor descriptor for new Namespace<a name="line.2941"></a>
<span class="sourceLineNo">2942</span>   * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.2942"></a>
<span class="sourceLineNo">2943</span>   * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.2943"></a>
<span class="sourceLineNo">2944</span>   * &lt;code&gt;nonceGroup&lt;/code&gt; (the source must ensure each operation gets a unique id).<a name="line.2944"></a>
<span class="sourceLineNo">2945</span>   * @return procedure id<a name="line.2945"></a>
<span class="sourceLineNo">2946</span>   */<a name="line.2946"></a>
<span class="sourceLineNo">2947</span>  long createNamespace(final NamespaceDescriptor namespaceDescriptor, final long nonceGroup,<a name="line.2947"></a>
<span class="sourceLineNo">2948</span>      final long nonce) throws IOException {<a name="line.2948"></a>
<span class="sourceLineNo">2949</span>    checkInitialized();<a name="line.2949"></a>
<span class="sourceLineNo">2950</span><a name="line.2950"></a>
<span class="sourceLineNo">2951</span>    TableName.isLegalNamespaceName(Bytes.toBytes(namespaceDescriptor.getName()));<a name="line.2951"></a>
<span class="sourceLineNo">2952</span><a name="line.2952"></a>
<span class="sourceLineNo">2953</span>    return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.2953"></a>
<span class="sourceLineNo">2954</span>          nonceGroup, nonce) {<a name="line.2954"></a>
<span class="sourceLineNo">2955</span>      @Override<a name="line.2955"></a>
<span class="sourceLineNo">2956</span>      protected void run() throws IOException {<a name="line.2956"></a>
<span class="sourceLineNo">2957</span>        getMaster().getMasterCoprocessorHost().preCreateNamespace(namespaceDescriptor);<a name="line.2957"></a>
<span class="sourceLineNo">2958</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2958"></a>
<span class="sourceLineNo">2959</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2959"></a>
<span class="sourceLineNo">2960</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2960"></a>
<span class="sourceLineNo">2961</span>        LOG.info(getClientIdAuditPrefix() + " creating " + namespaceDescriptor);<a name="line.2961"></a>
<span class="sourceLineNo">2962</span>        // Execute the operation synchronously - wait for the operation to complete before<a name="line.2962"></a>
<span class="sourceLineNo">2963</span>        // continuing.<a name="line.2963"></a>
<span class="sourceLineNo">2964</span>        setProcId(getClusterSchema().createNamespace(namespaceDescriptor, getNonceKey(), latch));<a name="line.2964"></a>
<span class="sourceLineNo">2965</span>        latch.await();<a name="line.2965"></a>
<span class="sourceLineNo">2966</span>        getMaster().getMasterCoprocessorHost().postCreateNamespace(namespaceDescriptor);<a name="line.2966"></a>
<span class="sourceLineNo">2967</span>      }<a name="line.2967"></a>
<span class="sourceLineNo">2968</span><a name="line.2968"></a>
<span class="sourceLineNo">2969</span>      @Override<a name="line.2969"></a>
<span class="sourceLineNo">2970</span>      protected String getDescription() {<a name="line.2970"></a>
<span class="sourceLineNo">2971</span>        return "CreateNamespaceProcedure";<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>  }<a name="line.2974"></a>
<span class="sourceLineNo">2975</span><a name="line.2975"></a>
<span class="sourceLineNo">2976</span>  /**<a name="line.2976"></a>
<span class="sourceLineNo">2977</span>   * Modify an existing Namespace.<a name="line.2977"></a>
<span class="sourceLineNo">2978</span>   * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.2978"></a>
<span class="sourceLineNo">2979</span>   * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.2979"></a>
<span class="sourceLineNo">2980</span>   * &lt;code&gt;nonceGroup&lt;/code&gt; (the source must ensure each operation gets a unique id).<a name="line.2980"></a>
<span class="sourceLineNo">2981</span>   * @return procedure id<a name="line.2981"></a>
<span class="sourceLineNo">2982</span>   */<a name="line.2982"></a>
<span class="sourceLineNo">2983</span>  long modifyNamespace(final NamespaceDescriptor newNsDescriptor, final long nonceGroup,<a name="line.2983"></a>
<span class="sourceLineNo">2984</span>      final long nonce) throws IOException {<a name="line.2984"></a>
<span class="sourceLineNo">2985</span>    checkInitialized();<a name="line.2985"></a>
<span class="sourceLineNo">2986</span><a name="line.2986"></a>
<span class="sourceLineNo">2987</span>    TableName.isLegalNamespaceName(Bytes.toBytes(newNsDescriptor.getName()));<a name="line.2987"></a>
<span class="sourceLineNo">2988</span><a name="line.2988"></a>
<span class="sourceLineNo">2989</span>    return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.2989"></a>
<span class="sourceLineNo">2990</span>          nonceGroup, nonce) {<a name="line.2990"></a>
<span class="sourceLineNo">2991</span>      @Override<a name="line.2991"></a>
<span class="sourceLineNo">2992</span>      protected void run() throws IOException {<a name="line.2992"></a>
<span class="sourceLineNo">2993</span>        NamespaceDescriptor oldNsDescriptor = getNamespace(newNsDescriptor.getName());<a name="line.2993"></a>
<span class="sourceLineNo">2994</span>        getMaster().getMasterCoprocessorHost().preModifyNamespace(oldNsDescriptor, newNsDescriptor);<a name="line.2994"></a>
<span class="sourceLineNo">2995</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2995"></a>
<span class="sourceLineNo">2996</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2996"></a>
<span class="sourceLineNo">2997</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2997"></a>
<span class="sourceLineNo">2998</span>        LOG.info(getClientIdAuditPrefix() + " modify " + newNsDescriptor);<a name="line.2998"></a>
<span class="sourceLineNo">2999</span>        // Execute the operation synchronously - wait for the operation to complete before<a name="line.2999"></a>
<span class="sourceLineNo">3000</span>        // continuing.<a name="line.3000"></a>
<span class="sourceLineNo">3001</span>        setProcId(getClusterSchema().modifyNamespace(newNsDescriptor, getNonceKey(), latch));<a name="line.3001"></a>
<span class="sourceLineNo">3002</span>        latch.await();<a name="line.3002"></a>
<span class="sourceLineNo">3003</span>        getMaster().getMasterCoprocessorHost().postModifyNamespace(oldNsDescriptor,<a name="line.3003"></a>
<span class="sourceLineNo">3004</span>          newNsDescriptor);<a name="line.3004"></a>
<span class="sourceLineNo">3005</span>      }<a name="line.3005"></a>
<span class="sourceLineNo">3006</span><a name="line.3006"></a>
<span class="sourceLineNo">3007</span>      @Override<a name="line.3007"></a>
<span class="sourceLineNo">3008</span>      protected String getDescription() {<a name="line.3008"></a>
<span class="sourceLineNo">3009</span>        return "ModifyNamespaceProcedure";<a name="line.3009"></a>
<span class="sourceLineNo">3010</span>      }<a name="line.3010"></a>
<span class="sourceLineNo">3011</span>    });<a name="line.3011"></a>
<span class="sourceLineNo">3012</span>  }<a name="line.3012"></a>
<span class="sourceLineNo">3013</span><a name="line.3013"></a>
<span class="sourceLineNo">3014</span>  /**<a name="line.3014"></a>
<span class="sourceLineNo">3015</span>   * Delete an existing Namespace. Only empty Namespaces (no tables) can be removed.<a name="line.3015"></a>
<span class="sourceLineNo">3016</span>   * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3016"></a>
<span class="sourceLineNo">3017</span>   * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3017"></a>
<span class="sourceLineNo">3018</span>   * &lt;code&gt;nonceGroup&lt;/code&gt; (the source must ensure each operation gets a unique id).<a name="line.3018"></a>
<span class="sourceLineNo">3019</span>   * @return procedure id<a name="line.3019"></a>
<span class="sourceLineNo">3020</span>   */<a name="line.3020"></a>
<span class="sourceLineNo">3021</span>  long deleteNamespace(final String name, final long nonceGroup, final long nonce)<a name="line.3021"></a>
<span class="sourceLineNo">3022</span>      throws IOException {<a name="line.3022"></a>
<span class="sourceLineNo">3023</span>    checkInitialized();<a name="line.3023"></a>
<span class="sourceLineNo">3024</span><a name="line.3024"></a>
<span class="sourceLineNo">3025</span>    return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3025"></a>
<span class="sourceLineNo">3026</span>          nonceGroup, nonce) {<a name="line.3026"></a>
<span class="sourceLineNo">3027</span>      @Override<a name="line.3027"></a>
<span class="sourceLineNo">3028</span>      protected void run() throws IOException {<a name="line.3028"></a>
<span class="sourceLineNo">3029</span>        getMaster().getMasterCoprocessorHost().preDeleteNamespace(name);<a name="line.3029"></a>
<span class="sourceLineNo">3030</span>        LOG.info(getClientIdAuditPrefix() + " delete " + name);<a name="line.3030"></a>
<span class="sourceLineNo">3031</span>        // Execute the operation synchronously - wait for the operation to complete before<a name="line.3031"></a>
<span class="sourceLineNo">3032</span>        // continuing.<a name="line.3032"></a>
<span class="sourceLineNo">3033</span>        //<a name="line.3033"></a>
<span class="sourceLineNo">3034</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3034"></a>
<span class="sourceLineNo">3035</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3035"></a>
<span class="sourceLineNo">3036</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3036"></a>
<span class="sourceLineNo">3037</span>        setProcId(submitProcedure(<a name="line.3037"></a>
<span class="sourceLineNo">3038</span>              new DeleteNamespaceProcedure(procedureExecutor.getEnvironment(), name, latch)));<a name="line.3038"></a>
<span class="sourceLineNo">3039</span>        latch.await();<a name="line.3039"></a>
<span class="sourceLineNo">3040</span>        // Will not be invoked in the face of Exception thrown by the Procedure's execution<a name="line.3040"></a>
<span class="sourceLineNo">3041</span>        getMaster().getMasterCoprocessorHost().postDeleteNamespace(name);<a name="line.3041"></a>
<span class="sourceLineNo">3042</span>      }<a name="line.3042"></a>
<span class="sourceLineNo">3043</span><a name="line.3043"></a>
<span class="sourceLineNo">3044</span>      @Override<a name="line.3044"></a>
<span class="sourceLineNo">3045</span>      protected String getDescription() {<a name="line.3045"></a>
<span class="sourceLineNo">3046</span>        return "DeleteNamespaceProcedure";<a name="line.3046"></a>
<span class="sourceLineNo">3047</span>      }<a name="line.3047"></a>
<span class="sourceLineNo">3048</span>    });<a name="line.3048"></a>
<span class="sourceLineNo">3049</span>  }<a name="line.3049"></a>
<span class="sourceLineNo">3050</span><a name="line.3050"></a>
<span class="sourceLineNo">3051</span>  /**<a name="line.3051"></a>
<span class="sourceLineNo">3052</span>   * Get a Namespace<a name="line.3052"></a>
<span class="sourceLineNo">3053</span>   * @param name Name of the Namespace<a name="line.3053"></a>
<span class="sourceLineNo">3054</span>   * @return Namespace descriptor for &lt;code&gt;name&lt;/code&gt;<a name="line.3054"></a>
<span class="sourceLineNo">3055</span>   */<a name="line.3055"></a>
<span class="sourceLineNo">3056</span>  NamespaceDescriptor getNamespace(String name) throws IOException {<a name="line.3056"></a>
<span class="sourceLineNo">3057</span>    checkInitialized();<a name="line.3057"></a>
<span class="sourceLineNo">3058</span>    if (this.cpHost != null) this.cpHost.preGetNamespaceDescriptor(name);<a name="line.3058"></a>
<span class="sourceLineNo">3059</span>    NamespaceDescriptor nsd = this.clusterSchemaService.getNamespace(name);<a name="line.3059"></a>
<span class="sourceLineNo">3060</span>    if (this.cpHost != null) this.cpHost.postGetNamespaceDescriptor(nsd);<a name="line.3060"></a>
<span class="sourceLineNo">3061</span>    return nsd;<a name="line.3061"></a>
<span class="sourceLineNo">3062</span>  }<a name="line.3062"></a>
<span class="sourceLineNo">3063</span><a name="line.3063"></a>
<span class="sourceLineNo">3064</span>  /**<a name="line.3064"></a>
<span class="sourceLineNo">3065</span>   * Get all Namespaces<a name="line.3065"></a>
<span class="sourceLineNo">3066</span>   * @return All Namespace descriptors<a name="line.3066"></a>
<span class="sourceLineNo">3067</span>   */<a name="line.3067"></a>
<span class="sourceLineNo">3068</span>  List&lt;NamespaceDescriptor&gt; getNamespaces() throws IOException {<a name="line.3068"></a>
<span class="sourceLineNo">3069</span>    checkInitialized();<a name="line.3069"></a>
<span class="sourceLineNo">3070</span>    final List&lt;NamespaceDescriptor&gt; nsds = new ArrayList&lt;&gt;();<a name="line.3070"></a>
<span class="sourceLineNo">3071</span>    if (cpHost != null) {<a name="line.3071"></a>
<span class="sourceLineNo">3072</span>      cpHost.preListNamespaceDescriptors(nsds);<a name="line.3072"></a>
<span class="sourceLineNo">3073</span>    }<a name="line.3073"></a>
<span class="sourceLineNo">3074</span>    nsds.addAll(this.clusterSchemaService.getNamespaces());<a name="line.3074"></a>
<span class="sourceLineNo">3075</span>    if (this.cpHost != null) {<a name="line.3075"></a>
<span class="sourceLineNo">3076</span>      this.cpHost.postListNamespaceDescriptors(nsds);<a name="line.3076"></a>
<span class="sourceLineNo">3077</span>    }<a name="line.3077"></a>
<span class="sourceLineNo">3078</span>    return nsds;<a name="line.3078"></a>
<span class="sourceLineNo">3079</span>  }<a name="line.3079"></a>
<span class="sourceLineNo">3080</span><a name="line.3080"></a>
<span class="sourceLineNo">3081</span>  /**<a name="line.3081"></a>
<span class="sourceLineNo">3082</span>   * List namespace names<a name="line.3082"></a>
<span class="sourceLineNo">3083</span>   * @return All namespace names<a name="line.3083"></a>
<span class="sourceLineNo">3084</span>   */<a name="line.3084"></a>
<span class="sourceLineNo">3085</span>  public List&lt;String&gt; listNamespaces() throws IOException {<a name="line.3085"></a>
<span class="sourceLineNo">3086</span>    checkInitialized();<a name="line.3086"></a>
<span class="sourceLineNo">3087</span>    List&lt;String&gt; namespaces = new ArrayList&lt;&gt;();<a name="line.3087"></a>
<span class="sourceLineNo">3088</span>    if (cpHost != null) {<a name="line.3088"></a>
<span class="sourceLineNo">3089</span>      cpHost.preListNamespaces(namespaces);<a name="line.3089"></a>
<span class="sourceLineNo">3090</span>    }<a name="line.3090"></a>
<span class="sourceLineNo">3091</span>    for (NamespaceDescriptor namespace : clusterSchemaService.getNamespaces()) {<a name="line.3091"></a>
<span class="sourceLineNo">3092</span>      namespaces.add(namespace.getName());<a name="line.3092"></a>
<span class="sourceLineNo">3093</span>    }<a name="line.3093"></a>
<span class="sourceLineNo">3094</span>    if (cpHost != null) {<a name="line.3094"></a>
<span class="sourceLineNo">3095</span>      cpHost.postListNamespaces(namespaces);<a name="line.3095"></a>
<span class="sourceLineNo">3096</span>    }<a name="line.3096"></a>
<span class="sourceLineNo">3097</span>    return namespaces;<a name="line.3097"></a>
<span class="sourceLineNo">3098</span>  }<a name="line.3098"></a>
<span class="sourceLineNo">3099</span><a name="line.3099"></a>
<span class="sourceLineNo">3100</span>  @Override<a name="line.3100"></a>
<span class="sourceLineNo">3101</span>  public List&lt;TableName&gt; listTableNamesByNamespace(String name) throws IOException {<a name="line.3101"></a>
<span class="sourceLineNo">3102</span>    checkInitialized();<a name="line.3102"></a>
<span class="sourceLineNo">3103</span>    return listTableNames(name, null, true);<a name="line.3103"></a>
<span class="sourceLineNo">3104</span>  }<a name="line.3104"></a>
<span class="sourceLineNo">3105</span><a name="line.3105"></a>
<span class="sourceLineNo">3106</span>  @Override<a name="line.3106"></a>
<span class="sourceLineNo">3107</span>  public List&lt;TableDescriptor&gt; listTableDescriptorsByNamespace(String name) throws IOException {<a name="line.3107"></a>
<span class="sourceLineNo">3108</span>    checkInitialized();<a name="line.3108"></a>
<span class="sourceLineNo">3109</span>    return listTableDescriptors(name, null, null, true);<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>  @Override<a name="line.3112"></a>
<span class="sourceLineNo">3113</span>  public boolean abortProcedure(final long procId, final boolean mayInterruptIfRunning)<a name="line.3113"></a>
<span class="sourceLineNo">3114</span>      throws IOException {<a name="line.3114"></a>
<span class="sourceLineNo">3115</span>    if (cpHost != null) {<a name="line.3115"></a>
<span class="sourceLineNo">3116</span>      cpHost.preAbortProcedure(this.procedureExecutor, procId);<a name="line.3116"></a>
<span class="sourceLineNo">3117</span>    }<a name="line.3117"></a>
<span class="sourceLineNo">3118</span><a name="line.3118"></a>
<span class="sourceLineNo">3119</span>    final boolean result = this.procedureExecutor.abort(procId, mayInterruptIfRunning);<a name="line.3119"></a>
<span class="sourceLineNo">3120</span><a name="line.3120"></a>
<span class="sourceLineNo">3121</span>    if (cpHost != null) {<a name="line.3121"></a>
<span class="sourceLineNo">3122</span>      cpHost.postAbortProcedure();<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>    return result;<a name="line.3125"></a>
<span class="sourceLineNo">3126</span>  }<a name="line.3126"></a>
<span class="sourceLineNo">3127</span><a name="line.3127"></a>
<span class="sourceLineNo">3128</span>  @Override<a name="line.3128"></a>
<span class="sourceLineNo">3129</span>  public List&lt;Procedure&lt;?&gt;&gt; getProcedures() throws IOException {<a name="line.3129"></a>
<span class="sourceLineNo">3130</span>    if (cpHost != null) {<a name="line.3130"></a>
<span class="sourceLineNo">3131</span>      cpHost.preGetProcedures();<a name="line.3131"></a>
<span class="sourceLineNo">3132</span>    }<a name="line.3132"></a>
<span class="sourceLineNo">3133</span><a name="line.3133"></a>
<span class="sourceLineNo">3134</span>    @SuppressWarnings({ "unchecked", "rawtypes" })<a name="line.3134"></a>
<span class="sourceLineNo">3135</span>    List&lt;Procedure&lt;?&gt;&gt; procList = (List) this.procedureExecutor.getProcedures();<a name="line.3135"></a>
<span class="sourceLineNo">3136</span><a name="line.3136"></a>
<span class="sourceLineNo">3137</span>    if (cpHost != null) {<a name="line.3137"></a>
<span class="sourceLineNo">3138</span>      cpHost.postGetProcedures(procList);<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>    return procList;<a name="line.3141"></a>
<span class="sourceLineNo">3142</span>  }<a name="line.3142"></a>
<span class="sourceLineNo">3143</span><a name="line.3143"></a>
<span class="sourceLineNo">3144</span>  @Override<a name="line.3144"></a>
<span class="sourceLineNo">3145</span>  public List&lt;LockedResource&gt; getLocks() throws IOException {<a name="line.3145"></a>
<span class="sourceLineNo">3146</span>    if (cpHost != null) {<a name="line.3146"></a>
<span class="sourceLineNo">3147</span>      cpHost.preGetLocks();<a name="line.3147"></a>
<span class="sourceLineNo">3148</span>    }<a name="line.3148"></a>
<span class="sourceLineNo">3149</span><a name="line.3149"></a>
<span class="sourceLineNo">3150</span>    MasterProcedureScheduler procedureScheduler =<a name="line.3150"></a>
<span class="sourceLineNo">3151</span>      procedureExecutor.getEnvironment().getProcedureScheduler();<a name="line.3151"></a>
<span class="sourceLineNo">3152</span><a name="line.3152"></a>
<span class="sourceLineNo">3153</span>    final List&lt;LockedResource&gt; lockedResources = procedureScheduler.getLocks();<a name="line.3153"></a>
<span class="sourceLineNo">3154</span><a name="line.3154"></a>
<span class="sourceLineNo">3155</span>    if (cpHost != null) {<a name="line.3155"></a>
<span class="sourceLineNo">3156</span>      cpHost.postGetLocks(lockedResources);<a name="line.3156"></a>
<span class="sourceLineNo">3157</span>    }<a name="line.3157"></a>
<span class="sourceLineNo">3158</span><a name="line.3158"></a>
<span class="sourceLineNo">3159</span>    return lockedResources;<a name="line.3159"></a>
<span class="sourceLineNo">3160</span>  }<a name="line.3160"></a>
<span class="sourceLineNo">3161</span><a name="line.3161"></a>
<span class="sourceLineNo">3162</span>  /**<a name="line.3162"></a>
<span class="sourceLineNo">3163</span>   * Returns the list of table descriptors that match the specified request<a name="line.3163"></a>
<span class="sourceLineNo">3164</span>   * @param namespace the namespace to query, or null if querying for all<a name="line.3164"></a>
<span class="sourceLineNo">3165</span>   * @param regex The regular expression to match against, or null if querying for all<a name="line.3165"></a>
<span class="sourceLineNo">3166</span>   * @param tableNameList the list of table names, or null if querying for all<a name="line.3166"></a>
<span class="sourceLineNo">3167</span>   * @param includeSysTables False to match only against userspace tables<a name="line.3167"></a>
<span class="sourceLineNo">3168</span>   * @return the list of table descriptors<a name="line.3168"></a>
<span class="sourceLineNo">3169</span>   */<a name="line.3169"></a>
<span class="sourceLineNo">3170</span>  public List&lt;TableDescriptor&gt; listTableDescriptors(final String namespace, final String regex,<a name="line.3170"></a>
<span class="sourceLineNo">3171</span>      final List&lt;TableName&gt; tableNameList, final boolean includeSysTables)<a name="line.3171"></a>
<span class="sourceLineNo">3172</span>  throws IOException {<a name="line.3172"></a>
<span class="sourceLineNo">3173</span>    List&lt;TableDescriptor&gt; htds = new ArrayList&lt;&gt;();<a name="line.3173"></a>
<span class="sourceLineNo">3174</span>    if (cpHost != null) {<a name="line.3174"></a>
<span class="sourceLineNo">3175</span>      cpHost.preGetTableDescriptors(tableNameList, htds, regex);<a name="line.3175"></a>
<span class="sourceLineNo">3176</span>    }<a name="line.3176"></a>
<span class="sourceLineNo">3177</span>    htds = getTableDescriptors(htds, namespace, regex, tableNameList, includeSysTables);<a name="line.3177"></a>
<span class="sourceLineNo">3178</span>    if (cpHost != null) {<a name="line.3178"></a>
<span class="sourceLineNo">3179</span>      cpHost.postGetTableDescriptors(tableNameList, htds, regex);<a name="line.3179"></a>
<span class="sourceLineNo">3180</span>    }<a name="line.3180"></a>
<span class="sourceLineNo">3181</span>    return htds;<a name="line.3181"></a>
<span class="sourceLineNo">3182</span>  }<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>   * Returns the list of table names that match the specified request<a name="line.3185"></a>
<span class="sourceLineNo">3186</span>   * @param regex The regular expression to match against, or null if querying for all<a name="line.3186"></a>
<span class="sourceLineNo">3187</span>   * @param namespace the namespace to query, or null if querying for all<a name="line.3187"></a>
<span class="sourceLineNo">3188</span>   * @param includeSysTables False to match only against userspace tables<a name="line.3188"></a>
<span class="sourceLineNo">3189</span>   * @return the list of table names<a name="line.3189"></a>
<span class="sourceLineNo">3190</span>   */<a name="line.3190"></a>
<span class="sourceLineNo">3191</span>  public List&lt;TableName&gt; listTableNames(final String namespace, final String regex,<a name="line.3191"></a>
<span class="sourceLineNo">3192</span>      final boolean includeSysTables) throws IOException {<a name="line.3192"></a>
<span class="sourceLineNo">3193</span>    List&lt;TableDescriptor&gt; htds = new ArrayList&lt;&gt;();<a name="line.3193"></a>
<span class="sourceLineNo">3194</span>    if (cpHost != null) {<a name="line.3194"></a>
<span class="sourceLineNo">3195</span>      cpHost.preGetTableNames(htds, regex);<a name="line.3195"></a>
<span class="sourceLineNo">3196</span>    }<a name="line.3196"></a>
<span class="sourceLineNo">3197</span>    htds = getTableDescriptors(htds, namespace, regex, null, includeSysTables);<a name="line.3197"></a>
<span class="sourceLineNo">3198</span>    if (cpHost != null) {<a name="line.3198"></a>
<span class="sourceLineNo">3199</span>      cpHost.postGetTableNames(htds, regex);<a name="line.3199"></a>
<span class="sourceLineNo">3200</span>    }<a name="line.3200"></a>
<span class="sourceLineNo">3201</span>    List&lt;TableName&gt; result = new ArrayList&lt;&gt;(htds.size());<a name="line.3201"></a>
<span class="sourceLineNo">3202</span>    for (TableDescriptor htd: htds) result.add(htd.getTableName());<a name="line.3202"></a>
<span class="sourceLineNo">3203</span>    return result;<a name="line.3203"></a>
<span class="sourceLineNo">3204</span>  }<a name="line.3204"></a>
<span class="sourceLineNo">3205</span><a name="line.3205"></a>
<span class="sourceLineNo">3206</span>  /**<a name="line.3206"></a>
<span class="sourceLineNo">3207</span>   * Return a list of table table descriptors after applying any provided filter parameters. Note<a name="line.3207"></a>
<span class="sourceLineNo">3208</span>   * that the user-facing description of this filter logic is presented on the class-level javadoc<a name="line.3208"></a>
<span class="sourceLineNo">3209</span>   * of {@link NormalizeTableFilterParams}.<a name="line.3209"></a>
<span class="sourceLineNo">3210</span>   */<a name="line.3210"></a>
<span class="sourceLineNo">3211</span>  private List&lt;TableDescriptor&gt; getTableDescriptors(final List&lt;TableDescriptor&gt; htds,<a name="line.3211"></a>
<span class="sourceLineNo">3212</span>      final String namespace, final String regex, final List&lt;TableName&gt; tableNameList,<a name="line.3212"></a>
<span class="sourceLineNo">3213</span>      final boolean includeSysTables)<a name="line.3213"></a>
<span class="sourceLineNo">3214</span>  throws IOException {<a name="line.3214"></a>
<span class="sourceLineNo">3215</span>    if (tableNameList == null || tableNameList.isEmpty()) {<a name="line.3215"></a>
<span class="sourceLineNo">3216</span>      // request for all TableDescriptors<a name="line.3216"></a>
<span class="sourceLineNo">3217</span>      Collection&lt;TableDescriptor&gt; allHtds;<a name="line.3217"></a>
<span class="sourceLineNo">3218</span>      if (namespace != null &amp;&amp; namespace.length() &gt; 0) {<a name="line.3218"></a>
<span class="sourceLineNo">3219</span>        // Do a check on the namespace existence. Will fail if does not exist.<a name="line.3219"></a>
<span class="sourceLineNo">3220</span>        this.clusterSchemaService.getNamespace(namespace);<a name="line.3220"></a>
<span class="sourceLineNo">3221</span>        allHtds = tableDescriptors.getByNamespace(namespace).values();<a name="line.3221"></a>
<span class="sourceLineNo">3222</span>      } else {<a name="line.3222"></a>
<span class="sourceLineNo">3223</span>        allHtds = tableDescriptors.getAll().values();<a name="line.3223"></a>
<span class="sourceLineNo">3224</span>      }<a name="line.3224"></a>
<span class="sourceLineNo">3225</span>      for (TableDescriptor desc: allHtds) {<a name="line.3225"></a>
<span class="sourceLineNo">3226</span>        if (tableStateManager.isTablePresent(desc.getTableName())<a name="line.3226"></a>
<span class="sourceLineNo">3227</span>            &amp;&amp; (includeSysTables || !desc.getTableName().isSystemTable())) {<a name="line.3227"></a>
<span class="sourceLineNo">3228</span>          htds.add(desc);<a name="line.3228"></a>
<span class="sourceLineNo">3229</span>        }<a name="line.3229"></a>
<span class="sourceLineNo">3230</span>      }<a name="line.3230"></a>
<span class="sourceLineNo">3231</span>    } else {<a name="line.3231"></a>
<span class="sourceLineNo">3232</span>      for (TableName s: tableNameList) {<a name="line.3232"></a>
<span class="sourceLineNo">3233</span>        if (tableStateManager.isTablePresent(s)) {<a name="line.3233"></a>
<span class="sourceLineNo">3234</span>          TableDescriptor desc = tableDescriptors.get(s);<a name="line.3234"></a>
<span class="sourceLineNo">3235</span>          if (desc != null) {<a name="line.3235"></a>
<span class="sourceLineNo">3236</span>            htds.add(desc);<a name="line.3236"></a>
<span class="sourceLineNo">3237</span>          }<a name="line.3237"></a>
<span class="sourceLineNo">3238</span>        }<a name="line.3238"></a>
<span class="sourceLineNo">3239</span>      }<a name="line.3239"></a>
<span class="sourceLineNo">3240</span>    }<a name="line.3240"></a>
<span class="sourceLineNo">3241</span><a name="line.3241"></a>
<span class="sourceLineNo">3242</span>    // Retains only those matched by regular expression.<a name="line.3242"></a>
<span class="sourceLineNo">3243</span>    if (regex != null) filterTablesByRegex(htds, Pattern.compile(regex));<a name="line.3243"></a>
<span class="sourceLineNo">3244</span>    return htds;<a name="line.3244"></a>
<span class="sourceLineNo">3245</span>  }<a name="line.3245"></a>
<span class="sourceLineNo">3246</span><a name="line.3246"></a>
<span class="sourceLineNo">3247</span>  /**<a name="line.3247"></a>
<span class="sourceLineNo">3248</span>   * Removes the table descriptors that don't match the pattern.<a name="line.3248"></a>
<span class="sourceLineNo">3249</span>   * @param descriptors list of table descriptors to filter<a name="line.3249"></a>
<span class="sourceLineNo">3250</span>   * @param pattern the regex to use<a name="line.3250"></a>
<span class="sourceLineNo">3251</span>   */<a name="line.3251"></a>
<span class="sourceLineNo">3252</span>  private static void filterTablesByRegex(final Collection&lt;TableDescriptor&gt; descriptors,<a name="line.3252"></a>
<span class="sourceLineNo">3253</span>      final Pattern pattern) {<a name="line.3253"></a>
<span class="sourceLineNo">3254</span>    final String defaultNS = NamespaceDescriptor.DEFAULT_NAMESPACE_NAME_STR;<a name="line.3254"></a>
<span class="sourceLineNo">3255</span>    Iterator&lt;TableDescriptor&gt; itr = descriptors.iterator();<a name="line.3255"></a>
<span class="sourceLineNo">3256</span>    while (itr.hasNext()) {<a name="line.3256"></a>
<span class="sourceLineNo">3257</span>      TableDescriptor htd = itr.next();<a name="line.3257"></a>
<span class="sourceLineNo">3258</span>      String tableName = htd.getTableName().getNameAsString();<a name="line.3258"></a>
<span class="sourceLineNo">3259</span>      boolean matched = pattern.matcher(tableName).matches();<a name="line.3259"></a>
<span class="sourceLineNo">3260</span>      if (!matched &amp;&amp; htd.getTableName().getNamespaceAsString().equals(defaultNS)) {<a name="line.3260"></a>
<span class="sourceLineNo">3261</span>        matched = pattern.matcher(defaultNS + TableName.NAMESPACE_DELIM + tableName).matches();<a name="line.3261"></a>
<span class="sourceLineNo">3262</span>      }<a name="line.3262"></a>
<span class="sourceLineNo">3263</span>      if (!matched) {<a name="line.3263"></a>
<span class="sourceLineNo">3264</span>        itr.remove();<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>  }<a name="line.3267"></a>
<span class="sourceLineNo">3268</span><a name="line.3268"></a>
<span class="sourceLineNo">3269</span>  @Override<a name="line.3269"></a>
<span class="sourceLineNo">3270</span>  public long getLastMajorCompactionTimestamp(TableName table) throws IOException {<a name="line.3270"></a>
<span class="sourceLineNo">3271</span>    return getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.3271"></a>
<span class="sourceLineNo">3272</span>        .getLastMajorCompactionTimestamp(table);<a name="line.3272"></a>
<span class="sourceLineNo">3273</span>  }<a name="line.3273"></a>
<span class="sourceLineNo">3274</span><a name="line.3274"></a>
<span class="sourceLineNo">3275</span>  @Override<a name="line.3275"></a>
<span class="sourceLineNo">3276</span>  public long getLastMajorCompactionTimestampForRegion(byte[] regionName) throws IOException {<a name="line.3276"></a>
<span class="sourceLineNo">3277</span>    return getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.3277"></a>
<span class="sourceLineNo">3278</span>        .getLastMajorCompactionTimestamp(regionName);<a name="line.3278"></a>
<span class="sourceLineNo">3279</span>  }<a name="line.3279"></a>
<span class="sourceLineNo">3280</span><a name="line.3280"></a>
<span class="sourceLineNo">3281</span>  /**<a name="line.3281"></a>
<span class="sourceLineNo">3282</span>   * Gets the mob file compaction state for a specific table.<a name="line.3282"></a>
<span class="sourceLineNo">3283</span>   * Whether all the mob files are selected is known during the compaction execution, but<a name="line.3283"></a>
<span class="sourceLineNo">3284</span>   * the statistic is done just before compaction starts, it is hard to know the compaction<a name="line.3284"></a>
<span class="sourceLineNo">3285</span>   * type at that time, so the rough statistics are chosen for the mob file compaction. Only two<a name="line.3285"></a>
<span class="sourceLineNo">3286</span>   * compaction states are available, CompactionState.MAJOR_AND_MINOR and CompactionState.NONE.<a name="line.3286"></a>
<span class="sourceLineNo">3287</span>   * @param tableName The current table name.<a name="line.3287"></a>
<span class="sourceLineNo">3288</span>   * @return If a given table is in mob file compaction now.<a name="line.3288"></a>
<span class="sourceLineNo">3289</span>   */<a name="line.3289"></a>
<span class="sourceLineNo">3290</span>  public GetRegionInfoResponse.CompactionState getMobCompactionState(TableName tableName) {<a name="line.3290"></a>
<span class="sourceLineNo">3291</span>    AtomicInteger compactionsCount = mobCompactionStates.get(tableName);<a name="line.3291"></a>
<span class="sourceLineNo">3292</span>    if (compactionsCount != null &amp;&amp; compactionsCount.get() != 0) {<a name="line.3292"></a>
<span class="sourceLineNo">3293</span>      return GetRegionInfoResponse.CompactionState.MAJOR_AND_MINOR;<a name="line.3293"></a>
<span class="sourceLineNo">3294</span>    }<a name="line.3294"></a>
<span class="sourceLineNo">3295</span>    return GetRegionInfoResponse.CompactionState.NONE;<a name="line.3295"></a>
<span class="sourceLineNo">3296</span>  }<a name="line.3296"></a>
<span class="sourceLineNo">3297</span><a name="line.3297"></a>
<span class="sourceLineNo">3298</span>  public void reportMobCompactionStart(TableName tableName) throws IOException {<a name="line.3298"></a>
<span class="sourceLineNo">3299</span>    IdLock.Entry lockEntry = null;<a name="line.3299"></a>
<span class="sourceLineNo">3300</span>    try {<a name="line.3300"></a>
<span class="sourceLineNo">3301</span>      lockEntry = mobCompactionLock.getLockEntry(tableName.hashCode());<a name="line.3301"></a>
<span class="sourceLineNo">3302</span>      AtomicInteger compactionsCount = mobCompactionStates.get(tableName);<a name="line.3302"></a>
<span class="sourceLineNo">3303</span>      if (compactionsCount == null) {<a name="line.3303"></a>
<span class="sourceLineNo">3304</span>        compactionsCount = new AtomicInteger(0);<a name="line.3304"></a>
<span class="sourceLineNo">3305</span>        mobCompactionStates.put(tableName, compactionsCount);<a name="line.3305"></a>
<span class="sourceLineNo">3306</span>      }<a name="line.3306"></a>
<span class="sourceLineNo">3307</span>      compactionsCount.incrementAndGet();<a name="line.3307"></a>
<span class="sourceLineNo">3308</span>    } finally {<a name="line.3308"></a>
<span class="sourceLineNo">3309</span>      if (lockEntry != null) {<a name="line.3309"></a>
<span class="sourceLineNo">3310</span>        mobCompactionLock.releaseLockEntry(lockEntry);<a name="line.3310"></a>
<span class="sourceLineNo">3311</span>      }<a name="line.3311"></a>
<span class="sourceLineNo">3312</span>    }<a name="line.3312"></a>
<span class="sourceLineNo">3313</span>  }<a name="line.3313"></a>
<span class="sourceLineNo">3314</span><a name="line.3314"></a>
<span class="sourceLineNo">3315</span>  public void reportMobCompactionEnd(TableName tableName) throws IOException {<a name="line.3315"></a>
<span class="sourceLineNo">3316</span>    IdLock.Entry lockEntry = null;<a name="line.3316"></a>
<span class="sourceLineNo">3317</span>    try {<a name="line.3317"></a>
<span class="sourceLineNo">3318</span>      lockEntry = mobCompactionLock.getLockEntry(tableName.hashCode());<a name="line.3318"></a>
<span class="sourceLineNo">3319</span>      AtomicInteger compactionsCount = mobCompactionStates.get(tableName);<a name="line.3319"></a>
<span class="sourceLineNo">3320</span>      if (compactionsCount != null) {<a name="line.3320"></a>
<span class="sourceLineNo">3321</span>        int count = compactionsCount.decrementAndGet();<a name="line.3321"></a>
<span class="sourceLineNo">3322</span>        // remove the entry if the count is 0.<a name="line.3322"></a>
<span class="sourceLineNo">3323</span>        if (count == 0) {<a name="line.3323"></a>
<span class="sourceLineNo">3324</span>          mobCompactionStates.remove(tableName);<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>    } finally {<a name="line.3327"></a>
<span class="sourceLineNo">3328</span>      if (lockEntry != null) {<a name="line.3328"></a>
<span class="sourceLineNo">3329</span>        mobCompactionLock.releaseLockEntry(lockEntry);<a name="line.3329"></a>
<span class="sourceLineNo">3330</span>      }<a name="line.3330"></a>
<span class="sourceLineNo">3331</span>    }<a name="line.3331"></a>
<span class="sourceLineNo">3332</span>  }<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>  /**<a name="line.3335"></a>
<span class="sourceLineNo">3336</span>   * Queries the state of the {@link LoadBalancerTracker}. If the balancer is not initialized,<a name="line.3336"></a>
<span class="sourceLineNo">3337</span>   * false is returned.<a name="line.3337"></a>
<span class="sourceLineNo">3338</span>   *<a name="line.3338"></a>
<span class="sourceLineNo">3339</span>   * @return The state of the load balancer, or false if the load balancer isn't defined.<a name="line.3339"></a>
<span class="sourceLineNo">3340</span>   */<a name="line.3340"></a>
<span class="sourceLineNo">3341</span>  public boolean isBalancerOn() {<a name="line.3341"></a>
<span class="sourceLineNo">3342</span>    return !isInMaintenanceMode()<a name="line.3342"></a>
<span class="sourceLineNo">3343</span>        &amp;&amp; loadBalancerTracker != null<a name="line.3343"></a>
<span class="sourceLineNo">3344</span>        &amp;&amp; loadBalancerTracker.isBalancerOn();<a name="line.3344"></a>
<span class="sourceLineNo">3345</span>  }<a name="line.3345"></a>
<span class="sourceLineNo">3346</span><a name="line.3346"></a>
<span class="sourceLineNo">3347</span>  /**<a name="line.3347"></a>
<span class="sourceLineNo">3348</span>   * Queries the state of the {@link RegionNormalizerTracker}. If it's not initialized,<a name="line.3348"></a>
<span class="sourceLineNo">3349</span>   * false is returned.<a name="line.3349"></a>
<span class="sourceLineNo">3350</span>   */<a name="line.3350"></a>
<span class="sourceLineNo">3351</span>  public boolean isNormalizerOn() {<a name="line.3351"></a>
<span class="sourceLineNo">3352</span>    return !isInMaintenanceMode()<a name="line.3352"></a>
<span class="sourceLineNo">3353</span>      &amp;&amp; getRegionNormalizerManager().isNormalizerOn();<a name="line.3353"></a>
<span class="sourceLineNo">3354</span>  }<a name="line.3354"></a>
<span class="sourceLineNo">3355</span><a name="line.3355"></a>
<span class="sourceLineNo">3356</span>  /**<a name="line.3356"></a>
<span class="sourceLineNo">3357</span>   * Queries the state of the {@link SplitOrMergeTracker}. If it is not initialized,<a name="line.3357"></a>
<span class="sourceLineNo">3358</span>   * false is returned. If switchType is illegal, false will return.<a name="line.3358"></a>
<span class="sourceLineNo">3359</span>   * @param switchType see {@link org.apache.hadoop.hbase.client.MasterSwitchType}<a name="line.3359"></a>
<span class="sourceLineNo">3360</span>   * @return The state of the switch<a name="line.3360"></a>
<span class="sourceLineNo">3361</span>   */<a name="line.3361"></a>
<span class="sourceLineNo">3362</span>  @Override<a name="line.3362"></a>
<span class="sourceLineNo">3363</span>  public boolean isSplitOrMergeEnabled(MasterSwitchType switchType) {<a name="line.3363"></a>
<span class="sourceLineNo">3364</span>    return !isInMaintenanceMode()<a name="line.3364"></a>
<span class="sourceLineNo">3365</span>        &amp;&amp; splitOrMergeTracker != null<a name="line.3365"></a>
<span class="sourceLineNo">3366</span>        &amp;&amp; splitOrMergeTracker.isSplitOrMergeEnabled(switchType);<a name="line.3366"></a>
<span class="sourceLineNo">3367</span>  }<a name="line.3367"></a>
<span class="sourceLineNo">3368</span><a name="line.3368"></a>
<span class="sourceLineNo">3369</span>  /**<a name="line.3369"></a>
<span class="sourceLineNo">3370</span>   * Fetch the configured {@link LoadBalancer} class name. If none is set, a default is returned.<a name="line.3370"></a>
<span class="sourceLineNo">3371</span>   * &lt;p/&gt;<a name="line.3371"></a>
<span class="sourceLineNo">3372</span>   * Notice that, the base load balancer will always be {@link RSGroupBasedLoadBalancer} now, so<a name="line.3372"></a>
<span class="sourceLineNo">3373</span>   * this method will return the balancer used inside each rs group.<a name="line.3373"></a>
<span class="sourceLineNo">3374</span>   * @return The name of the {@link LoadBalancer} in use.<a name="line.3374"></a>
<span class="sourceLineNo">3375</span>   */<a name="line.3375"></a>
<span class="sourceLineNo">3376</span>  public String getLoadBalancerClassName() {<a name="line.3376"></a>
<span class="sourceLineNo">3377</span>    return conf.get(HConstants.HBASE_MASTER_LOADBALANCER_CLASS,<a name="line.3377"></a>
<span class="sourceLineNo">3378</span>      LoadBalancerFactory.getDefaultLoadBalancerClass().getName());<a name="line.3378"></a>
<span class="sourceLineNo">3379</span>  }<a name="line.3379"></a>
<span class="sourceLineNo">3380</span><a name="line.3380"></a>
<span class="sourceLineNo">3381</span>  public SplitOrMergeTracker getSplitOrMergeTracker() {<a name="line.3381"></a>
<span class="sourceLineNo">3382</span>    return splitOrMergeTracker;<a name="line.3382"></a>
<span class="sourceLineNo">3383</span>  }<a name="line.3383"></a>
<span class="sourceLineNo">3384</span><a name="line.3384"></a>
<span class="sourceLineNo">3385</span>  @Override<a name="line.3385"></a>
<span class="sourceLineNo">3386</span>  public RSGroupBasedLoadBalancer getLoadBalancer() {<a name="line.3386"></a>
<span class="sourceLineNo">3387</span>    return balancer;<a name="line.3387"></a>
<span class="sourceLineNo">3388</span>  }<a name="line.3388"></a>
<span class="sourceLineNo">3389</span><a name="line.3389"></a>
<span class="sourceLineNo">3390</span>  @Override<a name="line.3390"></a>
<span class="sourceLineNo">3391</span>  public FavoredNodesManager getFavoredNodesManager() {<a name="line.3391"></a>
<span class="sourceLineNo">3392</span>    return balancer.getFavoredNodesManager();<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>  private long executePeerProcedure(AbstractPeerProcedure&lt;?&gt; procedure) throws IOException {<a name="line.3395"></a>
<span class="sourceLineNo">3396</span>    long procId = procedureExecutor.submitProcedure(procedure);<a name="line.3396"></a>
<span class="sourceLineNo">3397</span>    procedure.getLatch().await();<a name="line.3397"></a>
<span class="sourceLineNo">3398</span>    return procId;<a name="line.3398"></a>
<span class="sourceLineNo">3399</span>  }<a name="line.3399"></a>
<span class="sourceLineNo">3400</span><a name="line.3400"></a>
<span class="sourceLineNo">3401</span>  @Override<a name="line.3401"></a>
<span class="sourceLineNo">3402</span>  public long addReplicationPeer(String peerId, ReplicationPeerConfig peerConfig, boolean enabled)<a name="line.3402"></a>
<span class="sourceLineNo">3403</span>      throws ReplicationException, IOException {<a name="line.3403"></a>
<span class="sourceLineNo">3404</span>    LOG.info(getClientIdAuditPrefix() + " creating replication peer, id=" + peerId + ", config=" +<a name="line.3404"></a>
<span class="sourceLineNo">3405</span>      peerConfig + ", state=" + (enabled ? "ENABLED" : "DISABLED"));<a name="line.3405"></a>
<span class="sourceLineNo">3406</span>    return executePeerProcedure(new AddPeerProcedure(peerId, peerConfig, enabled));<a name="line.3406"></a>
<span class="sourceLineNo">3407</span>  }<a name="line.3407"></a>
<span class="sourceLineNo">3408</span><a name="line.3408"></a>
<span class="sourceLineNo">3409</span>  @Override<a name="line.3409"></a>
<span class="sourceLineNo">3410</span>  public long removeReplicationPeer(String peerId) throws ReplicationException, IOException {<a name="line.3410"></a>
<span class="sourceLineNo">3411</span>    LOG.info(getClientIdAuditPrefix() + " removing replication peer, id=" + peerId);<a name="line.3411"></a>
<span class="sourceLineNo">3412</span>    return executePeerProcedure(new RemovePeerProcedure(peerId));<a name="line.3412"></a>
<span class="sourceLineNo">3413</span>  }<a name="line.3413"></a>
<span class="sourceLineNo">3414</span><a name="line.3414"></a>
<span class="sourceLineNo">3415</span>  @Override<a name="line.3415"></a>
<span class="sourceLineNo">3416</span>  public long enableReplicationPeer(String peerId) throws ReplicationException, IOException {<a name="line.3416"></a>
<span class="sourceLineNo">3417</span>    LOG.info(getClientIdAuditPrefix() + " enable replication peer, id=" + peerId);<a name="line.3417"></a>
<span class="sourceLineNo">3418</span>    return executePeerProcedure(new EnablePeerProcedure(peerId));<a name="line.3418"></a>
<span class="sourceLineNo">3419</span>  }<a name="line.3419"></a>
<span class="sourceLineNo">3420</span><a name="line.3420"></a>
<span class="sourceLineNo">3421</span>  @Override<a name="line.3421"></a>
<span class="sourceLineNo">3422</span>  public long disableReplicationPeer(String peerId) throws ReplicationException, IOException {<a name="line.3422"></a>
<span class="sourceLineNo">3423</span>    LOG.info(getClientIdAuditPrefix() + " disable replication peer, id=" + peerId);<a name="line.3423"></a>
<span class="sourceLineNo">3424</span>    return executePeerProcedure(new DisablePeerProcedure(peerId));<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>  @Override<a name="line.3427"></a>
<span class="sourceLineNo">3428</span>  public ReplicationPeerConfig getReplicationPeerConfig(String peerId)<a name="line.3428"></a>
<span class="sourceLineNo">3429</span>      throws ReplicationException, IOException {<a name="line.3429"></a>
<span class="sourceLineNo">3430</span>    if (cpHost != null) {<a name="line.3430"></a>
<span class="sourceLineNo">3431</span>      cpHost.preGetReplicationPeerConfig(peerId);<a name="line.3431"></a>
<span class="sourceLineNo">3432</span>    }<a name="line.3432"></a>
<span class="sourceLineNo">3433</span>    LOG.info(getClientIdAuditPrefix() + " get replication peer config, id=" + peerId);<a name="line.3433"></a>
<span class="sourceLineNo">3434</span>    ReplicationPeerConfig peerConfig = this.replicationPeerManager.getPeerConfig(peerId)<a name="line.3434"></a>
<span class="sourceLineNo">3435</span>        .orElseThrow(() -&gt; new ReplicationPeerNotFoundException(peerId));<a name="line.3435"></a>
<span class="sourceLineNo">3436</span>    if (cpHost != null) {<a name="line.3436"></a>
<span class="sourceLineNo">3437</span>      cpHost.postGetReplicationPeerConfig(peerId);<a name="line.3437"></a>
<span class="sourceLineNo">3438</span>    }<a name="line.3438"></a>
<span class="sourceLineNo">3439</span>    return peerConfig;<a name="line.3439"></a>
<span class="sourceLineNo">3440</span>  }<a name="line.3440"></a>
<span class="sourceLineNo">3441</span><a name="line.3441"></a>
<span class="sourceLineNo">3442</span>  @Override<a name="line.3442"></a>
<span class="sourceLineNo">3443</span>  public long updateReplicationPeerConfig(String peerId, ReplicationPeerConfig peerConfig)<a name="line.3443"></a>
<span class="sourceLineNo">3444</span>      throws ReplicationException, IOException {<a name="line.3444"></a>
<span class="sourceLineNo">3445</span>    LOG.info(getClientIdAuditPrefix() + " update replication peer config, id=" + peerId +<a name="line.3445"></a>
<span class="sourceLineNo">3446</span>      ", config=" + peerConfig);<a name="line.3446"></a>
<span class="sourceLineNo">3447</span>    return executePeerProcedure(new UpdatePeerConfigProcedure(peerId, peerConfig));<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>  @Override<a name="line.3450"></a>
<span class="sourceLineNo">3451</span>  public List&lt;ReplicationPeerDescription&gt; listReplicationPeers(String regex)<a name="line.3451"></a>
<span class="sourceLineNo">3452</span>      throws ReplicationException, IOException {<a name="line.3452"></a>
<span class="sourceLineNo">3453</span>    if (cpHost != null) {<a name="line.3453"></a>
<span class="sourceLineNo">3454</span>      cpHost.preListReplicationPeers(regex);<a name="line.3454"></a>
<span class="sourceLineNo">3455</span>    }<a name="line.3455"></a>
<span class="sourceLineNo">3456</span>    LOG.debug("{} list replication peers, regex={}", getClientIdAuditPrefix(), regex);<a name="line.3456"></a>
<span class="sourceLineNo">3457</span>    Pattern pattern = regex == null ? null : Pattern.compile(regex);<a name="line.3457"></a>
<span class="sourceLineNo">3458</span>    List&lt;ReplicationPeerDescription&gt; peers =<a name="line.3458"></a>
<span class="sourceLineNo">3459</span>      this.replicationPeerManager.listPeers(pattern);<a name="line.3459"></a>
<span class="sourceLineNo">3460</span>    if (cpHost != null) {<a name="line.3460"></a>
<span class="sourceLineNo">3461</span>      cpHost.postListReplicationPeers(regex);<a name="line.3461"></a>
<span class="sourceLineNo">3462</span>    }<a name="line.3462"></a>
<span class="sourceLineNo">3463</span>    return peers;<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 long transitReplicationPeerSyncReplicationState(String peerId, SyncReplicationState state)<a name="line.3467"></a>
<span class="sourceLineNo">3468</span>    throws ReplicationException, IOException {<a name="line.3468"></a>
<span class="sourceLineNo">3469</span>    LOG.info(<a name="line.3469"></a>
<span class="sourceLineNo">3470</span>      getClientIdAuditPrefix() +<a name="line.3470"></a>
<span class="sourceLineNo">3471</span>        " transit current cluster state to {} in a synchronous replication peer id={}",<a name="line.3471"></a>
<span class="sourceLineNo">3472</span>      state, peerId);<a name="line.3472"></a>
<span class="sourceLineNo">3473</span>    return executePeerProcedure(new TransitPeerSyncReplicationStateProcedure(peerId, state));<a name="line.3473"></a>
<span class="sourceLineNo">3474</span>  }<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>   * Mark region server(s) as decommissioned (previously called 'draining') to prevent additional<a name="line.3477"></a>
<span class="sourceLineNo">3478</span>   * regions from getting assigned to them. Also unload the regions on the servers asynchronously.0<a name="line.3478"></a>
<span class="sourceLineNo">3479</span>   * @param servers Region servers to decommission.<a name="line.3479"></a>
<span class="sourceLineNo">3480</span>   */<a name="line.3480"></a>
<span class="sourceLineNo">3481</span>  public void decommissionRegionServers(final List&lt;ServerName&gt; servers, final boolean offload)<a name="line.3481"></a>
<span class="sourceLineNo">3482</span>      throws IOException {<a name="line.3482"></a>
<span class="sourceLineNo">3483</span>    List&lt;ServerName&gt; serversAdded = new ArrayList&lt;&gt;(servers.size());<a name="line.3483"></a>
<span class="sourceLineNo">3484</span>    // Place the decommission marker first.<a name="line.3484"></a>
<span class="sourceLineNo">3485</span>    String parentZnode = getZooKeeper().getZNodePaths().drainingZNode;<a name="line.3485"></a>
<span class="sourceLineNo">3486</span>    for (ServerName server : servers) {<a name="line.3486"></a>
<span class="sourceLineNo">3487</span>      try {<a name="line.3487"></a>
<span class="sourceLineNo">3488</span>        String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3488"></a>
<span class="sourceLineNo">3489</span>        ZKUtil.createAndFailSilent(getZooKeeper(), node);<a name="line.3489"></a>
<span class="sourceLineNo">3490</span>      } catch (KeeperException ke) {<a name="line.3490"></a>
<span class="sourceLineNo">3491</span>        throw new HBaseIOException(<a name="line.3491"></a>
<span class="sourceLineNo">3492</span>          this.zooKeeper.prefix("Unable to decommission '" + server.getServerName() + "'."), ke);<a name="line.3492"></a>
<span class="sourceLineNo">3493</span>      }<a name="line.3493"></a>
<span class="sourceLineNo">3494</span>      if (this.serverManager.addServerToDrainList(server)) {<a name="line.3494"></a>
<span class="sourceLineNo">3495</span>        serversAdded.add(server);<a name="line.3495"></a>
<span class="sourceLineNo">3496</span>      }<a name="line.3496"></a>
<span class="sourceLineNo">3497</span>    }<a name="line.3497"></a>
<span class="sourceLineNo">3498</span>    // Move the regions off the decommissioned servers.<a name="line.3498"></a>
<span class="sourceLineNo">3499</span>    if (offload) {<a name="line.3499"></a>
<span class="sourceLineNo">3500</span>      final List&lt;ServerName&gt; destServers = this.serverManager.createDestinationServersList();<a name="line.3500"></a>
<span class="sourceLineNo">3501</span>      for (ServerName server : serversAdded) {<a name="line.3501"></a>
<span class="sourceLineNo">3502</span>        final List&lt;RegionInfo&gt; regionsOnServer = this.assignmentManager.getRegionsOnServer(server);<a name="line.3502"></a>
<span class="sourceLineNo">3503</span>        for (RegionInfo hri : regionsOnServer) {<a name="line.3503"></a>
<span class="sourceLineNo">3504</span>          ServerName dest = balancer.randomAssignment(hri, destServers);<a name="line.3504"></a>
<span class="sourceLineNo">3505</span>          if (dest == null) {<a name="line.3505"></a>
<span class="sourceLineNo">3506</span>            throw new HBaseIOException("Unable to determine a plan to move " + hri);<a name="line.3506"></a>
<span class="sourceLineNo">3507</span>          }<a name="line.3507"></a>
<span class="sourceLineNo">3508</span>          RegionPlan rp = new RegionPlan(hri, server, dest);<a name="line.3508"></a>
<span class="sourceLineNo">3509</span>          this.assignmentManager.moveAsync(rp);<a name="line.3509"></a>
<span class="sourceLineNo">3510</span>        }<a name="line.3510"></a>
<span class="sourceLineNo">3511</span>      }<a name="line.3511"></a>
<span class="sourceLineNo">3512</span>    }<a name="line.3512"></a>
<span class="sourceLineNo">3513</span>  }<a name="line.3513"></a>
<span class="sourceLineNo">3514</span><a name="line.3514"></a>
<span class="sourceLineNo">3515</span>  /**<a name="line.3515"></a>
<span class="sourceLineNo">3516</span>   * List region servers marked as decommissioned (previously called 'draining') to not get regions<a name="line.3516"></a>
<span class="sourceLineNo">3517</span>   * assigned to them.<a name="line.3517"></a>
<span class="sourceLineNo">3518</span>   * @return List of decommissioned servers.<a name="line.3518"></a>
<span class="sourceLineNo">3519</span>   */<a name="line.3519"></a>
<span class="sourceLineNo">3520</span>  public List&lt;ServerName&gt; listDecommissionedRegionServers() {<a name="line.3520"></a>
<span class="sourceLineNo">3521</span>    return this.serverManager.getDrainingServersList();<a name="line.3521"></a>
<span class="sourceLineNo">3522</span>  }<a name="line.3522"></a>
<span class="sourceLineNo">3523</span><a name="line.3523"></a>
<span class="sourceLineNo">3524</span>  /**<a name="line.3524"></a>
<span class="sourceLineNo">3525</span>   * Remove decommission marker (previously called 'draining') from a region server to allow regions<a name="line.3525"></a>
<span class="sourceLineNo">3526</span>   * assignments. Load regions onto the server asynchronously if a list of regions is given<a name="line.3526"></a>
<span class="sourceLineNo">3527</span>   * @param server Region server to remove decommission marker from.<a name="line.3527"></a>
<span class="sourceLineNo">3528</span>   */<a name="line.3528"></a>
<span class="sourceLineNo">3529</span>  public void recommissionRegionServer(final ServerName server,<a name="line.3529"></a>
<span class="sourceLineNo">3530</span>      final List&lt;byte[]&gt; encodedRegionNames) throws IOException {<a name="line.3530"></a>
<span class="sourceLineNo">3531</span>    // Remove the server from decommissioned (draining) server list.<a name="line.3531"></a>
<span class="sourceLineNo">3532</span>    String parentZnode = getZooKeeper().getZNodePaths().drainingZNode;<a name="line.3532"></a>
<span class="sourceLineNo">3533</span>    String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3533"></a>
<span class="sourceLineNo">3534</span>    try {<a name="line.3534"></a>
<span class="sourceLineNo">3535</span>      ZKUtil.deleteNodeFailSilent(getZooKeeper(), node);<a name="line.3535"></a>
<span class="sourceLineNo">3536</span>    } catch (KeeperException ke) {<a name="line.3536"></a>
<span class="sourceLineNo">3537</span>      throw new HBaseIOException(<a name="line.3537"></a>
<span class="sourceLineNo">3538</span>        this.zooKeeper.prefix("Unable to recommission '" + server.getServerName() + "'."), ke);<a name="line.3538"></a>
<span class="sourceLineNo">3539</span>    }<a name="line.3539"></a>
<span class="sourceLineNo">3540</span>    this.serverManager.removeServerFromDrainList(server);<a name="line.3540"></a>
<span class="sourceLineNo">3541</span><a name="line.3541"></a>
<span class="sourceLineNo">3542</span>    // Load the regions onto the server if we are given a list of regions.<a name="line.3542"></a>
<span class="sourceLineNo">3543</span>    if (encodedRegionNames == null || encodedRegionNames.isEmpty()) {<a name="line.3543"></a>
<span class="sourceLineNo">3544</span>      return;<a name="line.3544"></a>
<span class="sourceLineNo">3545</span>    }<a name="line.3545"></a>
<span class="sourceLineNo">3546</span>    if (!this.serverManager.isServerOnline(server)) {<a name="line.3546"></a>
<span class="sourceLineNo">3547</span>      return;<a name="line.3547"></a>
<span class="sourceLineNo">3548</span>    }<a name="line.3548"></a>
<span class="sourceLineNo">3549</span>    for (byte[] encodedRegionName : encodedRegionNames) {<a name="line.3549"></a>
<span class="sourceLineNo">3550</span>      RegionState regionState =<a name="line.3550"></a>
<span class="sourceLineNo">3551</span>        assignmentManager.getRegionStates().getRegionState(Bytes.toString(encodedRegionName));<a name="line.3551"></a>
<span class="sourceLineNo">3552</span>      if (regionState == null) {<a name="line.3552"></a>
<span class="sourceLineNo">3553</span>        LOG.warn("Unknown region " + Bytes.toStringBinary(encodedRegionName));<a name="line.3553"></a>
<span class="sourceLineNo">3554</span>        continue;<a name="line.3554"></a>
<span class="sourceLineNo">3555</span>      }<a name="line.3555"></a>
<span class="sourceLineNo">3556</span>      RegionInfo hri = regionState.getRegion();<a name="line.3556"></a>
<span class="sourceLineNo">3557</span>      if (server.equals(regionState.getServerName())) {<a name="line.3557"></a>
<span class="sourceLineNo">3558</span>        LOG.info("Skipping move of region " + hri.getRegionNameAsString() +<a name="line.3558"></a>
<span class="sourceLineNo">3559</span>          " because region already assigned to the same server " + server + ".");<a name="line.3559"></a>
<span class="sourceLineNo">3560</span>        continue;<a name="line.3560"></a>
<span class="sourceLineNo">3561</span>      }<a name="line.3561"></a>
<span class="sourceLineNo">3562</span>      RegionPlan rp = new RegionPlan(hri, regionState.getServerName(), server);<a name="line.3562"></a>
<span class="sourceLineNo">3563</span>      this.assignmentManager.moveAsync(rp);<a name="line.3563"></a>
<span class="sourceLineNo">3564</span>    }<a name="line.3564"></a>
<span class="sourceLineNo">3565</span>  }<a name="line.3565"></a>
<span class="sourceLineNo">3566</span><a name="line.3566"></a>
<span class="sourceLineNo">3567</span>  @Override<a name="line.3567"></a>
<span class="sourceLineNo">3568</span>  public LockManager getLockManager() {<a name="line.3568"></a>
<span class="sourceLineNo">3569</span>    return lockManager;<a name="line.3569"></a>
<span class="sourceLineNo">3570</span>  }<a name="line.3570"></a>
<span class="sourceLineNo">3571</span><a name="line.3571"></a>
<span class="sourceLineNo">3572</span>  public QuotaObserverChore getQuotaObserverChore() {<a name="line.3572"></a>
<span class="sourceLineNo">3573</span>    return this.quotaObserverChore;<a name="line.3573"></a>
<span class="sourceLineNo">3574</span>  }<a name="line.3574"></a>
<span class="sourceLineNo">3575</span><a name="line.3575"></a>
<span class="sourceLineNo">3576</span>  public SpaceQuotaSnapshotNotifier getSpaceQuotaSnapshotNotifier() {<a name="line.3576"></a>
<span class="sourceLineNo">3577</span>    return this.spaceQuotaSnapshotNotifier;<a name="line.3577"></a>
<span class="sourceLineNo">3578</span>  }<a name="line.3578"></a>
<span class="sourceLineNo">3579</span><a name="line.3579"></a>
<span class="sourceLineNo">3580</span>  @SuppressWarnings("unchecked")<a name="line.3580"></a>
<span class="sourceLineNo">3581</span>  private RemoteProcedure&lt;MasterProcedureEnv, ?&gt; getRemoteProcedure(long procId) {<a name="line.3581"></a>
<span class="sourceLineNo">3582</span>    Procedure&lt;?&gt; procedure = procedureExecutor.getProcedure(procId);<a name="line.3582"></a>
<span class="sourceLineNo">3583</span>    if (procedure == null) {<a name="line.3583"></a>
<span class="sourceLineNo">3584</span>      return null;<a name="line.3584"></a>
<span class="sourceLineNo">3585</span>    }<a name="line.3585"></a>
<span class="sourceLineNo">3586</span>    assert procedure instanceof RemoteProcedure;<a name="line.3586"></a>
<span class="sourceLineNo">3587</span>    return (RemoteProcedure&lt;MasterProcedureEnv, ?&gt;) procedure;<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>  public void remoteProcedureCompleted(long procId) {<a name="line.3590"></a>
<span class="sourceLineNo">3591</span>    LOG.debug("Remote procedure done, pid={}", procId);<a name="line.3591"></a>
<span class="sourceLineNo">3592</span>    RemoteProcedure&lt;MasterProcedureEnv, ?&gt; procedure = getRemoteProcedure(procId);<a name="line.3592"></a>
<span class="sourceLineNo">3593</span>    if (procedure != null) {<a name="line.3593"></a>
<span class="sourceLineNo">3594</span>      procedure.remoteOperationCompleted(procedureExecutor.getEnvironment());<a name="line.3594"></a>
<span class="sourceLineNo">3595</span>    }<a name="line.3595"></a>
<span class="sourceLineNo">3596</span>  }<a name="line.3596"></a>
<span class="sourceLineNo">3597</span><a name="line.3597"></a>
<span class="sourceLineNo">3598</span>  public void remoteProcedureFailed(long procId, RemoteProcedureException error) {<a name="line.3598"></a>
<span class="sourceLineNo">3599</span>    LOG.debug("Remote procedure failed, pid={}", procId, error);<a name="line.3599"></a>
<span class="sourceLineNo">3600</span>    RemoteProcedure&lt;MasterProcedureEnv, ?&gt; procedure = getRemoteProcedure(procId);<a name="line.3600"></a>
<span class="sourceLineNo">3601</span>    if (procedure != null) {<a name="line.3601"></a>
<span class="sourceLineNo">3602</span>      procedure.remoteOperationFailed(procedureExecutor.getEnvironment(), error);<a name="line.3602"></a>
<span class="sourceLineNo">3603</span>    }<a name="line.3603"></a>
<span class="sourceLineNo">3604</span>  }<a name="line.3604"></a>
<span class="sourceLineNo">3605</span><a name="line.3605"></a>
<span class="sourceLineNo">3606</span>  /**<a name="line.3606"></a>
<span class="sourceLineNo">3607</span>   * Reopen regions provided in the argument<a name="line.3607"></a>
<span class="sourceLineNo">3608</span>   *<a name="line.3608"></a>
<span class="sourceLineNo">3609</span>   * @param tableName The current table name<a name="line.3609"></a>
<span class="sourceLineNo">3610</span>   * @param regionNames The region names of the regions to reopen<a name="line.3610"></a>
<span class="sourceLineNo">3611</span>   * @param nonceGroup Identifier for the source of the request, a client or process<a name="line.3611"></a>
<span class="sourceLineNo">3612</span>   * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3612"></a>
<span class="sourceLineNo">3613</span>   *   &lt;code&gt;nonceGroup&lt;/code&gt; (the source must ensure each operation gets a unique id).<a name="line.3613"></a>
<span class="sourceLineNo">3614</span>   * @return procedure Id<a name="line.3614"></a>
<span class="sourceLineNo">3615</span>   * @throws IOException if reopening region fails while running procedure<a name="line.3615"></a>
<span class="sourceLineNo">3616</span>   */<a name="line.3616"></a>
<span class="sourceLineNo">3617</span>  long reopenRegions(final TableName tableName, final List&lt;byte[]&gt; regionNames,<a name="line.3617"></a>
<span class="sourceLineNo">3618</span>      final long nonceGroup, final long nonce)<a name="line.3618"></a>
<span class="sourceLineNo">3619</span>      throws IOException {<a name="line.3619"></a>
<span class="sourceLineNo">3620</span><a name="line.3620"></a>
<span class="sourceLineNo">3621</span>    return MasterProcedureUtil<a name="line.3621"></a>
<span class="sourceLineNo">3622</span>      .submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.3622"></a>
<span class="sourceLineNo">3623</span><a name="line.3623"></a>
<span class="sourceLineNo">3624</span>        @Override<a name="line.3624"></a>
<span class="sourceLineNo">3625</span>        protected void run() throws IOException {<a name="line.3625"></a>
<span class="sourceLineNo">3626</span>          submitProcedure(new ReopenTableRegionsProcedure(tableName, regionNames));<a name="line.3626"></a>
<span class="sourceLineNo">3627</span>        }<a name="line.3627"></a>
<span class="sourceLineNo">3628</span><a name="line.3628"></a>
<span class="sourceLineNo">3629</span>        @Override<a name="line.3629"></a>
<span class="sourceLineNo">3630</span>        protected String getDescription() {<a name="line.3630"></a>
<span class="sourceLineNo">3631</span>          return "ReopenTableRegionsProcedure";<a name="line.3631"></a>
<span class="sourceLineNo">3632</span>        }<a name="line.3632"></a>
<span class="sourceLineNo">3633</span><a name="line.3633"></a>
<span class="sourceLineNo">3634</span>      });<a name="line.3634"></a>
<span class="sourceLineNo">3635</span><a name="line.3635"></a>
<span class="sourceLineNo">3636</span>  }<a name="line.3636"></a>
<span class="sourceLineNo">3637</span><a name="line.3637"></a>
<span class="sourceLineNo">3638</span>  @Override<a name="line.3638"></a>
<span class="sourceLineNo">3639</span>  public ReplicationPeerManager getReplicationPeerManager() {<a name="line.3639"></a>
<span class="sourceLineNo">3640</span>    return replicationPeerManager;<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>  public HashMap&lt;String, List&lt;Pair&lt;ServerName, ReplicationLoadSource&gt;&gt;&gt;<a name="line.3643"></a>
<span class="sourceLineNo">3644</span>      getReplicationLoad(ServerName[] serverNames) {<a name="line.3644"></a>
<span class="sourceLineNo">3645</span>    List&lt;ReplicationPeerDescription&gt; peerList = this.getReplicationPeerManager().listPeers(null);<a name="line.3645"></a>
<span class="sourceLineNo">3646</span>    if (peerList == null) {<a name="line.3646"></a>
<span class="sourceLineNo">3647</span>      return null;<a name="line.3647"></a>
<span class="sourceLineNo">3648</span>    }<a name="line.3648"></a>
<span class="sourceLineNo">3649</span>    HashMap&lt;String, List&lt;Pair&lt;ServerName, ReplicationLoadSource&gt;&gt;&gt; replicationLoadSourceMap =<a name="line.3649"></a>
<span class="sourceLineNo">3650</span>        new HashMap&lt;&gt;(peerList.size());<a name="line.3650"></a>
<span class="sourceLineNo">3651</span>    peerList.stream()<a name="line.3651"></a>
<span class="sourceLineNo">3652</span>        .forEach(peer -&gt; replicationLoadSourceMap.put(peer.getPeerId(), new ArrayList&lt;&gt;()));<a name="line.3652"></a>
<span class="sourceLineNo">3653</span>    for (ServerName serverName : serverNames) {<a name="line.3653"></a>
<span class="sourceLineNo">3654</span>      List&lt;ReplicationLoadSource&gt; replicationLoadSources =<a name="line.3654"></a>
<span class="sourceLineNo">3655</span>          getServerManager().getLoad(serverName).getReplicationLoadSourceList();<a name="line.3655"></a>
<span class="sourceLineNo">3656</span>      for (ReplicationLoadSource replicationLoadSource : replicationLoadSources) {<a name="line.3656"></a>
<span class="sourceLineNo">3657</span>        List&lt;Pair&lt;ServerName, ReplicationLoadSource&gt;&gt; replicationLoadSourceList =<a name="line.3657"></a>
<span class="sourceLineNo">3658</span>          replicationLoadSourceMap.get(replicationLoadSource.getPeerID());<a name="line.3658"></a>
<span class="sourceLineNo">3659</span>        if (replicationLoadSourceList == null) {<a name="line.3659"></a>
<span class="sourceLineNo">3660</span>          LOG.debug("{} does not exist, but it exists "<a name="line.3660"></a>
<span class="sourceLineNo">3661</span>            + "in znode(/hbase/replication/rs). when the rs restarts, peerId is deleted, so "<a name="line.3661"></a>
<span class="sourceLineNo">3662</span>            + "we just need to ignore it", replicationLoadSource.getPeerID());<a name="line.3662"></a>
<span class="sourceLineNo">3663</span>          continue;<a name="line.3663"></a>
<span class="sourceLineNo">3664</span>        }<a name="line.3664"></a>
<span class="sourceLineNo">3665</span>        replicationLoadSourceList.add(new Pair&lt;&gt;(serverName, replicationLoadSource));<a name="line.3665"></a>
<span class="sourceLineNo">3666</span>      }<a name="line.3666"></a>
<span class="sourceLineNo">3667</span>    }<a name="line.3667"></a>
<span class="sourceLineNo">3668</span>    for (List&lt;Pair&lt;ServerName, ReplicationLoadSource&gt;&gt; loads : replicationLoadSourceMap.values()) {<a name="line.3668"></a>
<span class="sourceLineNo">3669</span>      if (loads.size() &gt; 0) {<a name="line.3669"></a>
<span class="sourceLineNo">3670</span>        loads.sort(Comparator.comparingLong(load -&gt; (-1) * load.getSecond().getReplicationLag()));<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>    return replicationLoadSourceMap;<a name="line.3673"></a>
<span class="sourceLineNo">3674</span>  }<a name="line.3674"></a>
<span class="sourceLineNo">3675</span><a name="line.3675"></a>
<span class="sourceLineNo">3676</span>  /**<a name="line.3676"></a>
<span class="sourceLineNo">3677</span>   * This method modifies the master's configuration in order to inject replication-related features<a name="line.3677"></a>
<span class="sourceLineNo">3678</span>   */<a name="line.3678"></a>
<span class="sourceLineNo">3679</span>  @InterfaceAudience.Private<a name="line.3679"></a>
<span class="sourceLineNo">3680</span>  public static void decorateMasterConfiguration(Configuration conf) {<a name="line.3680"></a>
<span class="sourceLineNo">3681</span>    String plugins = conf.get(HBASE_MASTER_LOGCLEANER_PLUGINS);<a name="line.3681"></a>
<span class="sourceLineNo">3682</span>    String cleanerClass = ReplicationLogCleaner.class.getCanonicalName();<a name="line.3682"></a>
<span class="sourceLineNo">3683</span>    if (plugins == null || !plugins.contains(cleanerClass)) {<a name="line.3683"></a>
<span class="sourceLineNo">3684</span>      conf.set(HBASE_MASTER_LOGCLEANER_PLUGINS, plugins + "," + cleanerClass);<a name="line.3684"></a>
<span class="sourceLineNo">3685</span>    }<a name="line.3685"></a>
<span class="sourceLineNo">3686</span>    if (ReplicationUtils.isReplicationForBulkLoadDataEnabled(conf)) {<a name="line.3686"></a>
<span class="sourceLineNo">3687</span>      plugins = conf.get(HFileCleaner.MASTER_HFILE_CLEANER_PLUGINS);<a name="line.3687"></a>
<span class="sourceLineNo">3688</span>      cleanerClass = ReplicationHFileCleaner.class.getCanonicalName();<a name="line.3688"></a>
<span class="sourceLineNo">3689</span>      if (!plugins.contains(cleanerClass)) {<a name="line.3689"></a>
<span class="sourceLineNo">3690</span>        conf.set(HFileCleaner.MASTER_HFILE_CLEANER_PLUGINS, plugins + "," + cleanerClass);<a name="line.3690"></a>
<span class="sourceLineNo">3691</span>      }<a name="line.3691"></a>
<span class="sourceLineNo">3692</span>    }<a name="line.3692"></a>
<span class="sourceLineNo">3693</span>  }<a name="line.3693"></a>
<span class="sourceLineNo">3694</span><a name="line.3694"></a>
<span class="sourceLineNo">3695</span>  public SnapshotQuotaObserverChore getSnapshotQuotaObserverChore() {<a name="line.3695"></a>
<span class="sourceLineNo">3696</span>    return this.snapshotQuotaChore;<a name="line.3696"></a>
<span class="sourceLineNo">3697</span>  }<a name="line.3697"></a>
<span class="sourceLineNo">3698</span><a name="line.3698"></a>
<span class="sourceLineNo">3699</span>  @Override<a name="line.3699"></a>
<span class="sourceLineNo">3700</span>  public SyncReplicationReplayWALManager getSyncReplicationReplayWALManager() {<a name="line.3700"></a>
<span class="sourceLineNo">3701</span>    return this.syncReplicationReplayWALManager;<a name="line.3701"></a>
<span class="sourceLineNo">3702</span>  }<a name="line.3702"></a>
<span class="sourceLineNo">3703</span><a name="line.3703"></a>
<span class="sourceLineNo">3704</span>  @Override<a name="line.3704"></a>
<span class="sourceLineNo">3705</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus() {<a name="line.3705"></a>
<span class="sourceLineNo">3706</span>    if (!this.isOnline() || !LoadBalancer.isMasterCanHostUserRegions(conf)) {<a name="line.3706"></a>
<span class="sourceLineNo">3707</span>      return new HashMap&lt;&gt;();<a name="line.3707"></a>
<span class="sourceLineNo">3708</span>    }<a name="line.3708"></a>
<span class="sourceLineNo">3709</span>    return super.getWalGroupsReplicationStatus();<a name="line.3709"></a>
<span class="sourceLineNo">3710</span>  }<a name="line.3710"></a>
<span class="sourceLineNo">3711</span><a name="line.3711"></a>
<span class="sourceLineNo">3712</span>  public HbckChore getHbckChore() {<a name="line.3712"></a>
<span class="sourceLineNo">3713</span>    return this.hbckChore;<a name="line.3713"></a>
<span class="sourceLineNo">3714</span>  }<a name="line.3714"></a>
<span class="sourceLineNo">3715</span><a name="line.3715"></a>
<span class="sourceLineNo">3716</span>  @Override<a name="line.3716"></a>
<span class="sourceLineNo">3717</span>  public String getClusterId() {<a name="line.3717"></a>
<span class="sourceLineNo">3718</span>    if (activeMaster) {<a name="line.3718"></a>
<span class="sourceLineNo">3719</span>      return super.getClusterId();<a name="line.3719"></a>
<span class="sourceLineNo">3720</span>    }<a name="line.3720"></a>
<span class="sourceLineNo">3721</span>    return cachedClusterId.getFromCacheOrFetch();<a name="line.3721"></a>
<span class="sourceLineNo">3722</span>  }<a name="line.3722"></a>
<span class="sourceLineNo">3723</span><a name="line.3723"></a>
<span class="sourceLineNo">3724</span>  public Optional&lt;ServerName&gt; getActiveMaster() {<a name="line.3724"></a>
<span class="sourceLineNo">3725</span>    return activeMasterManager.getActiveMasterServerName();<a name="line.3725"></a>
<span class="sourceLineNo">3726</span>  }<a name="line.3726"></a>
<span class="sourceLineNo">3727</span><a name="line.3727"></a>
<span class="sourceLineNo">3728</span>  @Override<a name="line.3728"></a>
<span class="sourceLineNo">3729</span>  public void runReplicationBarrierCleaner() {<a name="line.3729"></a>
<span class="sourceLineNo">3730</span>    ReplicationBarrierCleaner rbc = this.replicationBarrierCleaner;<a name="line.3730"></a>
<span class="sourceLineNo">3731</span>    if (rbc != null) {<a name="line.3731"></a>
<span class="sourceLineNo">3732</span>      rbc.chore();<a name="line.3732"></a>
<span class="sourceLineNo">3733</span>    }<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>  public MetaRegionLocationCache getMetaRegionLocationCache() {<a name="line.3736"></a>
<span class="sourceLineNo">3737</span>    return this.metaRegionLocationCache;<a name="line.3737"></a>
<span class="sourceLineNo">3738</span>  }<a name="line.3738"></a>
<span class="sourceLineNo">3739</span><a name="line.3739"></a>
<span class="sourceLineNo">3740</span>  @Override<a name="line.3740"></a>
<span class="sourceLineNo">3741</span>  public RSGroupInfoManager getRSGroupInfoManager() {<a name="line.3741"></a>
<span class="sourceLineNo">3742</span>    return rsGroupInfoManager;<a name="line.3742"></a>
<span class="sourceLineNo">3743</span>  }<a name="line.3743"></a>
<span class="sourceLineNo">3744</span><a name="line.3744"></a>
<span class="sourceLineNo">3745</span>  /**<a name="line.3745"></a>
<span class="sourceLineNo">3746</span>   * Get the compaction state of the table<a name="line.3746"></a>
<span class="sourceLineNo">3747</span>   *<a name="line.3747"></a>
<span class="sourceLineNo">3748</span>   * @param tableName The table name<a name="line.3748"></a>
<span class="sourceLineNo">3749</span>   * @return CompactionState Compaction state of the table<a name="line.3749"></a>
<span class="sourceLineNo">3750</span>   */<a name="line.3750"></a>
<span class="sourceLineNo">3751</span>  public CompactionState getCompactionState(final TableName tableName) {<a name="line.3751"></a>
<span class="sourceLineNo">3752</span>    CompactionState compactionState = CompactionState.NONE;<a name="line.3752"></a>
<span class="sourceLineNo">3753</span>    try {<a name="line.3753"></a>
<span class="sourceLineNo">3754</span>      List&lt;RegionInfo&gt; regions =<a name="line.3754"></a>
<span class="sourceLineNo">3755</span>        assignmentManager.getRegionStates().getRegionsOfTable(tableName);<a name="line.3755"></a>
<span class="sourceLineNo">3756</span>      for (RegionInfo regionInfo : regions) {<a name="line.3756"></a>
<span class="sourceLineNo">3757</span>        ServerName serverName =<a name="line.3757"></a>
<span class="sourceLineNo">3758</span>          assignmentManager.getRegionStates().getRegionServerOfRegion(regionInfo);<a name="line.3758"></a>
<span class="sourceLineNo">3759</span>        if (serverName == null) {<a name="line.3759"></a>
<span class="sourceLineNo">3760</span>          continue;<a name="line.3760"></a>
<span class="sourceLineNo">3761</span>        }<a name="line.3761"></a>
<span class="sourceLineNo">3762</span>        ServerMetrics sl = serverManager.getLoad(serverName);<a name="line.3762"></a>
<span class="sourceLineNo">3763</span>        if (sl == null) {<a name="line.3763"></a>
<span class="sourceLineNo">3764</span>          continue;<a name="line.3764"></a>
<span class="sourceLineNo">3765</span>        }<a name="line.3765"></a>
<span class="sourceLineNo">3766</span>        RegionMetrics regionMetrics = sl.getRegionMetrics().get(regionInfo.getRegionName());<a name="line.3766"></a>
<span class="sourceLineNo">3767</span>        if (regionMetrics.getCompactionState() == CompactionState.MAJOR) {<a name="line.3767"></a>
<span class="sourceLineNo">3768</span>          if (compactionState == CompactionState.MINOR) {<a name="line.3768"></a>
<span class="sourceLineNo">3769</span>            compactionState = CompactionState.MAJOR_AND_MINOR;<a name="line.3769"></a>
<span class="sourceLineNo">3770</span>          } else {<a name="line.3770"></a>
<span class="sourceLineNo">3771</span>            compactionState = CompactionState.MAJOR;<a name="line.3771"></a>
<span class="sourceLineNo">3772</span>          }<a name="line.3772"></a>
<span class="sourceLineNo">3773</span>        } else if (regionMetrics.getCompactionState() == CompactionState.MINOR) {<a name="line.3773"></a>
<span class="sourceLineNo">3774</span>          if (compactionState == CompactionState.MAJOR) {<a name="line.3774"></a>
<span class="sourceLineNo">3775</span>            compactionState = CompactionState.MAJOR_AND_MINOR;<a name="line.3775"></a>
<span class="sourceLineNo">3776</span>          } else {<a name="line.3776"></a>
<span class="sourceLineNo">3777</span>            compactionState = CompactionState.MINOR;<a name="line.3777"></a>
<span class="sourceLineNo">3778</span>          }<a name="line.3778"></a>
<span class="sourceLineNo">3779</span>        }<a name="line.3779"></a>
<span class="sourceLineNo">3780</span>      }<a name="line.3780"></a>
<span class="sourceLineNo">3781</span>    } catch (Exception e) {<a name="line.3781"></a>
<span class="sourceLineNo">3782</span>      compactionState = null;<a name="line.3782"></a>
<span class="sourceLineNo">3783</span>      LOG.error("Exception when get compaction state for " + tableName.getNameAsString(), e);<a name="line.3783"></a>
<span class="sourceLineNo">3784</span>    }<a name="line.3784"></a>
<span class="sourceLineNo">3785</span>    return compactionState;<a name="line.3785"></a>
<span class="sourceLineNo">3786</span>  }<a name="line.3786"></a>
<span class="sourceLineNo">3787</span><a name="line.3787"></a>
<span class="sourceLineNo">3788</span>  @Override<a name="line.3788"></a>
<span class="sourceLineNo">3789</span>  public MetaLocationSyncer getMetaLocationSyncer() {<a name="line.3789"></a>
<span class="sourceLineNo">3790</span>    return metaLocationSyncer;<a name="line.3790"></a>
<span class="sourceLineNo">3791</span>  }<a name="line.3791"></a>
<span class="sourceLineNo">3792</span>}<a name="line.3792"></a>




























































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