<!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.regionserver;<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.DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER;<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.HConstants.HBASE_SPLIT_WAL_MAX_SPLITTER;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.util.DNS.UNSAFE_RS_HOSTNAME_KEY;<a name="line.24"></a>
<span class="sourceLineNo">025</span><a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.lang.management.MemoryType;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.lang.management.MemoryUsage;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.lang.reflect.Constructor;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.net.BindException;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import java.net.InetAddress;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.net.InetSocketAddress;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.time.Duration;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import java.util.ArrayList;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.Collection;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import java.util.Collections;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import java.util.Comparator;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import java.util.HashSet;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import java.util.List;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import java.util.Map;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import java.util.Map.Entry;<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.SortedMap;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import java.util.Timer;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import java.util.TimerTask;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import java.util.TreeMap;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import java.util.TreeSet;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import java.util.concurrent.ConcurrentMap;<a name="line.51"></a>
<span class="sourceLineNo">052</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.52"></a>
<span class="sourceLineNo">053</span>import java.util.concurrent.TimeUnit;<a name="line.53"></a>
<span class="sourceLineNo">054</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.54"></a>
<span class="sourceLineNo">055</span>import java.util.concurrent.locks.ReentrantReadWriteLock;<a name="line.55"></a>
<span class="sourceLineNo">056</span>import java.util.stream.Collectors;<a name="line.56"></a>
<span class="sourceLineNo">057</span>import javax.management.MalformedObjectNameException;<a name="line.57"></a>
<span class="sourceLineNo">058</span>import javax.servlet.http.HttpServlet;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import org.apache.commons.lang3.RandomUtils;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import org.apache.commons.lang3.StringUtils;<a name="line.60"></a>
<span class="sourceLineNo">061</span>import org.apache.commons.lang3.SystemUtils;<a name="line.61"></a>
<span class="sourceLineNo">062</span>import org.apache.hadoop.conf.Configuration;<a name="line.62"></a>
<span class="sourceLineNo">063</span>import org.apache.hadoop.fs.FileSystem;<a name="line.63"></a>
<span class="sourceLineNo">064</span>import org.apache.hadoop.fs.Path;<a name="line.64"></a>
<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.Abortable;<a name="line.65"></a>
<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.CacheEvictionStats;<a name="line.66"></a>
<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.CallQueueTooBigException;<a name="line.67"></a>
<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ChoreService;<a name="line.68"></a>
<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.ClockOutOfSyncException;<a name="line.69"></a>
<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.CoordinatedStateManager;<a name="line.70"></a>
<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.71"></a>
<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.ExecutorStatusChore;<a name="line.72"></a>
<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.73"></a>
<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.74"></a>
<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.HConstants;<a name="line.75"></a>
<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.76"></a>
<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HealthCheckChore;<a name="line.77"></a>
<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.78"></a>
<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.79"></a>
<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.80"></a>
<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.ScheduledChore;<a name="line.81"></a>
<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.ServerName;<a name="line.82"></a>
<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.83"></a>
<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.TableDescriptors;<a name="line.84"></a>
<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.TableName;<a name="line.85"></a>
<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.86"></a>
<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ZNodeClearer;<a name="line.87"></a>
<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.AsyncClusterConnection;<a name="line.88"></a>
<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.ClusterConnectionFactory;<a name="line.89"></a>
<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.90"></a>
<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.91"></a>
<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.92"></a>
<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.93"></a>
<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.94"></a>
<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.locking.EntityLock;<a name="line.95"></a>
<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.locking.LockServiceClient;<a name="line.96"></a>
<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.conf.ConfigurationManager;<a name="line.97"></a>
<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.98"></a>
<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.coordination.ZkCoordinatedStateManager;<a name="line.99"></a>
<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.100"></a>
<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.exceptions.RegionMovedException;<a name="line.101"></a>
<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.exceptions.RegionOpeningException;<a name="line.102"></a>
<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.exceptions.UnknownProtocolException;<a name="line.103"></a>
<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.executor.ExecutorService;<a name="line.104"></a>
<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.executor.ExecutorService.ExecutorConfig;<a name="line.105"></a>
<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.executor.ExecutorType;<a name="line.106"></a>
<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.fs.HFileSystem;<a name="line.107"></a>
<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.http.InfoServer;<a name="line.108"></a>
<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.BlockCache;<a name="line.109"></a>
<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.BlockCacheFactory;<a name="line.110"></a>
<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.111"></a>
<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.util.MemorySizeUtil;<a name="line.112"></a>
<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.113"></a>
<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.ipc.NettyRpcClientConfigHelper;<a name="line.114"></a>
<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.ipc.RpcClient;<a name="line.115"></a>
<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.116"></a>
<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.117"></a>
<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.118"></a>
<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.119"></a>
<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.120"></a>
<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.121"></a>
<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.122"></a>
<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.master.MasterRpcServicesVersionWrapper;<a name="line.123"></a>
<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.124"></a>
<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;<a name="line.125"></a>
<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.mob.MobFileCache;<a name="line.126"></a>
<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.namequeues.NamedQueueRecorder;<a name="line.127"></a>
<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.namequeues.SlowLogTableOpsChore;<a name="line.128"></a>
<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.net.Address;<a name="line.129"></a>
<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.procedure.RegionServerProcedureManagerHost;<a name="line.130"></a>
<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.procedure2.RSProcedureCallable;<a name="line.131"></a>
<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.quotas.FileSystemUtilizationChore;<a name="line.132"></a>
<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.133"></a>
<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager;<a name="line.134"></a>
<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager;<a name="line.135"></a>
<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.quotas.RegionSize;<a name="line.136"></a>
<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.quotas.RegionSizeStore;<a name="line.137"></a>
<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionConfiguration;<a name="line.138"></a>
<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionLifeCycleTracker;<a name="line.139"></a>
<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionProgress;<a name="line.140"></a>
<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequester;<a name="line.141"></a>
<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.regionserver.handler.CloseMetaHandler;<a name="line.142"></a>
<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.regionserver.handler.CloseRegionHandler;<a name="line.143"></a>
<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.regionserver.handler.RSProcedureHandler;<a name="line.144"></a>
<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.regionserver.handler.RegionReplicaFlushHandler;<a name="line.145"></a>
<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.regionserver.throttle.FlushThroughputControllerFactory;<a name="line.146"></a>
<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;<a name="line.147"></a>
<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.replication.regionserver.ReplicationLoad;<a name="line.148"></a>
<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceInterface;<a name="line.149"></a>
<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.replication.regionserver.ReplicationStatus;<a name="line.150"></a>
<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.security.SecurityConstants;<a name="line.151"></a>
<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.152"></a>
<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.security.User;<a name="line.153"></a>
<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.154"></a>
<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.security.access.AccessChecker;<a name="line.155"></a>
<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.security.access.ZKPermissionWatcher;<a name="line.156"></a>
<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.trace.SpanReceiverHost;<a name="line.157"></a>
<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.158"></a>
<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.159"></a>
<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.160"></a>
<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.161"></a>
<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.util.CompressionTest;<a name="line.162"></a>
<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.163"></a>
<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.util.FSTableDescriptors;<a name="line.164"></a>
<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.165"></a>
<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.util.FutureUtils;<a name="line.166"></a>
<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.util.JvmPauseMonitor;<a name="line.167"></a>
<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.util.NettyEventLoopGroupConfig;<a name="line.168"></a>
<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.169"></a>
<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.170"></a>
<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.util.RetryCounterFactory;<a name="line.171"></a>
<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.172"></a>
<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.util.Sleeper;<a name="line.173"></a>
<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.174"></a>
<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.175"></a>
<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.176"></a>
<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.wal.NettyAsyncFSWALConfigHelper;<a name="line.177"></a>
<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.178"></a>
<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.179"></a>
<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.zookeeper.ClusterStatusTracker;<a name="line.180"></a>
<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;<a name="line.181"></a>
<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.182"></a>
<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.183"></a>
<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.zookeeper.ZKNodeTracker;<a name="line.184"></a>
<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.185"></a>
<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.186"></a>
<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.187"></a>
<span class="sourceLineNo">188</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.188"></a>
<span class="sourceLineNo">189</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.189"></a>
<span class="sourceLineNo">190</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.190"></a>
<span class="sourceLineNo">191</span>import org.apache.zookeeper.KeeperException;<a name="line.191"></a>
<span class="sourceLineNo">192</span>import org.slf4j.Logger;<a name="line.192"></a>
<span class="sourceLineNo">193</span>import org.slf4j.LoggerFactory;<a name="line.193"></a>
<span class="sourceLineNo">194</span>import sun.misc.Signal;<a name="line.194"></a>
<span class="sourceLineNo">195</span><a name="line.195"></a>
<span class="sourceLineNo">196</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.196"></a>
<span class="sourceLineNo">197</span>import org.apache.hbase.thirdparty.com.google.common.base.Throwables;<a name="line.197"></a>
<span class="sourceLineNo">198</span>import org.apache.hbase.thirdparty.com.google.common.cache.Cache;<a name="line.198"></a>
<span class="sourceLineNo">199</span>import org.apache.hbase.thirdparty.com.google.common.cache.CacheBuilder;<a name="line.199"></a>
<span class="sourceLineNo">200</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.200"></a>
<span class="sourceLineNo">201</span>import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;<a name="line.201"></a>
<span class="sourceLineNo">202</span>import org.apache.hbase.thirdparty.com.google.protobuf.Descriptors.MethodDescriptor;<a name="line.202"></a>
<span class="sourceLineNo">203</span>import org.apache.hbase.thirdparty.com.google.protobuf.Descriptors.ServiceDescriptor;<a name="line.203"></a>
<span class="sourceLineNo">204</span>import org.apache.hbase.thirdparty.com.google.protobuf.Message;<a name="line.204"></a>
<span class="sourceLineNo">205</span>import org.apache.hbase.thirdparty.com.google.protobuf.RpcController;<a name="line.205"></a>
<span class="sourceLineNo">206</span>import org.apache.hbase.thirdparty.com.google.protobuf.Service;<a name="line.206"></a>
<span class="sourceLineNo">207</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.207"></a>
<span class="sourceLineNo">208</span>import org.apache.hbase.thirdparty.com.google.protobuf.TextFormat;<a name="line.208"></a>
<span class="sourceLineNo">209</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.209"></a>
<span class="sourceLineNo">210</span><a name="line.210"></a>
<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.211"></a>
<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.212"></a>
<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceCall;<a name="line.213"></a>
<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.214"></a>
<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.215"></a>
<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.216"></a>
<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.217"></a>
<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds;<a name="line.218"></a>
<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.UserLoad;<a name="line.219"></a>
<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.Coprocessor;<a name="line.220"></a>
<span class="sourceLineNo">221</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.Coprocessor.Builder;<a name="line.221"></a>
<span class="sourceLineNo">222</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameStringPair;<a name="line.222"></a>
<span class="sourceLineNo">223</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo;<a name="line.223"></a>
<span class="sourceLineNo">224</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.224"></a>
<span class="sourceLineNo">225</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.225"></a>
<span class="sourceLineNo">226</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockService;<a name="line.226"></a>
<span class="sourceLineNo">227</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos;<a name="line.227"></a>
<span class="sourceLineNo">228</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.GetLastFlushedSequenceIdRequest;<a name="line.228"></a>
<span class="sourceLineNo">229</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.GetLastFlushedSequenceIdResponse;<a name="line.229"></a>
<span class="sourceLineNo">230</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerReportRequest;<a name="line.230"></a>
<span class="sourceLineNo">231</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupRequest;<a name="line.231"></a>
<span class="sourceLineNo">232</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse;<a name="line.232"></a>
<span class="sourceLineNo">233</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService;<a name="line.233"></a>
<span class="sourceLineNo">234</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUse;<a name="line.234"></a>
<span class="sourceLineNo">235</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUseReportRequest;<a name="line.235"></a>
<span class="sourceLineNo">236</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.236"></a>
<span class="sourceLineNo">237</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.237"></a>
<span class="sourceLineNo">238</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneRequest;<a name="line.238"></a>
<span class="sourceLineNo">239</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRSFatalErrorRequest;<a name="line.239"></a>
<span class="sourceLineNo">240</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.240"></a>
<span class="sourceLineNo">241</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.241"></a>
<span class="sourceLineNo">242</span><a name="line.242"></a>
<span class="sourceLineNo">243</span>/**<a name="line.243"></a>
<span class="sourceLineNo">244</span> * HRegionServer makes a set of HRegions available to clients. It checks in with<a name="line.244"></a>
<span class="sourceLineNo">245</span> * the HMaster. There are many HRegionServers in a single HBase deployment.<a name="line.245"></a>
<span class="sourceLineNo">246</span> */<a name="line.246"></a>
<span class="sourceLineNo">247</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.247"></a>
<span class="sourceLineNo">248</span>@SuppressWarnings({ "deprecation"})<a name="line.248"></a>
<span class="sourceLineNo">249</span>public class HRegionServer extends Thread implements<a name="line.249"></a>
<span class="sourceLineNo">250</span>    RegionServerServices, LastSequenceId, ConfigurationObserver {<a name="line.250"></a>
<span class="sourceLineNo">251</span>  private static final Logger LOG = LoggerFactory.getLogger(HRegionServer.class);<a name="line.251"></a>
<span class="sourceLineNo">252</span><a name="line.252"></a>
<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
<span class="sourceLineNo">254</span>   * For testing only!  Set to true to skip notifying region assignment to master .<a name="line.254"></a>
<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
<span class="sourceLineNo">256</span>  @InterfaceAudience.Private<a name="line.256"></a>
<span class="sourceLineNo">257</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="MS_SHOULD_BE_FINAL")<a name="line.257"></a>
<span class="sourceLineNo">258</span>  public static boolean TEST_SKIP_REPORTING_TRANSITION = false;<a name="line.258"></a>
<span class="sourceLineNo">259</span><a name="line.259"></a>
<span class="sourceLineNo">260</span>  /**<a name="line.260"></a>
<span class="sourceLineNo">261</span>   * A map from RegionName to current action in progress. Boolean value indicates:<a name="line.261"></a>
<span class="sourceLineNo">262</span>   * true - if open region action in progress<a name="line.262"></a>
<span class="sourceLineNo">263</span>   * false - if close region action in progress<a name="line.263"></a>
<span class="sourceLineNo">264</span>   */<a name="line.264"></a>
<span class="sourceLineNo">265</span>  private final ConcurrentMap&lt;byte[], Boolean&gt; regionsInTransitionInRS =<a name="line.265"></a>
<span class="sourceLineNo">266</span>    new ConcurrentSkipListMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.266"></a>
<span class="sourceLineNo">267</span><a name="line.267"></a>
<span class="sourceLineNo">268</span>  /**<a name="line.268"></a>
<span class="sourceLineNo">269</span>   * Used to cache the open/close region procedures which already submitted.<a name="line.269"></a>
<span class="sourceLineNo">270</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.270"></a>
<span class="sourceLineNo">271</span>   */<a name="line.271"></a>
<span class="sourceLineNo">272</span>  private final ConcurrentMap&lt;Long, Long&gt; submittedRegionProcedures = new ConcurrentHashMap&lt;&gt;();<a name="line.272"></a>
<span class="sourceLineNo">273</span>  /**<a name="line.273"></a>
<span class="sourceLineNo">274</span>   * Used to cache the open/close region procedures which already executed.<a name="line.274"></a>
<span class="sourceLineNo">275</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.275"></a>
<span class="sourceLineNo">276</span>   */<a name="line.276"></a>
<span class="sourceLineNo">277</span>  private final Cache&lt;Long, Long&gt; executedRegionProcedures =<a name="line.277"></a>
<span class="sourceLineNo">278</span>      CacheBuilder.newBuilder().expireAfterAccess(600, TimeUnit.SECONDS).build();<a name="line.278"></a>
<span class="sourceLineNo">279</span><a name="line.279"></a>
<span class="sourceLineNo">280</span>  /**<a name="line.280"></a>
<span class="sourceLineNo">281</span>   * Used to cache the moved-out regions<a name="line.281"></a>
<span class="sourceLineNo">282</span>   */<a name="line.282"></a>
<span class="sourceLineNo">283</span>  private final Cache&lt;String, MovedRegionInfo&gt; movedRegionInfoCache =<a name="line.283"></a>
<span class="sourceLineNo">284</span>      CacheBuilder.newBuilder().expireAfterWrite(movedRegionCacheExpiredTime(),<a name="line.284"></a>
<span class="sourceLineNo">285</span>        TimeUnit.MILLISECONDS).build();<a name="line.285"></a>
<span class="sourceLineNo">286</span><a name="line.286"></a>
<span class="sourceLineNo">287</span>  private MemStoreFlusher cacheFlusher;<a name="line.287"></a>
<span class="sourceLineNo">288</span><a name="line.288"></a>
<span class="sourceLineNo">289</span>  private HeapMemoryManager hMemManager;<a name="line.289"></a>
<span class="sourceLineNo">290</span><a name="line.290"></a>
<span class="sourceLineNo">291</span>  /**<a name="line.291"></a>
<span class="sourceLineNo">292</span>   * The asynchronous cluster connection to be shared by services.<a name="line.292"></a>
<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
<span class="sourceLineNo">294</span>  protected AsyncClusterConnection asyncClusterConnection;<a name="line.294"></a>
<span class="sourceLineNo">295</span><a name="line.295"></a>
<span class="sourceLineNo">296</span>  /**<a name="line.296"></a>
<span class="sourceLineNo">297</span>   * Go here to get table descriptors.<a name="line.297"></a>
<span class="sourceLineNo">298</span>   */<a name="line.298"></a>
<span class="sourceLineNo">299</span>  protected TableDescriptors tableDescriptors;<a name="line.299"></a>
<span class="sourceLineNo">300</span><a name="line.300"></a>
<span class="sourceLineNo">301</span>  // Replication services. If no replication, this handler will be null.<a name="line.301"></a>
<span class="sourceLineNo">302</span>  private ReplicationSourceService replicationSourceHandler;<a name="line.302"></a>
<span class="sourceLineNo">303</span>  private ReplicationSinkService replicationSinkHandler;<a name="line.303"></a>
<span class="sourceLineNo">304</span>  private boolean sameReplicationSourceAndSink;<a name="line.304"></a>
<span class="sourceLineNo">305</span><a name="line.305"></a>
<span class="sourceLineNo">306</span>  // Compactions<a name="line.306"></a>
<span class="sourceLineNo">307</span>  public CompactSplit compactSplitThread;<a name="line.307"></a>
<span class="sourceLineNo">308</span><a name="line.308"></a>
<span class="sourceLineNo">309</span>  /**<a name="line.309"></a>
<span class="sourceLineNo">310</span>   * Map of regions currently being served by this region server. Key is the<a name="line.310"></a>
<span class="sourceLineNo">311</span>   * encoded region name.  All access should be synchronized.<a name="line.311"></a>
<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
<span class="sourceLineNo">313</span>  private final Map&lt;String, HRegion&gt; onlineRegions = new ConcurrentHashMap&lt;&gt;();<a name="line.313"></a>
<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
<span class="sourceLineNo">315</span>   * Lock for gating access to {@link #onlineRegions}.<a name="line.315"></a>
<span class="sourceLineNo">316</span>   * TODO: If this map is gated by a lock, does it need to be a ConcurrentHashMap?<a name="line.316"></a>
<span class="sourceLineNo">317</span>   */<a name="line.317"></a>
<span class="sourceLineNo">318</span>  private final ReentrantReadWriteLock onlineRegionsLock = new ReentrantReadWriteLock();<a name="line.318"></a>
<span class="sourceLineNo">319</span><a name="line.319"></a>
<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
<span class="sourceLineNo">321</span>   * Map of encoded region names to the DataNode locations they should be hosted on<a name="line.321"></a>
<span class="sourceLineNo">322</span>   * We store the value as Address since InetSocketAddress is required by the HDFS<a name="line.322"></a>
<span class="sourceLineNo">323</span>   * API (create() that takes favored nodes as hints for placing file blocks).<a name="line.323"></a>
<span class="sourceLineNo">324</span>   * We could have used ServerName here as the value class, but we'd need to<a name="line.324"></a>
<span class="sourceLineNo">325</span>   * convert it to InetSocketAddress at some point before the HDFS API call, and<a name="line.325"></a>
<span class="sourceLineNo">326</span>   * it seems a bit weird to store ServerName since ServerName refers to RegionServers<a name="line.326"></a>
<span class="sourceLineNo">327</span>   * and here we really mean DataNode locations. We don't store it as InetSocketAddress<a name="line.327"></a>
<span class="sourceLineNo">328</span>   * here because the conversion on demand from Address to InetSocketAddress will<a name="line.328"></a>
<span class="sourceLineNo">329</span>   * guarantee the resolution results will be fresh when we need it.<a name="line.329"></a>
<span class="sourceLineNo">330</span>   */<a name="line.330"></a>
<span class="sourceLineNo">331</span>  private final Map&lt;String, Address[]&gt; regionFavoredNodesMap = new ConcurrentHashMap&lt;&gt;();<a name="line.331"></a>
<span class="sourceLineNo">332</span><a name="line.332"></a>
<span class="sourceLineNo">333</span>  private LeaseManager leaseManager;<a name="line.333"></a>
<span class="sourceLineNo">334</span><a name="line.334"></a>
<span class="sourceLineNo">335</span>  // Instance of the hbase executor executorService.<a name="line.335"></a>
<span class="sourceLineNo">336</span>  protected ExecutorService executorService;<a name="line.336"></a>
<span class="sourceLineNo">337</span><a name="line.337"></a>
<span class="sourceLineNo">338</span>  private volatile boolean dataFsOk;<a name="line.338"></a>
<span class="sourceLineNo">339</span>  private HFileSystem dataFs;<a name="line.339"></a>
<span class="sourceLineNo">340</span>  private HFileSystem walFs;<a name="line.340"></a>
<span class="sourceLineNo">341</span><a name="line.341"></a>
<span class="sourceLineNo">342</span>  // Set when a report to the master comes back with a message asking us to<a name="line.342"></a>
<span class="sourceLineNo">343</span>  // shutdown. Also set by call to stop when debugging or running unit tests<a name="line.343"></a>
<span class="sourceLineNo">344</span>  // of HRegionServer in isolation.<a name="line.344"></a>
<span class="sourceLineNo">345</span>  private volatile boolean stopped = false;<a name="line.345"></a>
<span class="sourceLineNo">346</span><a name="line.346"></a>
<span class="sourceLineNo">347</span>  // Go down hard. Used if file system becomes unavailable and also in<a name="line.347"></a>
<span class="sourceLineNo">348</span>  // debugging and unit tests.<a name="line.348"></a>
<span class="sourceLineNo">349</span>  private AtomicBoolean abortRequested;<a name="line.349"></a>
<span class="sourceLineNo">350</span>  static final String ABORT_TIMEOUT = "hbase.regionserver.abort.timeout";<a name="line.350"></a>
<span class="sourceLineNo">351</span>  // Default abort timeout is 1200 seconds for safe<a name="line.351"></a>
<span class="sourceLineNo">352</span>  private static final long DEFAULT_ABORT_TIMEOUT = 1200000;<a name="line.352"></a>
<span class="sourceLineNo">353</span>  // Will run this task when abort timeout<a name="line.353"></a>
<span class="sourceLineNo">354</span>  static final String ABORT_TIMEOUT_TASK = "hbase.regionserver.abort.timeout.task";<a name="line.354"></a>
<span class="sourceLineNo">355</span><a name="line.355"></a>
<span class="sourceLineNo">356</span>  // A state before we go into stopped state.  At this stage we're closing user<a name="line.356"></a>
<span class="sourceLineNo">357</span>  // space regions.<a name="line.357"></a>
<span class="sourceLineNo">358</span>  private boolean stopping = false;<a name="line.358"></a>
<span class="sourceLineNo">359</span>  private volatile boolean killed = false;<a name="line.359"></a>
<span class="sourceLineNo">360</span>  private volatile boolean shutDown = false;<a name="line.360"></a>
<span class="sourceLineNo">361</span><a name="line.361"></a>
<span class="sourceLineNo">362</span>  protected final Configuration conf;<a name="line.362"></a>
<span class="sourceLineNo">363</span><a name="line.363"></a>
<span class="sourceLineNo">364</span>  private Path dataRootDir;<a name="line.364"></a>
<span class="sourceLineNo">365</span>  private Path walRootDir;<a name="line.365"></a>
<span class="sourceLineNo">366</span><a name="line.366"></a>
<span class="sourceLineNo">367</span>  private final int threadWakeFrequency;<a name="line.367"></a>
<span class="sourceLineNo">368</span>  final int msgInterval;<a name="line.368"></a>
<span class="sourceLineNo">369</span><a name="line.369"></a>
<span class="sourceLineNo">370</span>  private static final String PERIOD_COMPACTION = "hbase.regionserver.compaction.check.period";<a name="line.370"></a>
<span class="sourceLineNo">371</span>  private final int compactionCheckFrequency;<a name="line.371"></a>
<span class="sourceLineNo">372</span>  private static final String PERIOD_FLUSH = "hbase.regionserver.flush.check.period";<a name="line.372"></a>
<span class="sourceLineNo">373</span>  private final int flushCheckFrequency;<a name="line.373"></a>
<span class="sourceLineNo">374</span><a name="line.374"></a>
<span class="sourceLineNo">375</span>  // Stub to do region server status calls against the master.<a name="line.375"></a>
<span class="sourceLineNo">376</span>  private volatile RegionServerStatusService.BlockingInterface rssStub;<a name="line.376"></a>
<span class="sourceLineNo">377</span>  private volatile LockService.BlockingInterface lockStub;<a name="line.377"></a>
<span class="sourceLineNo">378</span>  // RPC client. Used to make the stub above that does region server status checking.<a name="line.378"></a>
<span class="sourceLineNo">379</span>  private RpcClient rpcClient;<a name="line.379"></a>
<span class="sourceLineNo">380</span><a name="line.380"></a>
<span class="sourceLineNo">381</span>  private UncaughtExceptionHandler uncaughtExceptionHandler;<a name="line.381"></a>
<span class="sourceLineNo">382</span><a name="line.382"></a>
<span class="sourceLineNo">383</span>  // Info server. Default access so can be used by unit tests. REGIONSERVER<a name="line.383"></a>
<span class="sourceLineNo">384</span>  // is name of the webapp and the attribute name used stuffing this instance<a name="line.384"></a>
<span class="sourceLineNo">385</span>  // into web context.<a name="line.385"></a>
<span class="sourceLineNo">386</span>  protected InfoServer infoServer;<a name="line.386"></a>
<span class="sourceLineNo">387</span>  private JvmPauseMonitor pauseMonitor;<a name="line.387"></a>
<span class="sourceLineNo">388</span><a name="line.388"></a>
<span class="sourceLineNo">389</span>  /** region server process name */<a name="line.389"></a>
<span class="sourceLineNo">390</span>  public static final String REGIONSERVER = "regionserver";<a name="line.390"></a>
<span class="sourceLineNo">391</span><a name="line.391"></a>
<span class="sourceLineNo">392</span><a name="line.392"></a>
<span class="sourceLineNo">393</span>  private MetricsRegionServer metricsRegionServer;<a name="line.393"></a>
<span class="sourceLineNo">394</span>  MetricsRegionServerWrapperImpl metricsRegionServerImpl;<a name="line.394"></a>
<span class="sourceLineNo">395</span>  private SpanReceiverHost spanReceiverHost;<a name="line.395"></a>
<span class="sourceLineNo">396</span><a name="line.396"></a>
<span class="sourceLineNo">397</span>  /**<a name="line.397"></a>
<span class="sourceLineNo">398</span>   * ChoreService used to schedule tasks that we want to run periodically<a name="line.398"></a>
<span class="sourceLineNo">399</span>   */<a name="line.399"></a>
<span class="sourceLineNo">400</span>  private ChoreService choreService;<a name="line.400"></a>
<span class="sourceLineNo">401</span><a name="line.401"></a>
<span class="sourceLineNo">402</span>  /**<a name="line.402"></a>
<span class="sourceLineNo">403</span>   * Check for compactions requests.<a name="line.403"></a>
<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
<span class="sourceLineNo">405</span>  private ScheduledChore compactionChecker;<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>   * Check for flushes<a name="line.408"></a>
<span class="sourceLineNo">409</span>   */<a name="line.409"></a>
<span class="sourceLineNo">410</span>  private ScheduledChore periodicFlusher;<a name="line.410"></a>
<span class="sourceLineNo">411</span><a name="line.411"></a>
<span class="sourceLineNo">412</span>  private volatile WALFactory walFactory;<a name="line.412"></a>
<span class="sourceLineNo">413</span><a name="line.413"></a>
<span class="sourceLineNo">414</span>  private LogRoller walRoller;<a name="line.414"></a>
<span class="sourceLineNo">415</span><a name="line.415"></a>
<span class="sourceLineNo">416</span>  // A thread which calls reportProcedureDone<a name="line.416"></a>
<span class="sourceLineNo">417</span>  private RemoteProcedureResultReporter procedureResultReporter;<a name="line.417"></a>
<span class="sourceLineNo">418</span><a name="line.418"></a>
<span class="sourceLineNo">419</span>  // flag set after we're done setting up server threads<a name="line.419"></a>
<span class="sourceLineNo">420</span>  final AtomicBoolean online = new AtomicBoolean(false);<a name="line.420"></a>
<span class="sourceLineNo">421</span><a name="line.421"></a>
<span class="sourceLineNo">422</span>  // zookeeper connection and watcher<a name="line.422"></a>
<span class="sourceLineNo">423</span>  protected final ZKWatcher zooKeeper;<a name="line.423"></a>
<span class="sourceLineNo">424</span><a name="line.424"></a>
<span class="sourceLineNo">425</span>  // master address tracker<a name="line.425"></a>
<span class="sourceLineNo">426</span>  private final MasterAddressTracker masterAddressTracker;<a name="line.426"></a>
<span class="sourceLineNo">427</span><a name="line.427"></a>
<span class="sourceLineNo">428</span>  // Cluster Status Tracker<a name="line.428"></a>
<span class="sourceLineNo">429</span>  protected final ClusterStatusTracker clusterStatusTracker;<a name="line.429"></a>
<span class="sourceLineNo">430</span><a name="line.430"></a>
<span class="sourceLineNo">431</span>  // Log Splitting Worker<a name="line.431"></a>
<span class="sourceLineNo">432</span>  private SplitLogWorker splitLogWorker;<a name="line.432"></a>
<span class="sourceLineNo">433</span><a name="line.433"></a>
<span class="sourceLineNo">434</span>  // A sleeper that sleeps for msgInterval.<a name="line.434"></a>
<span class="sourceLineNo">435</span>  protected final Sleeper sleeper;<a name="line.435"></a>
<span class="sourceLineNo">436</span><a name="line.436"></a>
<span class="sourceLineNo">437</span>  private final int shortOperationTimeout;<a name="line.437"></a>
<span class="sourceLineNo">438</span><a name="line.438"></a>
<span class="sourceLineNo">439</span>  // Time to pause if master says 'please hold'<a name="line.439"></a>
<span class="sourceLineNo">440</span>  private final long retryPauseTime;<a name="line.440"></a>
<span class="sourceLineNo">441</span><a name="line.441"></a>
<span class="sourceLineNo">442</span>  private final RegionServerAccounting regionServerAccounting;<a name="line.442"></a>
<span class="sourceLineNo">443</span><a name="line.443"></a>
<span class="sourceLineNo">444</span>  private SlowLogTableOpsChore slowLogTableOpsChore = null;<a name="line.444"></a>
<span class="sourceLineNo">445</span><a name="line.445"></a>
<span class="sourceLineNo">446</span>  // Block cache<a name="line.446"></a>
<span class="sourceLineNo">447</span>  private BlockCache blockCache;<a name="line.447"></a>
<span class="sourceLineNo">448</span>  // The cache for mob files<a name="line.448"></a>
<span class="sourceLineNo">449</span>  private MobFileCache mobFileCache;<a name="line.449"></a>
<span class="sourceLineNo">450</span><a name="line.450"></a>
<span class="sourceLineNo">451</span>  /** The health check chore. */<a name="line.451"></a>
<span class="sourceLineNo">452</span>  private HealthCheckChore healthCheckChore;<a name="line.452"></a>
<span class="sourceLineNo">453</span><a name="line.453"></a>
<span class="sourceLineNo">454</span>  /** The Executor status collect chore. */<a name="line.454"></a>
<span class="sourceLineNo">455</span>  private ExecutorStatusChore executorStatusChore;<a name="line.455"></a>
<span class="sourceLineNo">456</span><a name="line.456"></a>
<span class="sourceLineNo">457</span>  /** The nonce manager chore. */<a name="line.457"></a>
<span class="sourceLineNo">458</span>  private ScheduledChore nonceManagerChore;<a name="line.458"></a>
<span class="sourceLineNo">459</span><a name="line.459"></a>
<span class="sourceLineNo">460</span>  private Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.460"></a>
<span class="sourceLineNo">461</span><a name="line.461"></a>
<span class="sourceLineNo">462</span>  /**<a name="line.462"></a>
<span class="sourceLineNo">463</span>   * The server name the Master sees us as.  Its made from the hostname the<a name="line.463"></a>
<span class="sourceLineNo">464</span>   * master passes us, port, and server startcode. Gets set after registration<a name="line.464"></a>
<span class="sourceLineNo">465</span>   * against Master.<a name="line.465"></a>
<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
<span class="sourceLineNo">467</span>  protected ServerName serverName;<a name="line.467"></a>
<span class="sourceLineNo">468</span><a name="line.468"></a>
<span class="sourceLineNo">469</span>  /**<a name="line.469"></a>
<span class="sourceLineNo">470</span>   * hostname specified by hostname config<a name="line.470"></a>
<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
<span class="sourceLineNo">472</span>  protected String useThisHostnameInstead;<a name="line.472"></a>
<span class="sourceLineNo">473</span><a name="line.473"></a>
<span class="sourceLineNo">474</span>  /**<a name="line.474"></a>
<span class="sourceLineNo">475</span>   * @deprecated since 2.4.0 and will be removed in 4.0.0.<a name="line.475"></a>
<span class="sourceLineNo">476</span>   * Use {@link HRegionServer#UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY} instead.<a name="line.476"></a>
<span class="sourceLineNo">477</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-24667"&gt;HBASE-24667&lt;/a&gt;<a name="line.477"></a>
<span class="sourceLineNo">478</span>   */<a name="line.478"></a>
<span class="sourceLineNo">479</span>  @Deprecated<a name="line.479"></a>
<span class="sourceLineNo">480</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.480"></a>
<span class="sourceLineNo">481</span>  final static String RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY =<a name="line.481"></a>
<span class="sourceLineNo">482</span>    "hbase.regionserver.hostname.disable.master.reversedns";<a name="line.482"></a>
<span class="sourceLineNo">483</span><a name="line.483"></a>
<span class="sourceLineNo">484</span>  /**<a name="line.484"></a>
<span class="sourceLineNo">485</span>   * HBASE-18226: This config and hbase.unasfe.regionserver.hostname are mutually exclusive.<a name="line.485"></a>
<span class="sourceLineNo">486</span>   * Exception will be thrown if both are used.<a name="line.486"></a>
<span class="sourceLineNo">487</span>   */<a name="line.487"></a>
<span class="sourceLineNo">488</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.488"></a>
<span class="sourceLineNo">489</span>  final static String UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY =<a name="line.489"></a>
<span class="sourceLineNo">490</span>    "hbase.unsafe.regionserver.hostname.disable.master.reversedns";<a name="line.490"></a>
<span class="sourceLineNo">491</span><a name="line.491"></a>
<span class="sourceLineNo">492</span>  /**<a name="line.492"></a>
<span class="sourceLineNo">493</span>   * HBASE-24667: This config hbase.regionserver.hostname.disable.master.reversedns will be replaced by<a name="line.493"></a>
<span class="sourceLineNo">494</span>   * hbase.unsafe.regionserver.hostname.disable.master.reversedns. Keep the old config keys here for backward<a name="line.494"></a>
<span class="sourceLineNo">495</span>   * compatibility.<a name="line.495"></a>
<span class="sourceLineNo">496</span>   */<a name="line.496"></a>
<span class="sourceLineNo">497</span>  static {<a name="line.497"></a>
<span class="sourceLineNo">498</span>    Configuration.addDeprecation(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY);<a name="line.498"></a>
<span class="sourceLineNo">499</span>  }<a name="line.499"></a>
<span class="sourceLineNo">500</span><a name="line.500"></a>
<span class="sourceLineNo">501</span>  /**<a name="line.501"></a>
<span class="sourceLineNo">502</span>   * This servers startcode.<a name="line.502"></a>
<span class="sourceLineNo">503</span>   */<a name="line.503"></a>
<span class="sourceLineNo">504</span>  protected final long startcode;<a name="line.504"></a>
<span class="sourceLineNo">505</span><a name="line.505"></a>
<span class="sourceLineNo">506</span>  /**<a name="line.506"></a>
<span class="sourceLineNo">507</span>   * Unique identifier for the cluster we are a part of.<a name="line.507"></a>
<span class="sourceLineNo">508</span>   */<a name="line.508"></a>
<span class="sourceLineNo">509</span>  protected String clusterId;<a name="line.509"></a>
<span class="sourceLineNo">510</span><a name="line.510"></a>
<span class="sourceLineNo">511</span>  // chore for refreshing store files for secondary regions<a name="line.511"></a>
<span class="sourceLineNo">512</span>  private StorefileRefresherChore storefileRefresher;<a name="line.512"></a>
<span class="sourceLineNo">513</span><a name="line.513"></a>
<span class="sourceLineNo">514</span>  private RegionServerCoprocessorHost rsHost;<a name="line.514"></a>
<span class="sourceLineNo">515</span><a name="line.515"></a>
<span class="sourceLineNo">516</span>  private RegionServerProcedureManagerHost rspmHost;<a name="line.516"></a>
<span class="sourceLineNo">517</span><a name="line.517"></a>
<span class="sourceLineNo">518</span>  private RegionServerRpcQuotaManager rsQuotaManager;<a name="line.518"></a>
<span class="sourceLineNo">519</span>  private RegionServerSpaceQuotaManager rsSpaceQuotaManager;<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>   * Nonce manager. Nonces are used to make operations like increment and append idempotent<a name="line.522"></a>
<span class="sourceLineNo">523</span>   * in the case where client doesn't receive the response from a successful operation and<a name="line.523"></a>
<span class="sourceLineNo">524</span>   * retries. We track the successful ops for some time via a nonce sent by client and handle<a name="line.524"></a>
<span class="sourceLineNo">525</span>   * duplicate operations (currently, by failing them; in future we might use MVCC to return<a name="line.525"></a>
<span class="sourceLineNo">526</span>   * result). Nonces are also recovered from WAL during, recovery; however, the caveats (from<a name="line.526"></a>
<span class="sourceLineNo">527</span>   * HBASE-3787) are:<a name="line.527"></a>
<span class="sourceLineNo">528</span>   * - WAL recovery is optimized, and under high load we won't read nearly nonce-timeout worth<a name="line.528"></a>
<span class="sourceLineNo">529</span>   *   of past records. If we don't read the records, we don't read and recover the nonces.<a name="line.529"></a>
<span class="sourceLineNo">530</span>   *   Some WALs within nonce-timeout at recovery may not even be present due to rolling/cleanup.<a name="line.530"></a>
<span class="sourceLineNo">531</span>   * - There's no WAL recovery during normal region move, so nonces will not be transfered.<a name="line.531"></a>
<span class="sourceLineNo">532</span>   * We can have separate additional "Nonce WAL". It will just contain bunch of numbers and<a name="line.532"></a>
<span class="sourceLineNo">533</span>   * won't be flushed on main path - because WAL itself also contains nonces, if we only flush<a name="line.533"></a>
<span class="sourceLineNo">534</span>   * it before memstore flush, for a given nonce we will either see it in the WAL (if it was<a name="line.534"></a>
<span class="sourceLineNo">535</span>   * never flushed to disk, it will be part of recovery), or we'll see it as part of the nonce<a name="line.535"></a>
<span class="sourceLineNo">536</span>   * log (or both occasionally, which doesn't matter). Nonce log file can be deleted after the<a name="line.536"></a>
<span class="sourceLineNo">537</span>   * latest nonce in it expired. It can also be recovered during move.<a name="line.537"></a>
<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
<span class="sourceLineNo">539</span>  final ServerNonceManager nonceManager;<a name="line.539"></a>
<span class="sourceLineNo">540</span><a name="line.540"></a>
<span class="sourceLineNo">541</span>  private UserProvider userProvider;<a name="line.541"></a>
<span class="sourceLineNo">542</span><a name="line.542"></a>
<span class="sourceLineNo">543</span>  protected final RSRpcServices rpcServices;<a name="line.543"></a>
<span class="sourceLineNo">544</span><a name="line.544"></a>
<span class="sourceLineNo">545</span>  private CoordinatedStateManager csm;<a name="line.545"></a>
<span class="sourceLineNo">546</span><a name="line.546"></a>
<span class="sourceLineNo">547</span>  /**<a name="line.547"></a>
<span class="sourceLineNo">548</span>   * Configuration manager is used to register/deregister and notify the configuration observers<a name="line.548"></a>
<span class="sourceLineNo">549</span>   * when the regionserver is notified that there was a change in the on disk configs.<a name="line.549"></a>
<span class="sourceLineNo">550</span>   */<a name="line.550"></a>
<span class="sourceLineNo">551</span>  protected final ConfigurationManager configurationManager;<a name="line.551"></a>
<span class="sourceLineNo">552</span><a name="line.552"></a>
<span class="sourceLineNo">553</span>  @InterfaceAudience.Private<a name="line.553"></a>
<span class="sourceLineNo">554</span>  CompactedHFilesDischarger compactedFileDischarger;<a name="line.554"></a>
<span class="sourceLineNo">555</span><a name="line.555"></a>
<span class="sourceLineNo">556</span>  private volatile ThroughputController flushThroughputController;<a name="line.556"></a>
<span class="sourceLineNo">557</span><a name="line.557"></a>
<span class="sourceLineNo">558</span>  private SecureBulkLoadManager secureBulkLoadManager;<a name="line.558"></a>
<span class="sourceLineNo">559</span><a name="line.559"></a>
<span class="sourceLineNo">560</span>  private FileSystemUtilizationChore fsUtilizationChore;<a name="line.560"></a>
<span class="sourceLineNo">561</span><a name="line.561"></a>
<span class="sourceLineNo">562</span>  private final NettyEventLoopGroupConfig eventLoopGroupConfig;<a name="line.562"></a>
<span class="sourceLineNo">563</span><a name="line.563"></a>
<span class="sourceLineNo">564</span>  /**<a name="line.564"></a>
<span class="sourceLineNo">565</span>   * Provide online slow log responses from ringbuffer<a name="line.565"></a>
<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
<span class="sourceLineNo">567</span>  private NamedQueueRecorder namedQueueRecorder = null;<a name="line.567"></a>
<span class="sourceLineNo">568</span><a name="line.568"></a>
<span class="sourceLineNo">569</span>  /**<a name="line.569"></a>
<span class="sourceLineNo">570</span>   * True if this RegionServer is coming up in a cluster where there is no Master;<a name="line.570"></a>
<span class="sourceLineNo">571</span>   * means it needs to just come up and make do without a Master to talk to: e.g. in test or<a name="line.571"></a>
<span class="sourceLineNo">572</span>   * HRegionServer is doing other than its usual duties: e.g. as an hollowed-out host whose only<a name="line.572"></a>
<span class="sourceLineNo">573</span>   * purpose is as a Replication-stream sink; see HBASE-18846 for more.<a name="line.573"></a>
<span class="sourceLineNo">574</span>   * TODO: can this replace {@link #TEST_SKIP_REPORTING_TRANSITION} ?<a name="line.574"></a>
<span class="sourceLineNo">575</span>   */<a name="line.575"></a>
<span class="sourceLineNo">576</span>  private final boolean masterless;<a name="line.576"></a>
<span class="sourceLineNo">577</span>  private static final String MASTERLESS_CONFIG_NAME = "hbase.masterless";<a name="line.577"></a>
<span class="sourceLineNo">578</span><a name="line.578"></a>
<span class="sourceLineNo">579</span>  /**regionserver codec list **/<a name="line.579"></a>
<span class="sourceLineNo">580</span>  private static final String REGIONSERVER_CODEC = "hbase.regionserver.codecs";<a name="line.580"></a>
<span class="sourceLineNo">581</span><a name="line.581"></a>
<span class="sourceLineNo">582</span>  // A timer to shutdown the process if abort takes too long<a name="line.582"></a>
<span class="sourceLineNo">583</span>  private Timer abortMonitor;<a name="line.583"></a>
<span class="sourceLineNo">584</span><a name="line.584"></a>
<span class="sourceLineNo">585</span>  /**<a name="line.585"></a>
<span class="sourceLineNo">586</span>   * Starts a HRegionServer at the default location.<a name="line.586"></a>
<span class="sourceLineNo">587</span>   * &lt;p/&gt;<a name="line.587"></a>
<span class="sourceLineNo">588</span>   * Don't start any services or managers in here in the Constructor.<a name="line.588"></a>
<span class="sourceLineNo">589</span>   * Defer till after we register with the Master as much as possible. See {@link #startServices}.<a name="line.589"></a>
<span class="sourceLineNo">590</span>   */<a name="line.590"></a>
<span class="sourceLineNo">591</span>  public HRegionServer(final Configuration conf) throws IOException {<a name="line.591"></a>
<span class="sourceLineNo">592</span>    super("RegionServer");  // thread name<a name="line.592"></a>
<span class="sourceLineNo">593</span>    TraceUtil.initTracer(conf);<a name="line.593"></a>
<span class="sourceLineNo">594</span>    try {<a name="line.594"></a>
<span class="sourceLineNo">595</span>      this.startcode = System.currentTimeMillis();<a name="line.595"></a>
<span class="sourceLineNo">596</span>      this.conf = conf;<a name="line.596"></a>
<span class="sourceLineNo">597</span>      this.dataFsOk = true;<a name="line.597"></a>
<span class="sourceLineNo">598</span>      this.masterless = conf.getBoolean(MASTERLESS_CONFIG_NAME, false);<a name="line.598"></a>
<span class="sourceLineNo">599</span>      this.eventLoopGroupConfig = setupNetty(this.conf);<a name="line.599"></a>
<span class="sourceLineNo">600</span>      MemorySizeUtil.checkForClusterFreeHeapMemoryLimit(this.conf);<a name="line.600"></a>
<span class="sourceLineNo">601</span>      HFile.checkHFileVersion(this.conf);<a name="line.601"></a>
<span class="sourceLineNo">602</span>      checkCodecs(this.conf);<a name="line.602"></a>
<span class="sourceLineNo">603</span>      this.userProvider = UserProvider.instantiate(conf);<a name="line.603"></a>
<span class="sourceLineNo">604</span>      FSUtils.setupShortCircuitRead(this.conf);<a name="line.604"></a>
<span class="sourceLineNo">605</span><a name="line.605"></a>
<span class="sourceLineNo">606</span>      // Disable usage of meta replicas in the regionserver<a name="line.606"></a>
<span class="sourceLineNo">607</span>      this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.607"></a>
<span class="sourceLineNo">608</span>      // Config'ed params<a name="line.608"></a>
<span class="sourceLineNo">609</span>      this.threadWakeFrequency = conf.getInt(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.609"></a>
<span class="sourceLineNo">610</span>      this.compactionCheckFrequency = conf.getInt(PERIOD_COMPACTION, this.threadWakeFrequency);<a name="line.610"></a>
<span class="sourceLineNo">611</span>      this.flushCheckFrequency = conf.getInt(PERIOD_FLUSH, this.threadWakeFrequency);<a name="line.611"></a>
<span class="sourceLineNo">612</span>      this.msgInterval = conf.getInt("hbase.regionserver.msginterval", 3 * 1000);<a name="line.612"></a>
<span class="sourceLineNo">613</span><a name="line.613"></a>
<span class="sourceLineNo">614</span>      this.sleeper = new Sleeper(this.msgInterval, this);<a name="line.614"></a>
<span class="sourceLineNo">615</span><a name="line.615"></a>
<span class="sourceLineNo">616</span>      boolean isNoncesEnabled = conf.getBoolean(HConstants.HBASE_RS_NONCES_ENABLED, true);<a name="line.616"></a>
<span class="sourceLineNo">617</span>      this.nonceManager = isNoncesEnabled ? new ServerNonceManager(this.conf) : null;<a name="line.617"></a>
<span class="sourceLineNo">618</span><a name="line.618"></a>
<span class="sourceLineNo">619</span>      this.shortOperationTimeout = conf.getInt(HConstants.HBASE_RPC_SHORTOPERATION_TIMEOUT_KEY,<a name="line.619"></a>
<span class="sourceLineNo">620</span>          HConstants.DEFAULT_HBASE_RPC_SHORTOPERATION_TIMEOUT);<a name="line.620"></a>
<span class="sourceLineNo">621</span><a name="line.621"></a>
<span class="sourceLineNo">622</span>      this.retryPauseTime = conf.getLong(HConstants.HBASE_RPC_SHORTOPERATION_RETRY_PAUSE_TIME,<a name="line.622"></a>
<span class="sourceLineNo">623</span>        HConstants.DEFAULT_HBASE_RPC_SHORTOPERATION_RETRY_PAUSE_TIME);<a name="line.623"></a>
<span class="sourceLineNo">624</span><a name="line.624"></a>
<span class="sourceLineNo">625</span>      this.abortRequested = new AtomicBoolean(false);<a name="line.625"></a>
<span class="sourceLineNo">626</span>      this.stopped = false;<a name="line.626"></a>
<span class="sourceLineNo">627</span><a name="line.627"></a>
<span class="sourceLineNo">628</span>      initNamedQueueRecorder(conf);<a name="line.628"></a>
<span class="sourceLineNo">629</span>      rpcServices = createRpcServices();<a name="line.629"></a>
<span class="sourceLineNo">630</span>      useThisHostnameInstead = getUseThisHostnameInstead(conf);<a name="line.630"></a>
<span class="sourceLineNo">631</span>      String hostName =<a name="line.631"></a>
<span class="sourceLineNo">632</span>          StringUtils.isBlank(useThisHostnameInstead) ? this.rpcServices.isa.getHostName()<a name="line.632"></a>
<span class="sourceLineNo">633</span>              : this.useThisHostnameInstead;<a name="line.633"></a>
<span class="sourceLineNo">634</span>      serverName = ServerName.valueOf(hostName, this.rpcServices.isa.getPort(), this.startcode);<a name="line.634"></a>
<span class="sourceLineNo">635</span><a name="line.635"></a>
<span class="sourceLineNo">636</span>      // login the zookeeper client principal (if using security)<a name="line.636"></a>
<span class="sourceLineNo">637</span>      ZKUtil.loginClient(this.conf, HConstants.ZK_CLIENT_KEYTAB_FILE,<a name="line.637"></a>
<span class="sourceLineNo">638</span>          HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL, hostName);<a name="line.638"></a>
<span class="sourceLineNo">639</span>      // login the server principal (if using secure Hadoop)<a name="line.639"></a>
<span class="sourceLineNo">640</span>      login(userProvider, hostName);<a name="line.640"></a>
<span class="sourceLineNo">641</span>      // init superusers and add the server principal (if using security)<a name="line.641"></a>
<span class="sourceLineNo">642</span>      // or process owner as default super user.<a name="line.642"></a>
<span class="sourceLineNo">643</span>      Superusers.initialize(conf);<a name="line.643"></a>
<span class="sourceLineNo">644</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.644"></a>
<span class="sourceLineNo">645</span><a name="line.645"></a>
<span class="sourceLineNo">646</span>      boolean isMasterNotCarryTable =<a name="line.646"></a>
<span class="sourceLineNo">647</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf);<a name="line.647"></a>
<span class="sourceLineNo">648</span><a name="line.648"></a>
<span class="sourceLineNo">649</span>      // no need to instantiate block cache and mob file cache when master not carry table<a name="line.649"></a>
<span class="sourceLineNo">650</span>      if (!isMasterNotCarryTable) {<a name="line.650"></a>
<span class="sourceLineNo">651</span>        blockCache = BlockCacheFactory.createBlockCache(conf);<a name="line.651"></a>
<span class="sourceLineNo">652</span>        mobFileCache = new MobFileCache(conf);<a name="line.652"></a>
<span class="sourceLineNo">653</span>      }<a name="line.653"></a>
<span class="sourceLineNo">654</span><a name="line.654"></a>
<span class="sourceLineNo">655</span>      uncaughtExceptionHandler =<a name="line.655"></a>
<span class="sourceLineNo">656</span>        (t, e) -&gt; abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.656"></a>
<span class="sourceLineNo">657</span><a name="line.657"></a>
<span class="sourceLineNo">658</span>      initializeFileSystem();<a name="line.658"></a>
<span class="sourceLineNo">659</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.659"></a>
<span class="sourceLineNo">660</span><a name="line.660"></a>
<span class="sourceLineNo">661</span>      this.configurationManager = new ConfigurationManager();<a name="line.661"></a>
<span class="sourceLineNo">662</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.662"></a>
<span class="sourceLineNo">663</span><a name="line.663"></a>
<span class="sourceLineNo">664</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.664"></a>
<span class="sourceLineNo">665</span>      // Open connection to zookeeper and set primary watcher<a name="line.665"></a>
<span class="sourceLineNo">666</span>      zooKeeper = new ZKWatcher(conf, getProcessName() + ":" + rpcServices.isa.getPort(), this,<a name="line.666"></a>
<span class="sourceLineNo">667</span>        canCreateBaseZNode());<a name="line.667"></a>
<span class="sourceLineNo">668</span>      // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.668"></a>
<span class="sourceLineNo">669</span>      if (!this.masterless) {<a name="line.669"></a>
<span class="sourceLineNo">670</span>        if (conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.670"></a>
<span class="sourceLineNo">671</span>          DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.671"></a>
<span class="sourceLineNo">672</span>          this.csm = new ZkCoordinatedStateManager(this);<a name="line.672"></a>
<span class="sourceLineNo">673</span>        }<a name="line.673"></a>
<span class="sourceLineNo">674</span><a name="line.674"></a>
<span class="sourceLineNo">675</span>        masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.675"></a>
<span class="sourceLineNo">676</span>        masterAddressTracker.start();<a name="line.676"></a>
<span class="sourceLineNo">677</span><a name="line.677"></a>
<span class="sourceLineNo">678</span>        clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.678"></a>
<span class="sourceLineNo">679</span>        clusterStatusTracker.start();<a name="line.679"></a>
<span class="sourceLineNo">680</span>      } else {<a name="line.680"></a>
<span class="sourceLineNo">681</span>        masterAddressTracker = null;<a name="line.681"></a>
<span class="sourceLineNo">682</span>        clusterStatusTracker = null;<a name="line.682"></a>
<span class="sourceLineNo">683</span>      }<a name="line.683"></a>
<span class="sourceLineNo">684</span>      this.rpcServices.start(zooKeeper);<a name="line.684"></a>
<span class="sourceLineNo">685</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.685"></a>
<span class="sourceLineNo">686</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.686"></a>
<span class="sourceLineNo">687</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.687"></a>
<span class="sourceLineNo">688</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.688"></a>
<span class="sourceLineNo">689</span>      // class HRS. TODO.<a name="line.689"></a>
<span class="sourceLineNo">690</span>      this.choreService = new ChoreService(getName(), true);<a name="line.690"></a>
<span class="sourceLineNo">691</span>      this.executorService = new ExecutorService(getName());<a name="line.691"></a>
<span class="sourceLineNo">692</span>      putUpWebUI();<a name="line.692"></a>
<span class="sourceLineNo">693</span>    } catch (Throwable t) {<a name="line.693"></a>
<span class="sourceLineNo">694</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.694"></a>
<span class="sourceLineNo">695</span>      // cause of failed startup is lost.<a name="line.695"></a>
<span class="sourceLineNo">696</span>      LOG.error("Failed construction RegionServer", t);<a name="line.696"></a>
<span class="sourceLineNo">697</span>      throw t;<a name="line.697"></a>
<span class="sourceLineNo">698</span>    }<a name="line.698"></a>
<span class="sourceLineNo">699</span>  }<a name="line.699"></a>
<span class="sourceLineNo">700</span><a name="line.700"></a>
<span class="sourceLineNo">701</span>  private void initNamedQueueRecorder(Configuration conf) {<a name="line.701"></a>
<span class="sourceLineNo">702</span>    if (!(this instanceof HMaster)) {<a name="line.702"></a>
<span class="sourceLineNo">703</span>      final boolean isOnlineLogProviderEnabled = conf.getBoolean(<a name="line.703"></a>
<span class="sourceLineNo">704</span>        HConstants.SLOW_LOG_BUFFER_ENABLED_KEY,<a name="line.704"></a>
<span class="sourceLineNo">705</span>        HConstants.DEFAULT_ONLINE_LOG_PROVIDER_ENABLED);<a name="line.705"></a>
<span class="sourceLineNo">706</span>      if (isOnlineLogProviderEnabled) {<a name="line.706"></a>
<span class="sourceLineNo">707</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.707"></a>
<span class="sourceLineNo">708</span>      }<a name="line.708"></a>
<span class="sourceLineNo">709</span>    } else {<a name="line.709"></a>
<span class="sourceLineNo">710</span>      final boolean isBalancerDecisionRecording = conf<a name="line.710"></a>
<span class="sourceLineNo">711</span>        .getBoolean(BaseLoadBalancer.BALANCER_DECISION_BUFFER_ENABLED,<a name="line.711"></a>
<span class="sourceLineNo">712</span>          BaseLoadBalancer.DEFAULT_BALANCER_DECISION_BUFFER_ENABLED);<a name="line.712"></a>
<span class="sourceLineNo">713</span>      if (isBalancerDecisionRecording) {<a name="line.713"></a>
<span class="sourceLineNo">714</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.714"></a>
<span class="sourceLineNo">715</span>      }<a name="line.715"></a>
<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
<span class="sourceLineNo">717</span>  }<a name="line.717"></a>
<span class="sourceLineNo">718</span><a name="line.718"></a>
<span class="sourceLineNo">719</span>  // HMaster should override this method to load the specific config for master<a name="line.719"></a>
<span class="sourceLineNo">720</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.720"></a>
<span class="sourceLineNo">721</span>    String hostname = conf.get(UNSAFE_RS_HOSTNAME_KEY);<a name="line.721"></a>
<span class="sourceLineNo">722</span>    if (conf.getBoolean(UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.722"></a>
<span class="sourceLineNo">723</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.723"></a>
<span class="sourceLineNo">724</span>        String msg = UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + UNSAFE_RS_HOSTNAME_KEY +<a name="line.724"></a>
<span class="sourceLineNo">725</span>          " are mutually exclusive. Do not set " + UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.725"></a>
<span class="sourceLineNo">726</span>          " to true while " + UNSAFE_RS_HOSTNAME_KEY + " is used";<a name="line.726"></a>
<span class="sourceLineNo">727</span>        throw new IOException(msg);<a name="line.727"></a>
<span class="sourceLineNo">728</span>      } else {<a name="line.728"></a>
<span class="sourceLineNo">729</span>        return rpcServices.isa.getHostName();<a name="line.729"></a>
<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
<span class="sourceLineNo">731</span>    } else {<a name="line.731"></a>
<span class="sourceLineNo">732</span>      return hostname;<a name="line.732"></a>
<span class="sourceLineNo">733</span>    }<a name="line.733"></a>
<span class="sourceLineNo">734</span>  }<a name="line.734"></a>
<span class="sourceLineNo">735</span><a name="line.735"></a>
<span class="sourceLineNo">736</span>  /**<a name="line.736"></a>
<span class="sourceLineNo">737</span>   * If running on Windows, do windows-specific setup.<a name="line.737"></a>
<span class="sourceLineNo">738</span>   */<a name="line.738"></a>
<span class="sourceLineNo">739</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.739"></a>
<span class="sourceLineNo">740</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.740"></a>
<span class="sourceLineNo">741</span>      Signal.handle(new Signal("HUP"), signal -&gt; {<a name="line.741"></a>
<span class="sourceLineNo">742</span>        conf.reloadConfiguration();<a name="line.742"></a>
<span class="sourceLineNo">743</span>        cm.notifyAllObservers(conf);<a name="line.743"></a>
<span class="sourceLineNo">744</span>      });<a name="line.744"></a>
<span class="sourceLineNo">745</span>    }<a name="line.745"></a>
<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
<span class="sourceLineNo">747</span><a name="line.747"></a>
<span class="sourceLineNo">748</span>  private static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.748"></a>
<span class="sourceLineNo">749</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.749"></a>
<span class="sourceLineNo">750</span>    NettyEventLoopGroupConfig nelgc =<a name="line.750"></a>
<span class="sourceLineNo">751</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.751"></a>
<span class="sourceLineNo">752</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.752"></a>
<span class="sourceLineNo">753</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.753"></a>
<span class="sourceLineNo">754</span>    return nelgc;<a name="line.754"></a>
<span class="sourceLineNo">755</span>  }<a name="line.755"></a>
<span class="sourceLineNo">756</span><a name="line.756"></a>
<span class="sourceLineNo">757</span>  private void initializeFileSystem() throws IOException {<a name="line.757"></a>
<span class="sourceLineNo">758</span>    // Get fs instance used by this RS. Do we use checksum verification in the hbase? If hbase<a name="line.758"></a>
<span class="sourceLineNo">759</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.759"></a>
<span class="sourceLineNo">760</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.760"></a>
<span class="sourceLineNo">761</span>    String walDirUri = CommonFSUtils.getDirUri(this.conf,<a name="line.761"></a>
<span class="sourceLineNo">762</span>      new Path(conf.get(CommonFSUtils.HBASE_WAL_DIR, conf.get(HConstants.HBASE_DIR))));<a name="line.762"></a>
<span class="sourceLineNo">763</span>    // set WAL's uri<a name="line.763"></a>
<span class="sourceLineNo">764</span>    if (walDirUri != null) {<a name="line.764"></a>
<span class="sourceLineNo">765</span>      CommonFSUtils.setFsDefault(this.conf, walDirUri);<a name="line.765"></a>
<span class="sourceLineNo">766</span>    }<a name="line.766"></a>
<span class="sourceLineNo">767</span>    // init the WALFs<a name="line.767"></a>
<span class="sourceLineNo">768</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.768"></a>
<span class="sourceLineNo">769</span>    this.walRootDir = CommonFSUtils.getWALRootDir(this.conf);<a name="line.769"></a>
<span class="sourceLineNo">770</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.770"></a>
<span class="sourceLineNo">771</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.771"></a>
<span class="sourceLineNo">772</span>    // (unless all is set to defaults).<a name="line.772"></a>
<span class="sourceLineNo">773</span>    String rootDirUri =<a name="line.773"></a>
<span class="sourceLineNo">774</span>        CommonFSUtils.getDirUri(this.conf, new Path(conf.get(HConstants.HBASE_DIR)));<a name="line.774"></a>
<span class="sourceLineNo">775</span>    if (rootDirUri != null) {<a name="line.775"></a>
<span class="sourceLineNo">776</span>      CommonFSUtils.setFsDefault(this.conf, rootDirUri);<a name="line.776"></a>
<span class="sourceLineNo">777</span>    }<a name="line.777"></a>
<span class="sourceLineNo">778</span>    // init the filesystem<a name="line.778"></a>
<span class="sourceLineNo">779</span>    this.dataFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.779"></a>
<span class="sourceLineNo">780</span>    this.dataRootDir = CommonFSUtils.getRootDir(this.conf);<a name="line.780"></a>
<span class="sourceLineNo">781</span>    this.tableDescriptors = new FSTableDescriptors(this.dataFs, this.dataRootDir,<a name="line.781"></a>
<span class="sourceLineNo">782</span>        !canUpdateTableDescriptor(), cacheTableDescriptor());<a name="line.782"></a>
<span class="sourceLineNo">783</span>  }<a name="line.783"></a>
<span class="sourceLineNo">784</span><a name="line.784"></a>
<span class="sourceLineNo">785</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.785"></a>
<span class="sourceLineNo">786</span>    user.login(SecurityConstants.REGIONSERVER_KRB_KEYTAB_FILE,<a name="line.786"></a>
<span class="sourceLineNo">787</span>      SecurityConstants.REGIONSERVER_KRB_PRINCIPAL, host);<a name="line.787"></a>
<span class="sourceLineNo">788</span>  }<a name="line.788"></a>
<span class="sourceLineNo">789</span><a name="line.789"></a>
<span class="sourceLineNo">790</span>  /**<a name="line.790"></a>
<span class="sourceLineNo">791</span>   * Wait for an active Master.<a name="line.791"></a>
<span class="sourceLineNo">792</span>   * See override in Master superclass for how it is used.<a name="line.792"></a>
<span class="sourceLineNo">793</span>   */<a name="line.793"></a>
<span class="sourceLineNo">794</span>  protected void waitForMasterActive() {}<a name="line.794"></a>
<span class="sourceLineNo">795</span><a name="line.795"></a>
<span class="sourceLineNo">796</span>  protected String getProcessName() {<a name="line.796"></a>
<span class="sourceLineNo">797</span>    return REGIONSERVER;<a name="line.797"></a>
<span class="sourceLineNo">798</span>  }<a name="line.798"></a>
<span class="sourceLineNo">799</span><a name="line.799"></a>
<span class="sourceLineNo">800</span>  protected boolean canCreateBaseZNode() {<a name="line.800"></a>
<span class="sourceLineNo">801</span>    return this.masterless;<a name="line.801"></a>
<span class="sourceLineNo">802</span>  }<a name="line.802"></a>
<span class="sourceLineNo">803</span><a name="line.803"></a>
<span class="sourceLineNo">804</span>  protected boolean canUpdateTableDescriptor() {<a name="line.804"></a>
<span class="sourceLineNo">805</span>    return false;<a name="line.805"></a>
<span class="sourceLineNo">806</span>  }<a name="line.806"></a>
<span class="sourceLineNo">807</span><a name="line.807"></a>
<span class="sourceLineNo">808</span>  protected boolean cacheTableDescriptor() {<a name="line.808"></a>
<span class="sourceLineNo">809</span>    return false;<a name="line.809"></a>
<span class="sourceLineNo">810</span>  }<a name="line.810"></a>
<span class="sourceLineNo">811</span><a name="line.811"></a>
<span class="sourceLineNo">812</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.812"></a>
<span class="sourceLineNo">813</span>    return new RSRpcServices(this);<a name="line.813"></a>
<span class="sourceLineNo">814</span>  }<a name="line.814"></a>
<span class="sourceLineNo">815</span><a name="line.815"></a>
<span class="sourceLineNo">816</span>  protected void configureInfoServer() {<a name="line.816"></a>
<span class="sourceLineNo">817</span>    infoServer.addUnprivilegedServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.817"></a>
<span class="sourceLineNo">818</span>    infoServer.setAttribute(REGIONSERVER, this);<a name="line.818"></a>
<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
<span class="sourceLineNo">820</span><a name="line.820"></a>
<span class="sourceLineNo">821</span>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.821"></a>
<span class="sourceLineNo">822</span>    return RSDumpServlet.class;<a name="line.822"></a>
<span class="sourceLineNo">823</span>  }<a name="line.823"></a>
<span class="sourceLineNo">824</span><a name="line.824"></a>
<span class="sourceLineNo">825</span>  @Override<a name="line.825"></a>
<span class="sourceLineNo">826</span>  public boolean registerService(Service instance) {<a name="line.826"></a>
<span class="sourceLineNo">827</span>    // No stacking of instances is allowed for a single executorService name<a name="line.827"></a>
<span class="sourceLineNo">828</span>    ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.828"></a>
<span class="sourceLineNo">829</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.829"></a>
<span class="sourceLineNo">830</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.830"></a>
<span class="sourceLineNo">831</span>      LOG.error("Coprocessor executorService " + serviceName +<a name="line.831"></a>
<span class="sourceLineNo">832</span>        " already registered, rejecting request from " + instance);<a name="line.832"></a>
<span class="sourceLineNo">833</span>      return false;<a name="line.833"></a>
<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
<span class="sourceLineNo">835</span><a name="line.835"></a>
<span class="sourceLineNo">836</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.836"></a>
<span class="sourceLineNo">837</span>    if (LOG.isDebugEnabled()) {<a name="line.837"></a>
<span class="sourceLineNo">838</span>      LOG.debug(<a name="line.838"></a>
<span class="sourceLineNo">839</span>        "Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.839"></a>
<span class="sourceLineNo">840</span>    }<a name="line.840"></a>
<span class="sourceLineNo">841</span>    return 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>  private Configuration cleanupConfiguration() {<a name="line.844"></a>
<span class="sourceLineNo">845</span>    Configuration conf = this.conf;<a name="line.845"></a>
<span class="sourceLineNo">846</span>    // We use ZKConnectionRegistry for all the internal communication, primarily for these reasons:<a name="line.846"></a>
<span class="sourceLineNo">847</span>    // - Decouples RS and master life cycles. RegionServers can continue be up independent of<a name="line.847"></a>
<span class="sourceLineNo">848</span>    //   masters' availability.<a name="line.848"></a>
<span class="sourceLineNo">849</span>    // - Configuration management for region servers (cluster internal) is much simpler when adding<a name="line.849"></a>
<span class="sourceLineNo">850</span>    //   new masters or removing existing masters, since only clients' config needs to be updated.<a name="line.850"></a>
<span class="sourceLineNo">851</span>    // - We need to retain ZKConnectionRegistry for replication use anyway, so we just extend it for<a name="line.851"></a>
<span class="sourceLineNo">852</span>    //   other internal connections too.<a name="line.852"></a>
<span class="sourceLineNo">853</span>    conf.set(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY,<a name="line.853"></a>
<span class="sourceLineNo">854</span>        HConstants.ZK_CONNECTION_REGISTRY_CLASS);<a name="line.854"></a>
<span class="sourceLineNo">855</span>    if (conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM) != null) {<a name="line.855"></a>
<span class="sourceLineNo">856</span>      // Use server ZK cluster for server-issued connections, so we clone<a name="line.856"></a>
<span class="sourceLineNo">857</span>      // the conf and unset the client ZK related properties<a name="line.857"></a>
<span class="sourceLineNo">858</span>      conf = new Configuration(this.conf);<a name="line.858"></a>
<span class="sourceLineNo">859</span>      conf.unset(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.859"></a>
<span class="sourceLineNo">860</span>    }<a name="line.860"></a>
<span class="sourceLineNo">861</span>    return conf;<a name="line.861"></a>
<span class="sourceLineNo">862</span>  }<a name="line.862"></a>
<span class="sourceLineNo">863</span><a name="line.863"></a>
<span class="sourceLineNo">864</span>  /**<a name="line.864"></a>
<span class="sourceLineNo">865</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.865"></a>
<span class="sourceLineNo">866</span>   */<a name="line.866"></a>
<span class="sourceLineNo">867</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.867"></a>
<span class="sourceLineNo">868</span>    // check to see if the codec list is available:<a name="line.868"></a>
<span class="sourceLineNo">869</span>    String [] codecs = c.getStrings(REGIONSERVER_CODEC, (String[])null);<a name="line.869"></a>
<span class="sourceLineNo">870</span>    if (codecs == null) return;<a name="line.870"></a>
<span class="sourceLineNo">871</span>    for (String codec : codecs) {<a name="line.871"></a>
<span class="sourceLineNo">872</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.872"></a>
<span class="sourceLineNo">873</span>        throw new IOException("Compression codec " + codec +<a name="line.873"></a>
<span class="sourceLineNo">874</span>          " not supported, aborting RS construction");<a name="line.874"></a>
<span class="sourceLineNo">875</span>      }<a name="line.875"></a>
<span class="sourceLineNo">876</span>    }<a name="line.876"></a>
<span class="sourceLineNo">877</span>  }<a name="line.877"></a>
<span class="sourceLineNo">878</span><a name="line.878"></a>
<span class="sourceLineNo">879</span>  public String getClusterId() {<a name="line.879"></a>
<span class="sourceLineNo">880</span>    return this.clusterId;<a name="line.880"></a>
<span class="sourceLineNo">881</span>  }<a name="line.881"></a>
<span class="sourceLineNo">882</span><a name="line.882"></a>
<span class="sourceLineNo">883</span>  /**<a name="line.883"></a>
<span class="sourceLineNo">884</span>   * Setup our cluster connection if not already initialized.<a name="line.884"></a>
<span class="sourceLineNo">885</span>   */<a name="line.885"></a>
<span class="sourceLineNo">886</span>  protected final synchronized void setupClusterConnection() throws IOException {<a name="line.886"></a>
<span class="sourceLineNo">887</span>    if (asyncClusterConnection == null) {<a name="line.887"></a>
<span class="sourceLineNo">888</span>      Configuration conf = cleanupConfiguration();<a name="line.888"></a>
<span class="sourceLineNo">889</span>      InetSocketAddress localAddress = new InetSocketAddress(this.rpcServices.isa.getAddress(), 0);<a name="line.889"></a>
<span class="sourceLineNo">890</span>      User user = userProvider.getCurrent();<a name="line.890"></a>
<span class="sourceLineNo">891</span>      asyncClusterConnection =<a name="line.891"></a>
<span class="sourceLineNo">892</span>        ClusterConnectionFactory.createAsyncClusterConnection(conf, localAddress, user);<a name="line.892"></a>
<span class="sourceLineNo">893</span>    }<a name="line.893"></a>
<span class="sourceLineNo">894</span>  }<a name="line.894"></a>
<span class="sourceLineNo">895</span><a name="line.895"></a>
<span class="sourceLineNo">896</span>  /**<a name="line.896"></a>
<span class="sourceLineNo">897</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.897"></a>
<span class="sourceLineNo">898</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.898"></a>
<span class="sourceLineNo">899</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.899"></a>
<span class="sourceLineNo">900</span>   */<a name="line.900"></a>
<span class="sourceLineNo">901</span>  private void preRegistrationInitialization() {<a name="line.901"></a>
<span class="sourceLineNo">902</span>    try {<a name="line.902"></a>
<span class="sourceLineNo">903</span>      initializeZooKeeper();<a name="line.903"></a>
<span class="sourceLineNo">904</span>      setupClusterConnection();<a name="line.904"></a>
<span class="sourceLineNo">905</span>      // Setup RPC client for master communication<a name="line.905"></a>
<span class="sourceLineNo">906</span>      this.rpcClient = asyncClusterConnection.getRpcClient();<a name="line.906"></a>
<span class="sourceLineNo">907</span>    } catch (Throwable t) {<a name="line.907"></a>
<span class="sourceLineNo">908</span>      // Call stop if error or process will stick around for ever since server<a name="line.908"></a>
<span class="sourceLineNo">909</span>      // puts up non-daemon threads.<a name="line.909"></a>
<span class="sourceLineNo">910</span>      this.rpcServices.stop();<a name="line.910"></a>
<span class="sourceLineNo">911</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.911"></a>
<span class="sourceLineNo">912</span>    }<a name="line.912"></a>
<span class="sourceLineNo">913</span>  }<a name="line.913"></a>
<span class="sourceLineNo">914</span><a name="line.914"></a>
<span class="sourceLineNo">915</span>  /**<a name="line.915"></a>
<span class="sourceLineNo">916</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.916"></a>
<span class="sourceLineNo">917</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.917"></a>
<span class="sourceLineNo">918</span>   * &lt;p&gt;<a name="line.918"></a>
<span class="sourceLineNo">919</span>   * Finally open long-living server short-circuit connection.<a name="line.919"></a>
<span class="sourceLineNo">920</span>   */<a name="line.920"></a>
<span class="sourceLineNo">921</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.921"></a>
<span class="sourceLineNo">922</span>    justification="cluster Id znode read would give us correct response")<a name="line.922"></a>
<span class="sourceLineNo">923</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.923"></a>
<span class="sourceLineNo">924</span>    // Nothing to do in here if no Master in the mix.<a name="line.924"></a>
<span class="sourceLineNo">925</span>    if (this.masterless) {<a name="line.925"></a>
<span class="sourceLineNo">926</span>      return;<a name="line.926"></a>
<span class="sourceLineNo">927</span>    }<a name="line.927"></a>
<span class="sourceLineNo">928</span><a name="line.928"></a>
<span class="sourceLineNo">929</span>    // Create the master address tracker, register with zk, and start it.  Then<a name="line.929"></a>
<span class="sourceLineNo">930</span>    // block until a master is available.  No point in starting up if no master<a name="line.930"></a>
<span class="sourceLineNo">931</span>    // running.<a name="line.931"></a>
<span class="sourceLineNo">932</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.932"></a>
<span class="sourceLineNo">933</span><a name="line.933"></a>
<span class="sourceLineNo">934</span>    // Wait on cluster being up.  Master will set this flag up in zookeeper<a name="line.934"></a>
<span class="sourceLineNo">935</span>    // when ready.<a name="line.935"></a>
<span class="sourceLineNo">936</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.936"></a>
<span class="sourceLineNo">937</span><a name="line.937"></a>
<span class="sourceLineNo">938</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.938"></a>
<span class="sourceLineNo">939</span>    if (clusterId == null) {<a name="line.939"></a>
<span class="sourceLineNo">940</span>      // Retrieve clusterId<a name="line.940"></a>
<span class="sourceLineNo">941</span>      // Since cluster status is now up<a name="line.941"></a>
<span class="sourceLineNo">942</span>      // ID should have already been set by HMaster<a name="line.942"></a>
<span class="sourceLineNo">943</span>      try {<a name="line.943"></a>
<span class="sourceLineNo">944</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.944"></a>
<span class="sourceLineNo">945</span>        if (clusterId == null) {<a name="line.945"></a>
<span class="sourceLineNo">946</span>          this.abort("Cluster ID has not been set");<a name="line.946"></a>
<span class="sourceLineNo">947</span>        }<a name="line.947"></a>
<span class="sourceLineNo">948</span>        LOG.info("ClusterId : " + clusterId);<a name="line.948"></a>
<span class="sourceLineNo">949</span>      } catch (KeeperException e) {<a name="line.949"></a>
<span class="sourceLineNo">950</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.950"></a>
<span class="sourceLineNo">951</span>      }<a name="line.951"></a>
<span class="sourceLineNo">952</span>    }<a name="line.952"></a>
<span class="sourceLineNo">953</span><a name="line.953"></a>
<span class="sourceLineNo">954</span>    waitForMasterActive();<a name="line.954"></a>
<span class="sourceLineNo">955</span>    if (isStopped() || isAborted()) {<a name="line.955"></a>
<span class="sourceLineNo">956</span>      return; // No need for further initialization<a name="line.956"></a>
<span class="sourceLineNo">957</span>    }<a name="line.957"></a>
<span class="sourceLineNo">958</span><a name="line.958"></a>
<span class="sourceLineNo">959</span>    // watch for snapshots and other procedures<a name="line.959"></a>
<span class="sourceLineNo">960</span>    try {<a name="line.960"></a>
<span class="sourceLineNo">961</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.961"></a>
<span class="sourceLineNo">962</span>      rspmHost.loadProcedures(conf);<a name="line.962"></a>
<span class="sourceLineNo">963</span>      rspmHost.initialize(this);<a name="line.963"></a>
<span class="sourceLineNo">964</span>    } catch (KeeperException e) {<a name="line.964"></a>
<span class="sourceLineNo">965</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<a name="line.965"></a>
<span class="sourceLineNo">966</span>    }<a name="line.966"></a>
<span class="sourceLineNo">967</span>  }<a name="line.967"></a>
<span class="sourceLineNo">968</span><a name="line.968"></a>
<span class="sourceLineNo">969</span>  /**<a name="line.969"></a>
<span class="sourceLineNo">970</span>   * Utilty method to wait indefinitely on a znode availability while checking<a name="line.970"></a>
<span class="sourceLineNo">971</span>   * if the region server is shut down<a name="line.971"></a>
<span class="sourceLineNo">972</span>   * @param tracker znode tracker to use<a name="line.972"></a>
<span class="sourceLineNo">973</span>   * @throws IOException any IO exception, plus if the RS is stopped<a name="line.973"></a>
<span class="sourceLineNo">974</span>   * @throws InterruptedException if the waiting thread is interrupted<a name="line.974"></a>
<span class="sourceLineNo">975</span>   */<a name="line.975"></a>
<span class="sourceLineNo">976</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.976"></a>
<span class="sourceLineNo">977</span>      throws IOException, InterruptedException {<a name="line.977"></a>
<span class="sourceLineNo">978</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.978"></a>
<span class="sourceLineNo">979</span>      if (this.stopped) {<a name="line.979"></a>
<span class="sourceLineNo">980</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.980"></a>
<span class="sourceLineNo">981</span>      }<a name="line.981"></a>
<span class="sourceLineNo">982</span>    }<a name="line.982"></a>
<span class="sourceLineNo">983</span>  }<a name="line.983"></a>
<span class="sourceLineNo">984</span><a name="line.984"></a>
<span class="sourceLineNo">985</span>  /**<a name="line.985"></a>
<span class="sourceLineNo">986</span>   * @return True if the cluster is up.<a name="line.986"></a>
<span class="sourceLineNo">987</span>   */<a name="line.987"></a>
<span class="sourceLineNo">988</span>  @Override<a name="line.988"></a>
<span class="sourceLineNo">989</span>  public boolean isClusterUp() {<a name="line.989"></a>
<span class="sourceLineNo">990</span>    return this.masterless ||<a name="line.990"></a>
<span class="sourceLineNo">991</span>        (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.991"></a>
<span class="sourceLineNo">992</span>  }<a name="line.992"></a>
<span class="sourceLineNo">993</span><a name="line.993"></a>
<span class="sourceLineNo">994</span>  /**<a name="line.994"></a>
<span class="sourceLineNo">995</span>   * The HRegionServer sticks in this loop until closed.<a name="line.995"></a>
<span class="sourceLineNo">996</span>   */<a name="line.996"></a>
<span class="sourceLineNo">997</span>  @Override<a name="line.997"></a>
<span class="sourceLineNo">998</span>  public void run() {<a name="line.998"></a>
<span class="sourceLineNo">999</span>    if (isStopped()) {<a name="line.999"></a>
<span class="sourceLineNo">1000</span>      LOG.info("Skipping run; stopped");<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>      return;<a name="line.1001"></a>
<span class="sourceLineNo">1002</span>    }<a name="line.1002"></a>
<span class="sourceLineNo">1003</span>    try {<a name="line.1003"></a>
<span class="sourceLineNo">1004</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.1004"></a>
<span class="sourceLineNo">1005</span>      preRegistrationInitialization();<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>    } catch (Throwable e) {<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>      abort("Fatal exception during initialization", e);<a name="line.1007"></a>
<span class="sourceLineNo">1008</span>    }<a name="line.1008"></a>
<span class="sourceLineNo">1009</span><a name="line.1009"></a>
<span class="sourceLineNo">1010</span>    try {<a name="line.1010"></a>
<span class="sourceLineNo">1011</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>        ShutdownHook.install(conf, dataFs, this, Thread.currentThread());<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.1015"></a>
<span class="sourceLineNo">1016</span><a name="line.1016"></a>
<span class="sourceLineNo">1017</span>        // Get configurations from the Master. Break if server is stopped or<a name="line.1017"></a>
<span class="sourceLineNo">1018</span>        // the clusterup flag is down or hdfs went wacky. Then start up all Services.<a name="line.1018"></a>
<span class="sourceLineNo">1019</span>        // Use RetryCounter to get backoff in case Master is struggling to come up.<a name="line.1019"></a>
<span class="sourceLineNo">1020</span>        LOG.debug("About to register with Master.");<a name="line.1020"></a>
<span class="sourceLineNo">1021</span>        RetryCounterFactory rcf =<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>          new RetryCounterFactory(Integer.MAX_VALUE, this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.1022"></a>
<span class="sourceLineNo">1023</span>        RetryCounter rc = rcf.create();<a name="line.1023"></a>
<span class="sourceLineNo">1024</span>        while (keepLooping()) {<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>          RegionServerStartupResponse w = reportForDuty();<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>          if (w == null) {<a name="line.1026"></a>
<span class="sourceLineNo">1027</span>            long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.1027"></a>
<span class="sourceLineNo">1028</span>            LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>            this.sleeper.sleep(sleepTime);<a name="line.1029"></a>
<span class="sourceLineNo">1030</span>          } else {<a name="line.1030"></a>
<span class="sourceLineNo">1031</span>            handleReportForDutyResponse(w);<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>            break;<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>          }<a name="line.1033"></a>
<span class="sourceLineNo">1034</span>        }<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>      }<a name="line.1035"></a>
<span class="sourceLineNo">1036</span><a name="line.1036"></a>
<span class="sourceLineNo">1037</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.1037"></a>
<span class="sourceLineNo">1038</span>        // start the snapshot handler and other procedure handlers,<a name="line.1038"></a>
<span class="sourceLineNo">1039</span>        // since the server is ready to run<a name="line.1039"></a>
<span class="sourceLineNo">1040</span>        if (this.rspmHost != null) {<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>          this.rspmHost.start();<a name="line.1041"></a>
<span class="sourceLineNo">1042</span>        }<a name="line.1042"></a>
<span class="sourceLineNo">1043</span>        // Start the Quota Manager<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>        if (this.rsQuotaManager != null) {<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>          rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.1045"></a>
<span class="sourceLineNo">1046</span>        }<a name="line.1046"></a>
<span class="sourceLineNo">1047</span>        if (this.rsSpaceQuotaManager != null) {<a name="line.1047"></a>
<span class="sourceLineNo">1048</span>          this.rsSpaceQuotaManager.start();<a name="line.1048"></a>
<span class="sourceLineNo">1049</span>        }<a name="line.1049"></a>
<span class="sourceLineNo">1050</span>      }<a name="line.1050"></a>
<span class="sourceLineNo">1051</span><a name="line.1051"></a>
<span class="sourceLineNo">1052</span>      // Run mode.<a name="line.1052"></a>
<span class="sourceLineNo">1053</span>      long lastMsg = System.currentTimeMillis();<a name="line.1053"></a>
<span class="sourceLineNo">1054</span>      long oldRequestCount = -1;<a name="line.1054"></a>
<span class="sourceLineNo">1055</span>      // The main run loop.<a name="line.1055"></a>
<span class="sourceLineNo">1056</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>        if (!isClusterUp()) {<a name="line.1057"></a>
<span class="sourceLineNo">1058</span>          if (onlineRegions.isEmpty()) {<a name="line.1058"></a>
<span class="sourceLineNo">1059</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.1059"></a>
<span class="sourceLineNo">1060</span>          } else if (!this.stopping) {<a name="line.1060"></a>
<span class="sourceLineNo">1061</span>            this.stopping = true;<a name="line.1061"></a>
<span class="sourceLineNo">1062</span>            LOG.info("Closing user regions");<a name="line.1062"></a>
<span class="sourceLineNo">1063</span>            closeUserRegions(this.abortRequested.get());<a name="line.1063"></a>
<span class="sourceLineNo">1064</span>          } else {<a name="line.1064"></a>
<span class="sourceLineNo">1065</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.1065"></a>
<span class="sourceLineNo">1066</span>            if (allUserRegionsOffline) {<a name="line.1066"></a>
<span class="sourceLineNo">1067</span>              // Set stopped if no more write requests tp meta tables<a name="line.1067"></a>
<span class="sourceLineNo">1068</span>              // since last time we went around the loop.  Any open<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>              // meta regions will be closed on our way out.<a name="line.1069"></a>
<span class="sourceLineNo">1070</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.1070"></a>
<span class="sourceLineNo">1071</span>                stop("Stopped; only catalog regions remaining online");<a name="line.1071"></a>
<span class="sourceLineNo">1072</span>                break;<a name="line.1072"></a>
<span class="sourceLineNo">1073</span>              }<a name="line.1073"></a>
<span class="sourceLineNo">1074</span>              oldRequestCount = getWriteRequestCount();<a name="line.1074"></a>
<span class="sourceLineNo">1075</span>            } else {<a name="line.1075"></a>
<span class="sourceLineNo">1076</span>              // Make sure all regions have been closed -- some regions may<a name="line.1076"></a>
<span class="sourceLineNo">1077</span>              // have not got it because we were splitting at the time of<a name="line.1077"></a>
<span class="sourceLineNo">1078</span>              // the call to closeUserRegions.<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>              closeUserRegions(this.abortRequested.get());<a name="line.1079"></a>
<span class="sourceLineNo">1080</span>            }<a name="line.1080"></a>
<span class="sourceLineNo">1081</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>          }<a name="line.1082"></a>
<span class="sourceLineNo">1083</span>        }<a name="line.1083"></a>
<span class="sourceLineNo">1084</span>        long now = System.currentTimeMillis();<a name="line.1084"></a>
<span class="sourceLineNo">1085</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.1085"></a>
<span class="sourceLineNo">1086</span>          // Register with the Master now that our setup is complete.<a name="line.1086"></a>
<span class="sourceLineNo">1087</span>          if (tryRegionServerReport(lastMsg, now) &amp;&amp; !online.get()) {<a name="line.1087"></a>
<span class="sourceLineNo">1088</span>            // Wake up anyone waiting for this server to online<a name="line.1088"></a>
<span class="sourceLineNo">1089</span>            synchronized (online) {<a name="line.1089"></a>
<span class="sourceLineNo">1090</span>              online.set(true);<a name="line.1090"></a>
<span class="sourceLineNo">1091</span>              online.notifyAll();<a name="line.1091"></a>
<span class="sourceLineNo">1092</span>            }<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>          }<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>          lastMsg = System.currentTimeMillis();<a name="line.1094"></a>
<span class="sourceLineNo">1095</span>        }<a name="line.1095"></a>
<span class="sourceLineNo">1096</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1096"></a>
<span class="sourceLineNo">1097</span>          this.sleeper.sleep();<a name="line.1097"></a>
<span class="sourceLineNo">1098</span>        }<a name="line.1098"></a>
<span class="sourceLineNo">1099</span>      } // for<a name="line.1099"></a>
<span class="sourceLineNo">1100</span>    } catch (Throwable t) {<a name="line.1100"></a>
<span class="sourceLineNo">1101</span>      if (!rpcServices.checkOOME(t)) {<a name="line.1101"></a>
<span class="sourceLineNo">1102</span>        String prefix = t instanceof YouAreDeadException? "": "Unhandled: ";<a name="line.1102"></a>
<span class="sourceLineNo">1103</span>        abort(prefix + t.getMessage(), t);<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><a name="line.1106"></a>
<span class="sourceLineNo">1107</span>    if (this.leaseManager != null) {<a name="line.1107"></a>
<span class="sourceLineNo">1108</span>      this.leaseManager.closeAfterLeasesExpire();<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>    }<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>    if (this.splitLogWorker != null) {<a name="line.1110"></a>
<span class="sourceLineNo">1111</span>      splitLogWorker.stop();<a name="line.1111"></a>
<span class="sourceLineNo">1112</span>    }<a name="line.1112"></a>
<span class="sourceLineNo">1113</span>    if (this.infoServer != null) {<a name="line.1113"></a>
<span class="sourceLineNo">1114</span>      LOG.info("Stopping infoServer");<a name="line.1114"></a>
<span class="sourceLineNo">1115</span>      try {<a name="line.1115"></a>
<span class="sourceLineNo">1116</span>        this.infoServer.stop();<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>      } catch (Exception e) {<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>        LOG.error("Failed to stop infoServer", e);<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>    // Send cache a shutdown.<a name="line.1121"></a>
<span class="sourceLineNo">1122</span>    if (blockCache != null) {<a name="line.1122"></a>
<span class="sourceLineNo">1123</span>      blockCache.shutdown();<a name="line.1123"></a>
<span class="sourceLineNo">1124</span>    }<a name="line.1124"></a>
<span class="sourceLineNo">1125</span>    if (mobFileCache != null) {<a name="line.1125"></a>
<span class="sourceLineNo">1126</span>      mobFileCache.shutdown();<a name="line.1126"></a>
<span class="sourceLineNo">1127</span>    }<a name="line.1127"></a>
<span class="sourceLineNo">1128</span><a name="line.1128"></a>
<span class="sourceLineNo">1129</span>    // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.1129"></a>
<span class="sourceLineNo">1130</span>    // TODO: Should we check they are alive? If OOME could have exited already<a name="line.1130"></a>
<span class="sourceLineNo">1131</span>    if (this.hMemManager != null) this.hMemManager.stop();<a name="line.1131"></a>
<span class="sourceLineNo">1132</span>    if (this.cacheFlusher != null) this.cacheFlusher.interruptIfNecessary();<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>    if (this.compactSplitThread != null) this.compactSplitThread.interruptIfNecessary();<a name="line.1133"></a>
<span class="sourceLineNo">1134</span><a name="line.1134"></a>
<span class="sourceLineNo">1135</span>    // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>    if (rspmHost != null) {<a name="line.1136"></a>
<span class="sourceLineNo">1137</span>      rspmHost.stop(this.abortRequested.get() || this.killed);<a name="line.1137"></a>
<span class="sourceLineNo">1138</span>    }<a name="line.1138"></a>
<span class="sourceLineNo">1139</span><a name="line.1139"></a>
<span class="sourceLineNo">1140</span>    if (this.killed) {<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>      // Just skip out w/o closing regions.  Used when testing.<a name="line.1141"></a>
<span class="sourceLineNo">1142</span>    } else if (abortRequested.get()) {<a name="line.1142"></a>
<span class="sourceLineNo">1143</span>      if (this.dataFsOk) {<a name="line.1143"></a>
<span class="sourceLineNo">1144</span>        closeUserRegions(abortRequested.get()); // Don't leave any open file handles<a name="line.1144"></a>
<span class="sourceLineNo">1145</span>      }<a name="line.1145"></a>
<span class="sourceLineNo">1146</span>      LOG.info("aborting server " + this.serverName);<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>    } else {<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>      closeUserRegions(abortRequested.get());<a name="line.1148"></a>
<span class="sourceLineNo">1149</span>      LOG.info("stopping server " + this.serverName);<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>    }<a name="line.1150"></a>
<span class="sourceLineNo">1151</span><a name="line.1151"></a>
<span class="sourceLineNo">1152</span>    if (this.asyncClusterConnection != null) {<a name="line.1152"></a>
<span class="sourceLineNo">1153</span>      try {<a name="line.1153"></a>
<span class="sourceLineNo">1154</span>        this.asyncClusterConnection.close();<a name="line.1154"></a>
<span class="sourceLineNo">1155</span>      } catch (IOException e) {<a name="line.1155"></a>
<span class="sourceLineNo">1156</span>        // Although the {@link Closeable} interface throws an {@link<a name="line.1156"></a>
<span class="sourceLineNo">1157</span>        // IOException}, in reality, the implementation would never do that.<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>        LOG.warn("Attempt to close server's AsyncClusterConnection failed.", e);<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>    // Closing the compactSplit thread before closing meta regions<a name="line.1161"></a>
<span class="sourceLineNo">1162</span>    if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>      if (!abortRequested.get() || this.dataFsOk) {<a name="line.1163"></a>
<span class="sourceLineNo">1164</span>        if (this.compactSplitThread != null) {<a name="line.1164"></a>
<span class="sourceLineNo">1165</span>          this.compactSplitThread.join();<a name="line.1165"></a>
<span class="sourceLineNo">1166</span>          this.compactSplitThread = null;<a name="line.1166"></a>
<span class="sourceLineNo">1167</span>        }<a name="line.1167"></a>
<span class="sourceLineNo">1168</span>        closeMetaTableRegions(abortRequested.get());<a name="line.1168"></a>
<span class="sourceLineNo">1169</span>      }<a name="line.1169"></a>
<span class="sourceLineNo">1170</span>    }<a name="line.1170"></a>
<span class="sourceLineNo">1171</span><a name="line.1171"></a>
<span class="sourceLineNo">1172</span>    if (!this.killed &amp;&amp; this.dataFsOk) {<a name="line.1172"></a>
<span class="sourceLineNo">1173</span>      waitOnAllRegionsToClose(abortRequested.get());<a name="line.1173"></a>
<span class="sourceLineNo">1174</span>      LOG.info("stopping server " + this.serverName + "; all regions closed.");<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>    }<a name="line.1175"></a>
<span class="sourceLineNo">1176</span><a name="line.1176"></a>
<span class="sourceLineNo">1177</span>    // Stop the quota manager<a name="line.1177"></a>
<span class="sourceLineNo">1178</span>    if (rsQuotaManager != null) {<a name="line.1178"></a>
<span class="sourceLineNo">1179</span>      rsQuotaManager.stop();<a name="line.1179"></a>
<span class="sourceLineNo">1180</span>    }<a name="line.1180"></a>
<span class="sourceLineNo">1181</span>    if (rsSpaceQuotaManager != null) {<a name="line.1181"></a>
<span class="sourceLineNo">1182</span>      rsSpaceQuotaManager.stop();<a name="line.1182"></a>
<span class="sourceLineNo">1183</span>      rsSpaceQuotaManager = null;<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>    }<a name="line.1184"></a>
<span class="sourceLineNo">1185</span><a name="line.1185"></a>
<span class="sourceLineNo">1186</span>    // flag may be changed when closing regions throws exception.<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>    if (this.dataFsOk) {<a name="line.1187"></a>
<span class="sourceLineNo">1188</span>      shutdownWAL(!abortRequested.get());<a name="line.1188"></a>
<span class="sourceLineNo">1189</span>    }<a name="line.1189"></a>
<span class="sourceLineNo">1190</span><a name="line.1190"></a>
<span class="sourceLineNo">1191</span>    // Make sure the proxy is down.<a name="line.1191"></a>
<span class="sourceLineNo">1192</span>    if (this.rssStub != null) {<a name="line.1192"></a>
<span class="sourceLineNo">1193</span>      this.rssStub = null;<a name="line.1193"></a>
<span class="sourceLineNo">1194</span>    }<a name="line.1194"></a>
<span class="sourceLineNo">1195</span>    if (this.lockStub != null) {<a name="line.1195"></a>
<span class="sourceLineNo">1196</span>      this.lockStub = null;<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>    }<a name="line.1197"></a>
<span class="sourceLineNo">1198</span>    if (this.rpcClient != null) {<a name="line.1198"></a>
<span class="sourceLineNo">1199</span>      this.rpcClient.close();<a name="line.1199"></a>
<span class="sourceLineNo">1200</span>    }<a name="line.1200"></a>
<span class="sourceLineNo">1201</span>    if (this.leaseManager != null) {<a name="line.1201"></a>
<span class="sourceLineNo">1202</span>      this.leaseManager.close();<a name="line.1202"></a>
<span class="sourceLineNo">1203</span>    }<a name="line.1203"></a>
<span class="sourceLineNo">1204</span>    if (this.pauseMonitor != null) {<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>      this.pauseMonitor.stop();<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>    }<a name="line.1206"></a>
<span class="sourceLineNo">1207</span><a name="line.1207"></a>
<span class="sourceLineNo">1208</span>    if (!killed) {<a name="line.1208"></a>
<span class="sourceLineNo">1209</span>      stopServiceThreads();<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>    }<a name="line.1210"></a>
<span class="sourceLineNo">1211</span><a name="line.1211"></a>
<span class="sourceLineNo">1212</span>    if (this.rpcServices != null) {<a name="line.1212"></a>
<span class="sourceLineNo">1213</span>      this.rpcServices.stop();<a name="line.1213"></a>
<span class="sourceLineNo">1214</span>    }<a name="line.1214"></a>
<span class="sourceLineNo">1215</span><a name="line.1215"></a>
<span class="sourceLineNo">1216</span>    try {<a name="line.1216"></a>
<span class="sourceLineNo">1217</span>      deleteMyEphemeralNode();<a name="line.1217"></a>
<span class="sourceLineNo">1218</span>    } catch (KeeperException.NoNodeException nn) {<a name="line.1218"></a>
<span class="sourceLineNo">1219</span>      // pass<a name="line.1219"></a>
<span class="sourceLineNo">1220</span>    } catch (KeeperException e) {<a name="line.1220"></a>
<span class="sourceLineNo">1221</span>      LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1221"></a>
<span class="sourceLineNo">1222</span>    }<a name="line.1222"></a>
<span class="sourceLineNo">1223</span>    // We may have failed to delete the znode at the previous step, but<a name="line.1223"></a>
<span class="sourceLineNo">1224</span>    //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>    ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1225"></a>
<span class="sourceLineNo">1226</span><a name="line.1226"></a>
<span class="sourceLineNo">1227</span>    if (this.zooKeeper != null) {<a name="line.1227"></a>
<span class="sourceLineNo">1228</span>      this.zooKeeper.close();<a name="line.1228"></a>
<span class="sourceLineNo">1229</span>    }<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>    this.shutDown = true;<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>    LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<a name="line.1231"></a>
<span class="sourceLineNo">1232</span>  }<a name="line.1232"></a>
<span class="sourceLineNo">1233</span><a name="line.1233"></a>
<span class="sourceLineNo">1234</span>  private boolean containsMetaTableRegions() {<a name="line.1234"></a>
<span class="sourceLineNo">1235</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<a name="line.1235"></a>
<span class="sourceLineNo">1236</span>  }<a name="line.1236"></a>
<span class="sourceLineNo">1237</span><a name="line.1237"></a>
<span class="sourceLineNo">1238</span>  private boolean areAllUserRegionsOffline() {<a name="line.1238"></a>
<span class="sourceLineNo">1239</span>    if (getNumberOfOnlineRegions() &gt; 2) return false;<a name="line.1239"></a>
<span class="sourceLineNo">1240</span>    boolean allUserRegionsOffline = true;<a name="line.1240"></a>
<span class="sourceLineNo">1241</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1241"></a>
<span class="sourceLineNo">1242</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1242"></a>
<span class="sourceLineNo">1243</span>        allUserRegionsOffline = false;<a name="line.1243"></a>
<span class="sourceLineNo">1244</span>        break;<a name="line.1244"></a>
<span class="sourceLineNo">1245</span>      }<a name="line.1245"></a>
<span class="sourceLineNo">1246</span>    }<a name="line.1246"></a>
<span class="sourceLineNo">1247</span>    return allUserRegionsOffline;<a name="line.1247"></a>
<span class="sourceLineNo">1248</span>  }<a name="line.1248"></a>
<span class="sourceLineNo">1249</span><a name="line.1249"></a>
<span class="sourceLineNo">1250</span>  /**<a name="line.1250"></a>
<span class="sourceLineNo">1251</span>   * @return Current write count for all online regions.<a name="line.1251"></a>
<span class="sourceLineNo">1252</span>   */<a name="line.1252"></a>
<span class="sourceLineNo">1253</span>  private long getWriteRequestCount() {<a name="line.1253"></a>
<span class="sourceLineNo">1254</span>    long writeCount = 0;<a name="line.1254"></a>
<span class="sourceLineNo">1255</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1255"></a>
<span class="sourceLineNo">1256</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1256"></a>
<span class="sourceLineNo">1257</span>    }<a name="line.1257"></a>
<span class="sourceLineNo">1258</span>    return writeCount;<a name="line.1258"></a>
<span class="sourceLineNo">1259</span>  }<a name="line.1259"></a>
<span class="sourceLineNo">1260</span><a name="line.1260"></a>
<span class="sourceLineNo">1261</span>  @InterfaceAudience.Private<a name="line.1261"></a>
<span class="sourceLineNo">1262</span>  protected boolean tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1262"></a>
<span class="sourceLineNo">1263</span>      throws IOException {<a name="line.1263"></a>
<span class="sourceLineNo">1264</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1264"></a>
<span class="sourceLineNo">1265</span>    if (rss == null) {<a name="line.1265"></a>
<span class="sourceLineNo">1266</span>      // the current server could be stopping.<a name="line.1266"></a>
<span class="sourceLineNo">1267</span>      return false;<a name="line.1267"></a>
<span class="sourceLineNo">1268</span>    }<a name="line.1268"></a>
<span class="sourceLineNo">1269</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1269"></a>
<span class="sourceLineNo">1270</span>    try {<a name="line.1270"></a>
<span class="sourceLineNo">1271</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1271"></a>
<span class="sourceLineNo">1272</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1272"></a>
<span class="sourceLineNo">1273</span>      request.setLoad(sl);<a name="line.1273"></a>
<span class="sourceLineNo">1274</span>      rss.regionServerReport(null, request.build());<a name="line.1274"></a>
<span class="sourceLineNo">1275</span>    } catch (ServiceException se) {<a name="line.1275"></a>
<span class="sourceLineNo">1276</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1276"></a>
<span class="sourceLineNo">1277</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1277"></a>
<span class="sourceLineNo">1278</span>        // This will be caught and handled as a fatal error in run()<a name="line.1278"></a>
<span class="sourceLineNo">1279</span>        throw ioe;<a name="line.1279"></a>
<span class="sourceLineNo">1280</span>      }<a name="line.1280"></a>
<span class="sourceLineNo">1281</span>      if (rssStub == rss) {<a name="line.1281"></a>
<span class="sourceLineNo">1282</span>        rssStub = null;<a name="line.1282"></a>
<span class="sourceLineNo">1283</span>      }<a name="line.1283"></a>
<span class="sourceLineNo">1284</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1284"></a>
<span class="sourceLineNo">1285</span>      // Method blocks until new master is found or we are stopped<a name="line.1285"></a>
<span class="sourceLineNo">1286</span>      createRegionServerStatusStub(true);<a name="line.1286"></a>
<span class="sourceLineNo">1287</span>      return false;<a name="line.1287"></a>
<span class="sourceLineNo">1288</span>    }<a name="line.1288"></a>
<span class="sourceLineNo">1289</span>    return true;<a name="line.1289"></a>
<span class="sourceLineNo">1290</span>  }<a name="line.1290"></a>
<span class="sourceLineNo">1291</span><a name="line.1291"></a>
<span class="sourceLineNo">1292</span>  /**<a name="line.1292"></a>
<span class="sourceLineNo">1293</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1293"></a>
<span class="sourceLineNo">1294</span>   *<a name="line.1294"></a>
<span class="sourceLineNo">1295</span>   * @param regionSizeStore The store containing region sizes<a name="line.1295"></a>
<span class="sourceLineNo">1296</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1296"></a>
<span class="sourceLineNo">1297</span>   */<a name="line.1297"></a>
<span class="sourceLineNo">1298</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1298"></a>
<span class="sourceLineNo">1299</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1299"></a>
<span class="sourceLineNo">1300</span>    if (rss == null) {<a name="line.1300"></a>
<span class="sourceLineNo">1301</span>      // the current server could be stopping.<a name="line.1301"></a>
<span class="sourceLineNo">1302</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1302"></a>
<span class="sourceLineNo">1303</span>      return true;<a name="line.1303"></a>
<span class="sourceLineNo">1304</span>    }<a name="line.1304"></a>
<span class="sourceLineNo">1305</span>    try {<a name="line.1305"></a>
<span class="sourceLineNo">1306</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1306"></a>
<span class="sourceLineNo">1307</span>    } catch (ServiceException se) {<a name="line.1307"></a>
<span class="sourceLineNo">1308</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1308"></a>
<span class="sourceLineNo">1309</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1309"></a>
<span class="sourceLineNo">1310</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1310"></a>
<span class="sourceLineNo">1311</span>            + " This will be retried.", ioe);<a name="line.1311"></a>
<span class="sourceLineNo">1312</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1312"></a>
<span class="sourceLineNo">1313</span>        return true;<a name="line.1313"></a>
<span class="sourceLineNo">1314</span>      }<a name="line.1314"></a>
<span class="sourceLineNo">1315</span>      if (rssStub == rss) {<a name="line.1315"></a>
<span class="sourceLineNo">1316</span>        rssStub = null;<a name="line.1316"></a>
<span class="sourceLineNo">1317</span>      }<a name="line.1317"></a>
<span class="sourceLineNo">1318</span>      createRegionServerStatusStub(true);<a name="line.1318"></a>
<span class="sourceLineNo">1319</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1319"></a>
<span class="sourceLineNo">1320</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1320"></a>
<span class="sourceLineNo">1321</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1321"></a>
<span class="sourceLineNo">1322</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1322"></a>
<span class="sourceLineNo">1323</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1323"></a>
<span class="sourceLineNo">1324</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1324"></a>
<span class="sourceLineNo">1325</span>            return false;<a name="line.1325"></a>
<span class="sourceLineNo">1326</span>          }<a name="line.1326"></a>
<span class="sourceLineNo">1327</span>        }<a name="line.1327"></a>
<span class="sourceLineNo">1328</span>      }<a name="line.1328"></a>
<span class="sourceLineNo">1329</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1329"></a>
<span class="sourceLineNo">1330</span>    }<a name="line.1330"></a>
<span class="sourceLineNo">1331</span>    return true;<a name="line.1331"></a>
<span class="sourceLineNo">1332</span>  }<a name="line.1332"></a>
<span class="sourceLineNo">1333</span><a name="line.1333"></a>
<span class="sourceLineNo">1334</span>  /**<a name="line.1334"></a>
<span class="sourceLineNo">1335</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1335"></a>
<span class="sourceLineNo">1336</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1336"></a>
<span class="sourceLineNo">1337</span>   *<a name="line.1337"></a>
<span class="sourceLineNo">1338</span>   * @param rss The stub to send to the Master<a name="line.1338"></a>
<span class="sourceLineNo">1339</span>   * @param regionSizeStore The store containing region sizes<a name="line.1339"></a>
<span class="sourceLineNo">1340</span>   */<a name="line.1340"></a>
<span class="sourceLineNo">1341</span>  private void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1341"></a>
<span class="sourceLineNo">1342</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1342"></a>
<span class="sourceLineNo">1343</span>    RegionSpaceUseReportRequest request =<a name="line.1343"></a>
<span class="sourceLineNo">1344</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1344"></a>
<span class="sourceLineNo">1345</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1345"></a>
<span class="sourceLineNo">1346</span>    // Record the number of size reports sent<a name="line.1346"></a>
<span class="sourceLineNo">1347</span>    if (metricsRegionServer != null) {<a name="line.1347"></a>
<span class="sourceLineNo">1348</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1348"></a>
<span class="sourceLineNo">1349</span>    }<a name="line.1349"></a>
<span class="sourceLineNo">1350</span>  }<a name="line.1350"></a>
<span class="sourceLineNo">1351</span><a name="line.1351"></a>
<span class="sourceLineNo">1352</span>  /**<a name="line.1352"></a>
<span class="sourceLineNo">1353</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1353"></a>
<span class="sourceLineNo">1354</span>   *<a name="line.1354"></a>
<span class="sourceLineNo">1355</span>   * @param regionSizes The size in bytes of regions<a name="line.1355"></a>
<span class="sourceLineNo">1356</span>   * @return The corresponding protocol buffer message.<a name="line.1356"></a>
<span class="sourceLineNo">1357</span>   */<a name="line.1357"></a>
<span class="sourceLineNo">1358</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1358"></a>
<span class="sourceLineNo">1359</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1359"></a>
<span class="sourceLineNo">1360</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1360"></a>
<span class="sourceLineNo">1361</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1361"></a>
<span class="sourceLineNo">1362</span>    }<a name="line.1362"></a>
<span class="sourceLineNo">1363</span>    return request.build();<a name="line.1363"></a>
<span class="sourceLineNo">1364</span>  }<a name="line.1364"></a>
<span class="sourceLineNo">1365</span><a name="line.1365"></a>
<span class="sourceLineNo">1366</span>  /**<a name="line.1366"></a>
<span class="sourceLineNo">1367</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1367"></a>
<span class="sourceLineNo">1368</span>   * protobuf message.<a name="line.1368"></a>
<span class="sourceLineNo">1369</span>   *<a name="line.1369"></a>
<span class="sourceLineNo">1370</span>   * @param regionInfo The RegionInfo<a name="line.1370"></a>
<span class="sourceLineNo">1371</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1371"></a>
<span class="sourceLineNo">1372</span>   * @return The protocol buffer<a name="line.1372"></a>
<span class="sourceLineNo">1373</span>   */<a name="line.1373"></a>
<span class="sourceLineNo">1374</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1374"></a>
<span class="sourceLineNo">1375</span>    return RegionSpaceUse.newBuilder()<a name="line.1375"></a>
<span class="sourceLineNo">1376</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1376"></a>
<span class="sourceLineNo">1377</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1377"></a>
<span class="sourceLineNo">1378</span>        .build();<a name="line.1378"></a>
<span class="sourceLineNo">1379</span>  }<a name="line.1379"></a>
<span class="sourceLineNo">1380</span><a name="line.1380"></a>
<span class="sourceLineNo">1381</span>  private ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1381"></a>
<span class="sourceLineNo">1382</span>      throws IOException {<a name="line.1382"></a>
<span class="sourceLineNo">1383</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1383"></a>
<span class="sourceLineNo">1384</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1384"></a>
<span class="sourceLineNo">1385</span>    // the wrapper to compute those numbers in one place.<a name="line.1385"></a>
<span class="sourceLineNo">1386</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1386"></a>
<span class="sourceLineNo">1387</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1387"></a>
<span class="sourceLineNo">1388</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1388"></a>
<span class="sourceLineNo">1389</span>    // history.<a name="line.1389"></a>
<span class="sourceLineNo">1390</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1390"></a>
<span class="sourceLineNo">1391</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1391"></a>
<span class="sourceLineNo">1392</span>    long usedMemory = -1L;<a name="line.1392"></a>
<span class="sourceLineNo">1393</span>    long maxMemory = -1L;<a name="line.1393"></a>
<span class="sourceLineNo">1394</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1394"></a>
<span class="sourceLineNo">1395</span>    if (usage != null) {<a name="line.1395"></a>
<span class="sourceLineNo">1396</span>      usedMemory = usage.getUsed();<a name="line.1396"></a>
<span class="sourceLineNo">1397</span>      maxMemory = usage.getMax();<a name="line.1397"></a>
<span class="sourceLineNo">1398</span>    }<a name="line.1398"></a>
<span class="sourceLineNo">1399</span><a name="line.1399"></a>
<span class="sourceLineNo">1400</span>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1400"></a>
<span class="sourceLineNo">1401</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1401"></a>
<span class="sourceLineNo">1402</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1402"></a>
<span class="sourceLineNo">1403</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1403"></a>
<span class="sourceLineNo">1404</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1404"></a>
<span class="sourceLineNo">1405</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1405"></a>
<span class="sourceLineNo">1406</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1406"></a>
<span class="sourceLineNo">1407</span>    for (String coprocessor : coprocessors) {<a name="line.1407"></a>
<span class="sourceLineNo">1408</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1408"></a>
<span class="sourceLineNo">1409</span>    }<a name="line.1409"></a>
<span class="sourceLineNo">1410</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1410"></a>
<span class="sourceLineNo">1411</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1411"></a>
<span class="sourceLineNo">1412</span>    for (HRegion region : regions) {<a name="line.1412"></a>
<span class="sourceLineNo">1413</span>      if (region.getCoprocessorHost() != null) {<a name="line.1413"></a>
<span class="sourceLineNo">1414</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1414"></a>
<span class="sourceLineNo">1415</span>        for (String regionCoprocessor : regionCoprocessors) {<a name="line.1415"></a>
<span class="sourceLineNo">1416</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(regionCoprocessor).build());<a name="line.1416"></a>
<span class="sourceLineNo">1417</span>        }<a name="line.1417"></a>
<span class="sourceLineNo">1418</span>      }<a name="line.1418"></a>
<span class="sourceLineNo">1419</span>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1419"></a>
<span class="sourceLineNo">1420</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1420"></a>
<span class="sourceLineNo">1421</span>          .getCoprocessors()) {<a name="line.1421"></a>
<span class="sourceLineNo">1422</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1422"></a>
<span class="sourceLineNo">1423</span>      }<a name="line.1423"></a>
<span class="sourceLineNo">1424</span>    }<a name="line.1424"></a>
<span class="sourceLineNo">1425</span>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1425"></a>
<span class="sourceLineNo">1426</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1426"></a>
<span class="sourceLineNo">1427</span>    if (this.infoServer != null) {<a name="line.1427"></a>
<span class="sourceLineNo">1428</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1428"></a>
<span class="sourceLineNo">1429</span>    } else {<a name="line.1429"></a>
<span class="sourceLineNo">1430</span>      serverLoad.setInfoServerPort(-1);<a name="line.1430"></a>
<span class="sourceLineNo">1431</span>    }<a name="line.1431"></a>
<span class="sourceLineNo">1432</span>    MetricsUserAggregateSource userSource =<a name="line.1432"></a>
<span class="sourceLineNo">1433</span>        metricsRegionServer.getMetricsUserAggregate().getSource();<a name="line.1433"></a>
<span class="sourceLineNo">1434</span>    if (userSource != null) {<a name="line.1434"></a>
<span class="sourceLineNo">1435</span>      Map&lt;String, MetricsUserSource&gt; userMetricMap = userSource.getUserSources();<a name="line.1435"></a>
<span class="sourceLineNo">1436</span>      for (Entry&lt;String, MetricsUserSource&gt; entry : userMetricMap.entrySet()) {<a name="line.1436"></a>
<span class="sourceLineNo">1437</span>        serverLoad.addUserLoads(createUserLoad(entry.getKey(), entry.getValue()));<a name="line.1437"></a>
<span class="sourceLineNo">1438</span>      }<a name="line.1438"></a>
<span class="sourceLineNo">1439</span>    }<a name="line.1439"></a>
<span class="sourceLineNo">1440</span><a name="line.1440"></a>
<span class="sourceLineNo">1441</span>    if (sameReplicationSourceAndSink &amp;&amp; replicationSourceHandler != null) {<a name="line.1441"></a>
<span class="sourceLineNo">1442</span>      // always refresh first to get the latest value<a name="line.1442"></a>
<span class="sourceLineNo">1443</span>      ReplicationLoad rLoad = replicationSourceHandler.refreshAndGetReplicationLoad();<a name="line.1443"></a>
<span class="sourceLineNo">1444</span>      if (rLoad != null) {<a name="line.1444"></a>
<span class="sourceLineNo">1445</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1445"></a>
<span class="sourceLineNo">1446</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad<a name="line.1446"></a>
<span class="sourceLineNo">1447</span>          .getReplicationLoadSourceEntries()) {<a name="line.1447"></a>
<span class="sourceLineNo">1448</span>          serverLoad.addReplLoadSource(rLS);<a name="line.1448"></a>
<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
<span class="sourceLineNo">1450</span>      }<a name="line.1450"></a>
<span class="sourceLineNo">1451</span>    } else {<a name="line.1451"></a>
<span class="sourceLineNo">1452</span>      if (replicationSourceHandler != null) {<a name="line.1452"></a>
<span class="sourceLineNo">1453</span>        ReplicationLoad rLoad = replicationSourceHandler.refreshAndGetReplicationLoad();<a name="line.1453"></a>
<span class="sourceLineNo">1454</span>        if (rLoad != null) {<a name="line.1454"></a>
<span class="sourceLineNo">1455</span>          for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad<a name="line.1455"></a>
<span class="sourceLineNo">1456</span>            .getReplicationLoadSourceEntries()) {<a name="line.1456"></a>
<span class="sourceLineNo">1457</span>            serverLoad.addReplLoadSource(rLS);<a name="line.1457"></a>
<span class="sourceLineNo">1458</span>          }<a name="line.1458"></a>
<span class="sourceLineNo">1459</span>        }<a name="line.1459"></a>
<span class="sourceLineNo">1460</span>      }<a name="line.1460"></a>
<span class="sourceLineNo">1461</span>      if (replicationSinkHandler != null) {<a name="line.1461"></a>
<span class="sourceLineNo">1462</span>        ReplicationLoad rLoad = replicationSinkHandler.refreshAndGetReplicationLoad();<a name="line.1462"></a>
<span class="sourceLineNo">1463</span>        if (rLoad != null) {<a name="line.1463"></a>
<span class="sourceLineNo">1464</span>          serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1464"></a>
<span class="sourceLineNo">1465</span>        }<a name="line.1465"></a>
<span class="sourceLineNo">1466</span>      }<a name="line.1466"></a>
<span class="sourceLineNo">1467</span>    }<a name="line.1467"></a>
<span class="sourceLineNo">1468</span><a name="line.1468"></a>
<span class="sourceLineNo">1469</span>    return serverLoad.build();<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>  private String getOnlineRegionsAsPrintableString() {<a name="line.1472"></a>
<span class="sourceLineNo">1473</span>    StringBuilder sb = new StringBuilder();<a name="line.1473"></a>
<span class="sourceLineNo">1474</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1474"></a>
<span class="sourceLineNo">1475</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1475"></a>
<span class="sourceLineNo">1476</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1476"></a>
<span class="sourceLineNo">1477</span>    }<a name="line.1477"></a>
<span class="sourceLineNo">1478</span>    return sb.toString();<a name="line.1478"></a>
<span class="sourceLineNo">1479</span>  }<a name="line.1479"></a>
<span class="sourceLineNo">1480</span><a name="line.1480"></a>
<span class="sourceLineNo">1481</span>  /**<a name="line.1481"></a>
<span class="sourceLineNo">1482</span>   * Wait on regions close.<a name="line.1482"></a>
<span class="sourceLineNo">1483</span>   */<a name="line.1483"></a>
<span class="sourceLineNo">1484</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1484"></a>
<span class="sourceLineNo">1485</span>    // Wait till all regions are closed before going out.<a name="line.1485"></a>
<span class="sourceLineNo">1486</span>    int lastCount = -1;<a name="line.1486"></a>
<span class="sourceLineNo">1487</span>    long previousLogTime = 0;<a name="line.1487"></a>
<span class="sourceLineNo">1488</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1488"></a>
<span class="sourceLineNo">1489</span>    boolean interrupted = false;<a name="line.1489"></a>
<span class="sourceLineNo">1490</span>    try {<a name="line.1490"></a>
<span class="sourceLineNo">1491</span>      while (!onlineRegions.isEmpty()) {<a name="line.1491"></a>
<span class="sourceLineNo">1492</span>        int count = getNumberOfOnlineRegions();<a name="line.1492"></a>
<span class="sourceLineNo">1493</span>        // Only print a message if the count of regions has changed.<a name="line.1493"></a>
<span class="sourceLineNo">1494</span>        if (count != lastCount) {<a name="line.1494"></a>
<span class="sourceLineNo">1495</span>          // Log every second at most<a name="line.1495"></a>
<span class="sourceLineNo">1496</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1496"></a>
<span class="sourceLineNo">1497</span>            previousLogTime = System.currentTimeMillis();<a name="line.1497"></a>
<span class="sourceLineNo">1498</span>            lastCount = count;<a name="line.1498"></a>
<span class="sourceLineNo">1499</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1499"></a>
<span class="sourceLineNo">1500</span>            // Only print out regions still closing if a small number else will<a name="line.1500"></a>
<span class="sourceLineNo">1501</span>            // swamp the log.<a name="line.1501"></a>
<span class="sourceLineNo">1502</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1502"></a>
<span class="sourceLineNo">1503</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1503"></a>
<span class="sourceLineNo">1504</span>            }<a name="line.1504"></a>
<span class="sourceLineNo">1505</span>          }<a name="line.1505"></a>
<span class="sourceLineNo">1506</span>        }<a name="line.1506"></a>
<span class="sourceLineNo">1507</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1507"></a>
<span class="sourceLineNo">1508</span>        // protect against the case where an open comes in after we start the<a name="line.1508"></a>
<span class="sourceLineNo">1509</span>        // iterator of onlineRegions to close all user regions.<a name="line.1509"></a>
<span class="sourceLineNo">1510</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1510"></a>
<span class="sourceLineNo">1511</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1511"></a>
<span class="sourceLineNo">1512</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1512"></a>
<span class="sourceLineNo">1513</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1513"></a>
<span class="sourceLineNo">1514</span>            closedRegions.add(hri.getEncodedName());<a name="line.1514"></a>
<span class="sourceLineNo">1515</span>            // Don't update zk with this close transition; pass false.<a name="line.1515"></a>
<span class="sourceLineNo">1516</span>            closeRegionIgnoreErrors(hri, abort);<a name="line.1516"></a>
<span class="sourceLineNo">1517</span>          }<a name="line.1517"></a>
<span class="sourceLineNo">1518</span>        }<a name="line.1518"></a>
<span class="sourceLineNo">1519</span>        // No regions in RIT, we could stop waiting now.<a name="line.1519"></a>
<span class="sourceLineNo">1520</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1520"></a>
<span class="sourceLineNo">1521</span>          if (!onlineRegions.isEmpty()) {<a name="line.1521"></a>
<span class="sourceLineNo">1522</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1522"></a>
<span class="sourceLineNo">1523</span>                " because some regions failed closing");<a name="line.1523"></a>
<span class="sourceLineNo">1524</span>          }<a name="line.1524"></a>
<span class="sourceLineNo">1525</span>          break;<a name="line.1525"></a>
<span class="sourceLineNo">1526</span>        } else {<a name="line.1526"></a>
<span class="sourceLineNo">1527</span>          LOG.debug("Waiting on {}", this.regionsInTransitionInRS.keySet().stream().<a name="line.1527"></a>
<span class="sourceLineNo">1528</span>            map(e -&gt; Bytes.toString(e)).collect(Collectors.joining(", ")));<a name="line.1528"></a>
<span class="sourceLineNo">1529</span>        }<a name="line.1529"></a>
<span class="sourceLineNo">1530</span>        if (sleepInterrupted(200)) {<a name="line.1530"></a>
<span class="sourceLineNo">1531</span>          interrupted = true;<a name="line.1531"></a>
<span class="sourceLineNo">1532</span>        }<a name="line.1532"></a>
<span class="sourceLineNo">1533</span>      }<a name="line.1533"></a>
<span class="sourceLineNo">1534</span>    } finally {<a name="line.1534"></a>
<span class="sourceLineNo">1535</span>      if (interrupted) {<a name="line.1535"></a>
<span class="sourceLineNo">1536</span>        Thread.currentThread().interrupt();<a name="line.1536"></a>
<span class="sourceLineNo">1537</span>      }<a name="line.1537"></a>
<span class="sourceLineNo">1538</span>    }<a name="line.1538"></a>
<span class="sourceLineNo">1539</span>  }<a name="line.1539"></a>
<span class="sourceLineNo">1540</span><a name="line.1540"></a>
<span class="sourceLineNo">1541</span>  private static boolean sleepInterrupted(long millis) {<a name="line.1541"></a>
<span class="sourceLineNo">1542</span>    boolean interrupted = false;<a name="line.1542"></a>
<span class="sourceLineNo">1543</span>    try {<a name="line.1543"></a>
<span class="sourceLineNo">1544</span>      Thread.sleep(millis);<a name="line.1544"></a>
<span class="sourceLineNo">1545</span>    } catch (InterruptedException e) {<a name="line.1545"></a>
<span class="sourceLineNo">1546</span>      LOG.warn("Interrupted while sleeping");<a name="line.1546"></a>
<span class="sourceLineNo">1547</span>      interrupted = true;<a name="line.1547"></a>
<span class="sourceLineNo">1548</span>    }<a name="line.1548"></a>
<span class="sourceLineNo">1549</span>    return interrupted;<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 shutdownWAL(final boolean close) {<a name="line.1552"></a>
<span class="sourceLineNo">1553</span>    if (this.walFactory != null) {<a name="line.1553"></a>
<span class="sourceLineNo">1554</span>      try {<a name="line.1554"></a>
<span class="sourceLineNo">1555</span>        if (close) {<a name="line.1555"></a>
<span class="sourceLineNo">1556</span>          walFactory.close();<a name="line.1556"></a>
<span class="sourceLineNo">1557</span>        } else {<a name="line.1557"></a>
<span class="sourceLineNo">1558</span>          walFactory.shutdown();<a name="line.1558"></a>
<span class="sourceLineNo">1559</span>        }<a name="line.1559"></a>
<span class="sourceLineNo">1560</span>      } catch (Throwable e) {<a name="line.1560"></a>
<span class="sourceLineNo">1561</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1561"></a>
<span class="sourceLineNo">1562</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1562"></a>
<span class="sourceLineNo">1563</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1563"></a>
<span class="sourceLineNo">1564</span>      }<a name="line.1564"></a>
<span class="sourceLineNo">1565</span>    }<a name="line.1565"></a>
<span class="sourceLineNo">1566</span>  }<a name="line.1566"></a>
<span class="sourceLineNo">1567</span><a name="line.1567"></a>
<span class="sourceLineNo">1568</span>  /**<a name="line.1568"></a>
<span class="sourceLineNo">1569</span>   * get NamedQueue Provider to add different logs to ringbuffer<a name="line.1569"></a>
<span class="sourceLineNo">1570</span>   *<a name="line.1570"></a>
<span class="sourceLineNo">1571</span>   * @return NamedQueueRecorder<a name="line.1571"></a>
<span class="sourceLineNo">1572</span>   */<a name="line.1572"></a>
<span class="sourceLineNo">1573</span>  public NamedQueueRecorder getNamedQueueRecorder() {<a name="line.1573"></a>
<span class="sourceLineNo">1574</span>    return this.namedQueueRecorder;<a name="line.1574"></a>
<span class="sourceLineNo">1575</span>  }<a name="line.1575"></a>
<span class="sourceLineNo">1576</span><a name="line.1576"></a>
<span class="sourceLineNo">1577</span>  /*<a name="line.1577"></a>
<span class="sourceLineNo">1578</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1578"></a>
<span class="sourceLineNo">1579</span>   *<a name="line.1579"></a>
<span class="sourceLineNo">1580</span>   * @param c Extra configuration.<a name="line.1580"></a>
<span class="sourceLineNo">1581</span>   */<a name="line.1581"></a>
<span class="sourceLineNo">1582</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1582"></a>
<span class="sourceLineNo">1583</span>  throws IOException {<a name="line.1583"></a>
<span class="sourceLineNo">1584</span>    try {<a name="line.1584"></a>
<span class="sourceLineNo">1585</span>      boolean updateRootDir = false;<a name="line.1585"></a>
<span class="sourceLineNo">1586</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1586"></a>
<span class="sourceLineNo">1587</span>        String key = e.getName();<a name="line.1587"></a>
<span class="sourceLineNo">1588</span>        // The hostname the master sees us as.<a name="line.1588"></a>
<span class="sourceLineNo">1589</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1589"></a>
<span class="sourceLineNo">1590</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1590"></a>
<span class="sourceLineNo">1591</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1591"></a>
<span class="sourceLineNo">1592</span>              this.startcode);<a name="line.1592"></a>
<span class="sourceLineNo">1593</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1593"></a>
<span class="sourceLineNo">1594</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1594"></a>
<span class="sourceLineNo">1595</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1595"></a>
<span class="sourceLineNo">1596</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1596"></a>
<span class="sourceLineNo">1597</span>            LOG.error(msg);<a name="line.1597"></a>
<span class="sourceLineNo">1598</span>            throw new IOException(msg);<a name="line.1598"></a>
<span class="sourceLineNo">1599</span>          }<a name="line.1599"></a>
<span class="sourceLineNo">1600</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1600"></a>
<span class="sourceLineNo">1601</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1601"></a>
<span class="sourceLineNo">1602</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1602"></a>
<span class="sourceLineNo">1603</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1603"></a>
<span class="sourceLineNo">1604</span>            LOG.error(msg);<a name="line.1604"></a>
<span class="sourceLineNo">1605</span>          }<a name="line.1605"></a>
<span class="sourceLineNo">1606</span>          continue;<a name="line.1606"></a>
<span class="sourceLineNo">1607</span>        }<a name="line.1607"></a>
<span class="sourceLineNo">1608</span><a name="line.1608"></a>
<span class="sourceLineNo">1609</span>        String value = e.getValue();<a name="line.1609"></a>
<span class="sourceLineNo">1610</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1610"></a>
<span class="sourceLineNo">1611</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1611"></a>
<span class="sourceLineNo">1612</span>            updateRootDir = true;<a name="line.1612"></a>
<span class="sourceLineNo">1613</span>          }<a name="line.1613"></a>
<span class="sourceLineNo">1614</span>        }<a name="line.1614"></a>
<span class="sourceLineNo">1615</span><a name="line.1615"></a>
<span class="sourceLineNo">1616</span>        if (LOG.isDebugEnabled()) {<a name="line.1616"></a>
<span class="sourceLineNo">1617</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1617"></a>
<span class="sourceLineNo">1618</span>        }<a name="line.1618"></a>
<span class="sourceLineNo">1619</span>        this.conf.set(key, value);<a name="line.1619"></a>
<span class="sourceLineNo">1620</span>      }<a name="line.1620"></a>
<span class="sourceLineNo">1621</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1621"></a>
<span class="sourceLineNo">1622</span>      createMyEphemeralNode();<a name="line.1622"></a>
<span class="sourceLineNo">1623</span><a name="line.1623"></a>
<span class="sourceLineNo">1624</span>      if (updateRootDir) {<a name="line.1624"></a>
<span class="sourceLineNo">1625</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1625"></a>
<span class="sourceLineNo">1626</span>        initializeFileSystem();<a name="line.1626"></a>
<span class="sourceLineNo">1627</span>      }<a name="line.1627"></a>
<span class="sourceLineNo">1628</span><a name="line.1628"></a>
<span class="sourceLineNo">1629</span>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1629"></a>
<span class="sourceLineNo">1630</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1630"></a>
<span class="sourceLineNo">1631</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1631"></a>
<span class="sourceLineNo">1632</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<a name="line.1632"></a>
<span class="sourceLineNo">1633</span>      }<a name="line.1633"></a>
<span class="sourceLineNo">1634</span><a name="line.1634"></a>
<span class="sourceLineNo">1635</span>      // Save it in a file, this will allow to see if we crash<a name="line.1635"></a>
<span class="sourceLineNo">1636</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1636"></a>
<span class="sourceLineNo">1637</span><a name="line.1637"></a>
<span class="sourceLineNo">1638</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1638"></a>
<span class="sourceLineNo">1639</span>      setupWALAndReplication();<a name="line.1639"></a>
<span class="sourceLineNo">1640</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1640"></a>
<span class="sourceLineNo">1641</span>      final MetricsTable metricsTable =<a name="line.1641"></a>
<span class="sourceLineNo">1642</span>          new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1642"></a>
<span class="sourceLineNo">1643</span>      this.metricsRegionServerImpl = new MetricsRegionServerWrapperImpl(this);<a name="line.1643"></a>
<span class="sourceLineNo">1644</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1644"></a>
<span class="sourceLineNo">1645</span>          metricsRegionServerImpl, conf, metricsTable);<a name="line.1645"></a>
<span class="sourceLineNo">1646</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1646"></a>
<span class="sourceLineNo">1647</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1647"></a>
<span class="sourceLineNo">1648</span>      pauseMonitor.start();<a name="line.1648"></a>
<span class="sourceLineNo">1649</span><a name="line.1649"></a>
<span class="sourceLineNo">1650</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1650"></a>
<span class="sourceLineNo">1651</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1651"></a>
<span class="sourceLineNo">1652</span>        startServices();<a name="line.1652"></a>
<span class="sourceLineNo">1653</span>      }<a name="line.1653"></a>
<span class="sourceLineNo">1654</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1654"></a>
<span class="sourceLineNo">1655</span>      // or make sense of it.<a name="line.1655"></a>
<span class="sourceLineNo">1656</span>      startReplicationService();<a name="line.1656"></a>
<span class="sourceLineNo">1657</span><a name="line.1657"></a>
<span class="sourceLineNo">1658</span><a name="line.1658"></a>
<span class="sourceLineNo">1659</span>      // Set up ZK<a name="line.1659"></a>
<span class="sourceLineNo">1660</span>      LOG.info("Serving as " + this.serverName + ", RpcServer on " + rpcServices.isa +<a name="line.1660"></a>
<span class="sourceLineNo">1661</span>          ", sessionid=0x" +<a name="line.1661"></a>
<span class="sourceLineNo">1662</span>          Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()));<a name="line.1662"></a>
<span class="sourceLineNo">1663</span><a name="line.1663"></a>
<span class="sourceLineNo">1664</span>    } catch (Throwable e) {<a name="line.1664"></a>
<span class="sourceLineNo">1665</span>      stop("Failed initialization");<a name="line.1665"></a>
<span class="sourceLineNo">1666</span>      throw convertThrowableToIOE(cleanup(e, "Failed init"),<a name="line.1666"></a>
<span class="sourceLineNo">1667</span>          "Region server startup failed");<a name="line.1667"></a>
<span class="sourceLineNo">1668</span>    } finally {<a name="line.1668"></a>
<span class="sourceLineNo">1669</span>      sleeper.skipSleepCycle();<a name="line.1669"></a>
<span class="sourceLineNo">1670</span>    }<a name="line.1670"></a>
<span class="sourceLineNo">1671</span>  }<a name="line.1671"></a>
<span class="sourceLineNo">1672</span><a name="line.1672"></a>
<span class="sourceLineNo">1673</span>  protected void initializeMemStoreChunkCreator() {<a name="line.1673"></a>
<span class="sourceLineNo">1674</span>    if (MemStoreLAB.isEnabled(conf)) {<a name="line.1674"></a>
<span class="sourceLineNo">1675</span>      // MSLAB is enabled. So initialize MemStoreChunkPool<a name="line.1675"></a>
<span class="sourceLineNo">1676</span>      // By this time, the MemstoreFlusher is already initialized. We can get the global limits from<a name="line.1676"></a>
<span class="sourceLineNo">1677</span>      // it.<a name="line.1677"></a>
<span class="sourceLineNo">1678</span>      Pair&lt;Long, MemoryType&gt; pair = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.1678"></a>
<span class="sourceLineNo">1679</span>      long globalMemStoreSize = pair.getFirst();<a name="line.1679"></a>
<span class="sourceLineNo">1680</span>      boolean offheap = this.regionServerAccounting.isOffheap();<a name="line.1680"></a>
<span class="sourceLineNo">1681</span>      // When off heap memstore in use, take full area for chunk pool.<a name="line.1681"></a>
<span class="sourceLineNo">1682</span>      float poolSizePercentage = offheap ? 1.0F :<a name="line.1682"></a>
<span class="sourceLineNo">1683</span>        conf.getFloat(MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY, MemStoreLAB.POOL_MAX_SIZE_DEFAULT);<a name="line.1683"></a>
<span class="sourceLineNo">1684</span>      float initialCountPercentage = conf.getFloat(MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY,<a name="line.1684"></a>
<span class="sourceLineNo">1685</span>        MemStoreLAB.POOL_INITIAL_SIZE_DEFAULT);<a name="line.1685"></a>
<span class="sourceLineNo">1686</span>      int chunkSize = conf.getInt(MemStoreLAB.CHUNK_SIZE_KEY, MemStoreLAB.CHUNK_SIZE_DEFAULT);<a name="line.1686"></a>
<span class="sourceLineNo">1687</span>      float indexChunkSizePercent = conf.getFloat(MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_KEY,<a name="line.1687"></a>
<span class="sourceLineNo">1688</span>        MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.1688"></a>
<span class="sourceLineNo">1689</span>      // init the chunkCreator<a name="line.1689"></a>
<span class="sourceLineNo">1690</span>      ChunkCreator.initialize(chunkSize, offheap, globalMemStoreSize, poolSizePercentage,<a name="line.1690"></a>
<span class="sourceLineNo">1691</span>        initialCountPercentage, this.hMemManager, indexChunkSizePercent);<a name="line.1691"></a>
<span class="sourceLineNo">1692</span>    }<a name="line.1692"></a>
<span class="sourceLineNo">1693</span>  }<a name="line.1693"></a>
<span class="sourceLineNo">1694</span><a name="line.1694"></a>
<span class="sourceLineNo">1695</span>  private void startHeapMemoryManager() {<a name="line.1695"></a>
<span class="sourceLineNo">1696</span>    if (this.blockCache != null) {<a name="line.1696"></a>
<span class="sourceLineNo">1697</span>      this.hMemManager =<a name="line.1697"></a>
<span class="sourceLineNo">1698</span>          new HeapMemoryManager(this.blockCache, this.cacheFlusher, this, regionServerAccounting);<a name="line.1698"></a>
<span class="sourceLineNo">1699</span>      this.hMemManager.start(getChoreService());<a name="line.1699"></a>
<span class="sourceLineNo">1700</span>    }<a name="line.1700"></a>
<span class="sourceLineNo">1701</span>  }<a name="line.1701"></a>
<span class="sourceLineNo">1702</span><a name="line.1702"></a>
<span class="sourceLineNo">1703</span>  private void createMyEphemeralNode() throws KeeperException {<a name="line.1703"></a>
<span class="sourceLineNo">1704</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1704"></a>
<span class="sourceLineNo">1705</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1705"></a>
<span class="sourceLineNo">1706</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1706"></a>
<span class="sourceLineNo">1707</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1707"></a>
<span class="sourceLineNo">1708</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper, getMyEphemeralNodePath(), data);<a name="line.1708"></a>
<span class="sourceLineNo">1709</span>  }<a name="line.1709"></a>
<span class="sourceLineNo">1710</span><a name="line.1710"></a>
<span class="sourceLineNo">1711</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1711"></a>
<span class="sourceLineNo">1712</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1712"></a>
<span class="sourceLineNo">1713</span>  }<a name="line.1713"></a>
<span class="sourceLineNo">1714</span><a name="line.1714"></a>
<span class="sourceLineNo">1715</span>  @Override<a name="line.1715"></a>
<span class="sourceLineNo">1716</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1716"></a>
<span class="sourceLineNo">1717</span>    return regionServerAccounting;<a name="line.1717"></a>
<span class="sourceLineNo">1718</span>  }<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>   * @param r Region to get RegionLoad for.<a name="line.1721"></a>
<span class="sourceLineNo">1722</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1722"></a>
<span class="sourceLineNo">1723</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1723"></a>
<span class="sourceLineNo">1724</span>   * @return RegionLoad instance.<a name="line.1724"></a>
<span class="sourceLineNo">1725</span>   */<a name="line.1725"></a>
<span class="sourceLineNo">1726</span>  RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr,<a name="line.1726"></a>
<span class="sourceLineNo">1727</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1727"></a>
<span class="sourceLineNo">1728</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1728"></a>
<span class="sourceLineNo">1729</span>    int stores = 0;<a name="line.1729"></a>
<span class="sourceLineNo">1730</span>    int storefiles = 0;<a name="line.1730"></a>
<span class="sourceLineNo">1731</span>    int storeRefCount = 0;<a name="line.1731"></a>
<span class="sourceLineNo">1732</span>    int maxCompactedStoreFileRefCount = 0;<a name="line.1732"></a>
<span class="sourceLineNo">1733</span>    int storeUncompressedSizeMB = 0;<a name="line.1733"></a>
<span class="sourceLineNo">1734</span>    int storefileSizeMB = 0;<a name="line.1734"></a>
<span class="sourceLineNo">1735</span>    int memstoreSizeMB = (int) (r.getMemStoreDataSize() / 1024 / 1024);<a name="line.1735"></a>
<span class="sourceLineNo">1736</span>    long storefileIndexSizeKB = 0;<a name="line.1736"></a>
<span class="sourceLineNo">1737</span>    int rootLevelIndexSizeKB = 0;<a name="line.1737"></a>
<span class="sourceLineNo">1738</span>    int totalStaticIndexSizeKB = 0;<a name="line.1738"></a>
<span class="sourceLineNo">1739</span>    int totalStaticBloomSizeKB = 0;<a name="line.1739"></a>
<span class="sourceLineNo">1740</span>    long totalCompactingKVs = 0;<a name="line.1740"></a>
<span class="sourceLineNo">1741</span>    long currentCompactedKVs = 0;<a name="line.1741"></a>
<span class="sourceLineNo">1742</span>    List&lt;HStore&gt; storeList = r.getStores();<a name="line.1742"></a>
<span class="sourceLineNo">1743</span>    stores += storeList.size();<a name="line.1743"></a>
<span class="sourceLineNo">1744</span>    for (HStore store : storeList) {<a name="line.1744"></a>
<span class="sourceLineNo">1745</span>      storefiles += store.getStorefilesCount();<a name="line.1745"></a>
<span class="sourceLineNo">1746</span>      int currentStoreRefCount = store.getStoreRefCount();<a name="line.1746"></a>
<span class="sourceLineNo">1747</span>      storeRefCount += currentStoreRefCount;<a name="line.1747"></a>
<span class="sourceLineNo">1748</span>      int currentMaxCompactedStoreFileRefCount = store.getMaxCompactedStoreFileRefCount();<a name="line.1748"></a>
<span class="sourceLineNo">1749</span>      maxCompactedStoreFileRefCount = Math.max(maxCompactedStoreFileRefCount,<a name="line.1749"></a>
<span class="sourceLineNo">1750</span>        currentMaxCompactedStoreFileRefCount);<a name="line.1750"></a>
<span class="sourceLineNo">1751</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1751"></a>
<span class="sourceLineNo">1752</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1752"></a>
<span class="sourceLineNo">1753</span>      //TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB?<a name="line.1753"></a>
<span class="sourceLineNo">1754</span>      storefileIndexSizeKB += store.getStorefilesRootLevelIndexSize() / 1024;<a name="line.1754"></a>
<span class="sourceLineNo">1755</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1755"></a>
<span class="sourceLineNo">1756</span>      if (progress != null) {<a name="line.1756"></a>
<span class="sourceLineNo">1757</span>        totalCompactingKVs += progress.getTotalCompactingKVs();<a name="line.1757"></a>
<span class="sourceLineNo">1758</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1758"></a>
<span class="sourceLineNo">1759</span>      }<a name="line.1759"></a>
<span class="sourceLineNo">1760</span>      rootLevelIndexSizeKB += (int) (store.getStorefilesRootLevelIndexSize() / 1024);<a name="line.1760"></a>
<span class="sourceLineNo">1761</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1761"></a>
<span class="sourceLineNo">1762</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<a name="line.1762"></a>
<span class="sourceLineNo">1763</span>    }<a name="line.1763"></a>
<span class="sourceLineNo">1764</span><a name="line.1764"></a>
<span class="sourceLineNo">1765</span>    HDFSBlocksDistribution hdfsBd = r.getHDFSBlocksDistribution();<a name="line.1765"></a>
<span class="sourceLineNo">1766</span>    float dataLocality = hdfsBd.getBlockLocalityIndex(serverName.getHostname());<a name="line.1766"></a>
<span class="sourceLineNo">1767</span>    float dataLocalityForSsd = hdfsBd.getBlockLocalityIndexForSsd(serverName.getHostname());<a name="line.1767"></a>
<span class="sourceLineNo">1768</span>    long blocksTotalWeight = hdfsBd.getUniqueBlocksTotalWeight();<a name="line.1768"></a>
<span class="sourceLineNo">1769</span>    long blocksLocalWeight = hdfsBd.getBlocksLocalWeight(serverName.getHostname());<a name="line.1769"></a>
<span class="sourceLineNo">1770</span>    long blocksLocalWithSsdWeight = hdfsBd.getBlocksLocalWithSsdWeight(serverName.getHostname());<a name="line.1770"></a>
<span class="sourceLineNo">1771</span>    if (regionLoadBldr == null) {<a name="line.1771"></a>
<span class="sourceLineNo">1772</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1772"></a>
<span class="sourceLineNo">1773</span>    }<a name="line.1773"></a>
<span class="sourceLineNo">1774</span>    if (regionSpecifier == null) {<a name="line.1774"></a>
<span class="sourceLineNo">1775</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1775"></a>
<span class="sourceLineNo">1776</span>    }<a name="line.1776"></a>
<span class="sourceLineNo">1777</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1777"></a>
<span class="sourceLineNo">1778</span>    regionSpecifier.setValue(UnsafeByteOperations.unsafeWrap(name));<a name="line.1778"></a>
<span class="sourceLineNo">1779</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1779"></a>
<span class="sourceLineNo">1780</span>      .setStores(stores)<a name="line.1780"></a>
<span class="sourceLineNo">1781</span>      .setStorefiles(storefiles)<a name="line.1781"></a>
<span class="sourceLineNo">1782</span>      .setStoreRefCount(storeRefCount)<a name="line.1782"></a>
<span class="sourceLineNo">1783</span>      .setMaxCompactedStoreFileRefCount(maxCompactedStoreFileRefCount)<a name="line.1783"></a>
<span class="sourceLineNo">1784</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1784"></a>
<span class="sourceLineNo">1785</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1785"></a>
<span class="sourceLineNo">1786</span>      .setMemStoreSizeMB(memstoreSizeMB)<a name="line.1786"></a>
<span class="sourceLineNo">1787</span>      .setStorefileIndexSizeKB(storefileIndexSizeKB)<a name="line.1787"></a>
<span class="sourceLineNo">1788</span>      .setRootIndexSizeKB(rootLevelIndexSizeKB)<a name="line.1788"></a>
<span class="sourceLineNo">1789</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1789"></a>
<span class="sourceLineNo">1790</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1790"></a>
<span class="sourceLineNo">1791</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1791"></a>
<span class="sourceLineNo">1792</span>      .setCpRequestsCount(r.getCpRequestsCount())<a name="line.1792"></a>
<span class="sourceLineNo">1793</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1793"></a>
<span class="sourceLineNo">1794</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1794"></a>
<span class="sourceLineNo">1795</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1795"></a>
<span class="sourceLineNo">1796</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1796"></a>
<span class="sourceLineNo">1797</span>      .setDataLocality(dataLocality)<a name="line.1797"></a>
<span class="sourceLineNo">1798</span>      .setDataLocalityForSsd(dataLocalityForSsd)<a name="line.1798"></a>
<span class="sourceLineNo">1799</span>      .setBlocksLocalWeight(blocksLocalWeight)<a name="line.1799"></a>
<span class="sourceLineNo">1800</span>      .setBlocksLocalWithSsdWeight(blocksLocalWithSsdWeight)<a name="line.1800"></a>
<span class="sourceLineNo">1801</span>      .setBlocksTotalWeight(blocksTotalWeight)<a name="line.1801"></a>
<span class="sourceLineNo">1802</span>      .setCompactionState(ProtobufUtil.createCompactionStateForRegionLoad(r.getCompactionState()))<a name="line.1802"></a>
<span class="sourceLineNo">1803</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1803"></a>
<span class="sourceLineNo">1804</span>    r.setCompleteSequenceId(regionLoadBldr);<a name="line.1804"></a>
<span class="sourceLineNo">1805</span>    return regionLoadBldr.build();<a name="line.1805"></a>
<span class="sourceLineNo">1806</span>  }<a name="line.1806"></a>
<span class="sourceLineNo">1807</span><a name="line.1807"></a>
<span class="sourceLineNo">1808</span>  private UserLoad createUserLoad(String user, MetricsUserSource userSource) {<a name="line.1808"></a>
<span class="sourceLineNo">1809</span>    UserLoad.Builder userLoadBldr = UserLoad.newBuilder();<a name="line.1809"></a>
<span class="sourceLineNo">1810</span>    userLoadBldr.setUserName(user);<a name="line.1810"></a>
<span class="sourceLineNo">1811</span>    userSource.getClientMetrics().values().stream().map(<a name="line.1811"></a>
<span class="sourceLineNo">1812</span>      clientMetrics -&gt; ClusterStatusProtos.ClientMetrics.newBuilder()<a name="line.1812"></a>
<span class="sourceLineNo">1813</span>            .setHostName(clientMetrics.getHostName())<a name="line.1813"></a>
<span class="sourceLineNo">1814</span>            .setWriteRequestsCount(clientMetrics.getWriteRequestsCount())<a name="line.1814"></a>
<span class="sourceLineNo">1815</span>            .setFilteredRequestsCount(clientMetrics.getFilteredReadRequests())<a name="line.1815"></a>
<span class="sourceLineNo">1816</span>            .setReadRequestsCount(clientMetrics.getReadRequestsCount()).build())<a name="line.1816"></a>
<span class="sourceLineNo">1817</span>        .forEach(userLoadBldr::addClientMetrics);<a name="line.1817"></a>
<span class="sourceLineNo">1818</span>    return userLoadBldr.build();<a name="line.1818"></a>
<span class="sourceLineNo">1819</span>  }<a name="line.1819"></a>
<span class="sourceLineNo">1820</span><a name="line.1820"></a>
<span class="sourceLineNo">1821</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1821"></a>
<span class="sourceLineNo">1822</span>    HRegion r = onlineRegions.get(encodedRegionName);<a name="line.1822"></a>
<span class="sourceLineNo">1823</span>    return r != null ? createRegionLoad(r, null, null) : null;<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>  /**<a name="line.1826"></a>
<span class="sourceLineNo">1827</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1827"></a>
<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
<span class="sourceLineNo">1829</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1829"></a>
<span class="sourceLineNo">1830</span>    private final HRegionServer instance;<a name="line.1830"></a>
<span class="sourceLineNo">1831</span>    private final int majorCompactPriority;<a name="line.1831"></a>
<span class="sourceLineNo">1832</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1832"></a>
<span class="sourceLineNo">1833</span>    //Iteration is 1-based rather than 0-based so we don't check for compaction<a name="line.1833"></a>
<span class="sourceLineNo">1834</span>    // immediately upon region server startup<a name="line.1834"></a>
<span class="sourceLineNo">1835</span>    private long iteration = 1;<a name="line.1835"></a>
<span class="sourceLineNo">1836</span><a name="line.1836"></a>
<span class="sourceLineNo">1837</span>    CompactionChecker(final HRegionServer h, final int sleepTime, final Stoppable stopper) {<a name="line.1837"></a>
<span class="sourceLineNo">1838</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1838"></a>
<span class="sourceLineNo">1839</span>      this.instance = h;<a name="line.1839"></a>
<span class="sourceLineNo">1840</span>      LOG.info(this.getName() + " runs every " + Duration.ofMillis(sleepTime));<a name="line.1840"></a>
<span class="sourceLineNo">1841</span><a name="line.1841"></a>
<span class="sourceLineNo">1842</span>      /* MajorCompactPriority is configurable.<a name="line.1842"></a>
<span class="sourceLineNo">1843</span>       * If not set, the compaction will use default priority.<a name="line.1843"></a>
<span class="sourceLineNo">1844</span>       */<a name="line.1844"></a>
<span class="sourceLineNo">1845</span>      this.majorCompactPriority = this.instance.conf.<a name="line.1845"></a>
<span class="sourceLineNo">1846</span>          getInt("hbase.regionserver.compactionChecker.majorCompactPriority",<a name="line.1846"></a>
<span class="sourceLineNo">1847</span>              DEFAULT_PRIORITY);<a name="line.1847"></a>
<span class="sourceLineNo">1848</span>    }<a name="line.1848"></a>
<span class="sourceLineNo">1849</span><a name="line.1849"></a>
<span class="sourceLineNo">1850</span>    @Override<a name="line.1850"></a>
<span class="sourceLineNo">1851</span>    protected void chore() {<a name="line.1851"></a>
<span class="sourceLineNo">1852</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1852"></a>
<span class="sourceLineNo">1853</span>        // Skip compaction if region is read only<a name="line.1853"></a>
<span class="sourceLineNo">1854</span>        if (r == null || r.isReadOnly()) {<a name="line.1854"></a>
<span class="sourceLineNo">1855</span>          continue;<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>        HRegion hr = (HRegion) r;<a name="line.1858"></a>
<span class="sourceLineNo">1859</span>        for (HStore s : hr.stores.values()) {<a name="line.1859"></a>
<span class="sourceLineNo">1860</span>          try {<a name="line.1860"></a>
<span class="sourceLineNo">1861</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1861"></a>
<span class="sourceLineNo">1862</span>            assert multiplier &gt; 0;<a name="line.1862"></a>
<span class="sourceLineNo">1863</span>            if (iteration % multiplier != 0) {<a name="line.1863"></a>
<span class="sourceLineNo">1864</span>              continue;<a name="line.1864"></a>
<span class="sourceLineNo">1865</span>            }<a name="line.1865"></a>
<span class="sourceLineNo">1866</span>            if (s.needsCompaction()) {<a name="line.1866"></a>
<span class="sourceLineNo">1867</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1867"></a>
<span class="sourceLineNo">1868</span>              this.instance.compactSplitThread.requestSystemCompaction(hr, s,<a name="line.1868"></a>
<span class="sourceLineNo">1869</span>                getName() + " requests compaction");<a name="line.1869"></a>
<span class="sourceLineNo">1870</span>            } else if (s.shouldPerformMajorCompaction()) {<a name="line.1870"></a>
<span class="sourceLineNo">1871</span>              s.triggerMajorCompaction();<a name="line.1871"></a>
<span class="sourceLineNo">1872</span>              if (majorCompactPriority == DEFAULT_PRIORITY ||<a name="line.1872"></a>
<span class="sourceLineNo">1873</span>                  majorCompactPriority &gt; hr.getCompactPriority()) {<a name="line.1873"></a>
<span class="sourceLineNo">1874</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1874"></a>
<span class="sourceLineNo">1875</span>                    getName() + " requests major compaction; use default priority",<a name="line.1875"></a>
<span class="sourceLineNo">1876</span>                    Store.NO_PRIORITY,<a name="line.1876"></a>
<span class="sourceLineNo">1877</span>                CompactionLifeCycleTracker.DUMMY, null);<a name="line.1877"></a>
<span class="sourceLineNo">1878</span>              } else {<a name="line.1878"></a>
<span class="sourceLineNo">1879</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1879"></a>
<span class="sourceLineNo">1880</span>                    getName() + " requests major compaction; use configured priority",<a name="line.1880"></a>
<span class="sourceLineNo">1881</span>                    this.majorCompactPriority, CompactionLifeCycleTracker.DUMMY, null);<a name="line.1881"></a>
<span class="sourceLineNo">1882</span>              }<a name="line.1882"></a>
<span class="sourceLineNo">1883</span>            }<a name="line.1883"></a>
<span class="sourceLineNo">1884</span>          } catch (IOException e) {<a name="line.1884"></a>
<span class="sourceLineNo">1885</span>            LOG.warn("Failed major compaction check on " + r, e);<a name="line.1885"></a>
<span class="sourceLineNo">1886</span>          }<a name="line.1886"></a>
<span class="sourceLineNo">1887</span>        }<a name="line.1887"></a>
<span class="sourceLineNo">1888</span>      }<a name="line.1888"></a>
<span class="sourceLineNo">1889</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<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>  private static class PeriodicMemStoreFlusher extends ScheduledChore {<a name="line.1893"></a>
<span class="sourceLineNo">1894</span>    private final HRegionServer server;<a name="line.1894"></a>
<span class="sourceLineNo">1895</span>    private final static int RANGE_OF_DELAY = 5 * 60; // 5 min in seconds<a name="line.1895"></a>
<span class="sourceLineNo">1896</span>    private final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1896"></a>
<span class="sourceLineNo">1897</span>    private final long rangeOfDelayMs;<a name="line.1897"></a>
<span class="sourceLineNo">1898</span><a name="line.1898"></a>
<span class="sourceLineNo">1899</span>    PeriodicMemStoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1899"></a>
<span class="sourceLineNo">1900</span>      super("MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1900"></a>
<span class="sourceLineNo">1901</span>      this.server = server;<a name="line.1901"></a>
<span class="sourceLineNo">1902</span><a name="line.1902"></a>
<span class="sourceLineNo">1903</span>      final long configuredRangeOfDelay = server.getConfiguration().getInt(<a name="line.1903"></a>
<span class="sourceLineNo">1904</span>          "hbase.regionserver.periodicmemstoreflusher.rangeofdelayseconds", RANGE_OF_DELAY);<a name="line.1904"></a>
<span class="sourceLineNo">1905</span>      this.rangeOfDelayMs = TimeUnit.SECONDS.toMillis(configuredRangeOfDelay);<a name="line.1905"></a>
<span class="sourceLineNo">1906</span>    }<a name="line.1906"></a>
<span class="sourceLineNo">1907</span><a name="line.1907"></a>
<span class="sourceLineNo">1908</span>    @Override<a name="line.1908"></a>
<span class="sourceLineNo">1909</span>    protected void chore() {<a name="line.1909"></a>
<span class="sourceLineNo">1910</span>      final StringBuilder whyFlush = new StringBuilder();<a name="line.1910"></a>
<span class="sourceLineNo">1911</span>      for (HRegion r : this.server.onlineRegions.values()) {<a name="line.1911"></a>
<span class="sourceLineNo">1912</span>        if (r == null) continue;<a name="line.1912"></a>
<span class="sourceLineNo">1913</span>        if (r.shouldFlush(whyFlush)) {<a name="line.1913"></a>
<span class="sourceLineNo">1914</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1914"></a>
<span class="sourceLineNo">1915</span>          if (requester != null) {<a name="line.1915"></a>
<span class="sourceLineNo">1916</span>            long randomDelay = RandomUtils.nextLong(0, rangeOfDelayMs) + MIN_DELAY_TIME;<a name="line.1916"></a>
<span class="sourceLineNo">1917</span>            //Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1917"></a>
<span class="sourceLineNo">1918</span>            //is a balanced write-load on the regions in a table, we might end up<a name="line.1918"></a>
<span class="sourceLineNo">1919</span>            //overwhelming the filesystem with too many flushes at once.<a name="line.1919"></a>
<span class="sourceLineNo">1920</span>            if (requester.requestDelayedFlush(r, randomDelay)) {<a name="line.1920"></a>
<span class="sourceLineNo">1921</span>              LOG.info("{} requesting flush of {} because {} after random delay {} ms",<a name="line.1921"></a>
<span class="sourceLineNo">1922</span>                  getName(), r.getRegionInfo().getRegionNameAsString(),  whyFlush.toString(),<a name="line.1922"></a>
<span class="sourceLineNo">1923</span>                  randomDelay);<a name="line.1923"></a>
<span class="sourceLineNo">1924</span>            }<a name="line.1924"></a>
<span class="sourceLineNo">1925</span>          }<a name="line.1925"></a>
<span class="sourceLineNo">1926</span>        }<a name="line.1926"></a>
<span class="sourceLineNo">1927</span>      }<a name="line.1927"></a>
<span class="sourceLineNo">1928</span>    }<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>   * Report the status of the server. A server is online once all the startup is<a name="line.1932"></a>
<span class="sourceLineNo">1933</span>   * completed (setting up filesystem, starting executorService threads, etc.). This<a name="line.1933"></a>
<span class="sourceLineNo">1934</span>   * method is designed mostly to be useful in tests.<a name="line.1934"></a>
<span class="sourceLineNo">1935</span>   *<a name="line.1935"></a>
<span class="sourceLineNo">1936</span>   * @return true if online, false if not.<a name="line.1936"></a>
<span class="sourceLineNo">1937</span>   */<a name="line.1937"></a>
<span class="sourceLineNo">1938</span>  public boolean isOnline() {<a name="line.1938"></a>
<span class="sourceLineNo">1939</span>    return online.get();<a name="line.1939"></a>
<span class="sourceLineNo">1940</span>  }<a name="line.1940"></a>
<span class="sourceLineNo">1941</span><a name="line.1941"></a>
<span class="sourceLineNo">1942</span>  /**<a name="line.1942"></a>
<span class="sourceLineNo">1943</span>   * Setup WAL log and replication if enabled. Replication setup is done in here because it wants to<a name="line.1943"></a>
<span class="sourceLineNo">1944</span>   * be hooked up to WAL.<a name="line.1944"></a>
<span class="sourceLineNo">1945</span>   */<a name="line.1945"></a>
<span class="sourceLineNo">1946</span>  private void setupWALAndReplication() throws IOException {<a name="line.1946"></a>
<span class="sourceLineNo">1947</span>    boolean isMasterNoTableOrSystemTableOnly = this instanceof HMaster &amp;&amp;<a name="line.1947"></a>
<span class="sourceLineNo">1948</span>        !LoadBalancer.isMasterCanHostUserRegions(conf);<a name="line.1948"></a>
<span class="sourceLineNo">1949</span>    WALFactory factory =<a name="line.1949"></a>
<span class="sourceLineNo">1950</span>        new WALFactory(conf, serverName.toString(), this, !isMasterNoTableOrSystemTableOnly);<a name="line.1950"></a>
<span class="sourceLineNo">1951</span>    if (!isMasterNoTableOrSystemTableOnly) {<a name="line.1951"></a>
<span class="sourceLineNo">1952</span>      // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1952"></a>
<span class="sourceLineNo">1953</span>      Path oldLogDir = new Path(walRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1953"></a>
<span class="sourceLineNo">1954</span>      String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1954"></a>
<span class="sourceLineNo">1955</span><a name="line.1955"></a>
<span class="sourceLineNo">1956</span>      Path logDir = new Path(walRootDir, logName);<a name="line.1956"></a>
<span class="sourceLineNo">1957</span>      LOG.debug("logDir={}", logDir);<a name="line.1957"></a>
<span class="sourceLineNo">1958</span>      if (this.walFs.exists(logDir)) {<a name="line.1958"></a>
<span class="sourceLineNo">1959</span>        throw new RegionServerRunningException(<a name="line.1959"></a>
<span class="sourceLineNo">1960</span>            "Region server has already created directory at " + this.serverName.toString());<a name="line.1960"></a>
<span class="sourceLineNo">1961</span>      }<a name="line.1961"></a>
<span class="sourceLineNo">1962</span>      // Always create wal directory as now we need this when master restarts to find out the live<a name="line.1962"></a>
<span class="sourceLineNo">1963</span>      // region servers.<a name="line.1963"></a>
<span class="sourceLineNo">1964</span>      if (!this.walFs.mkdirs(logDir)) {<a name="line.1964"></a>
<span class="sourceLineNo">1965</span>        throw new IOException("Can not create wal directory " + logDir);<a name="line.1965"></a>
<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
<span class="sourceLineNo">1967</span>      // Instantiate replication if replication enabled. Pass it the log directories.<a name="line.1967"></a>
<span class="sourceLineNo">1968</span>      createNewReplicationInstance(conf, this, this.walFs, logDir, oldLogDir, factory);<a name="line.1968"></a>
<span class="sourceLineNo">1969</span>    }<a name="line.1969"></a>
<span class="sourceLineNo">1970</span>    this.walFactory = factory;<a name="line.1970"></a>
<span class="sourceLineNo">1971</span>  }<a name="line.1971"></a>
<span class="sourceLineNo">1972</span><a name="line.1972"></a>
<span class="sourceLineNo">1973</span>  /**<a name="line.1973"></a>
<span class="sourceLineNo">1974</span>   * Start up replication source and sink handlers.<a name="line.1974"></a>
<span class="sourceLineNo">1975</span>   */<a name="line.1975"></a>
<span class="sourceLineNo">1976</span>  private void startReplicationService() throws IOException {<a name="line.1976"></a>
<span class="sourceLineNo">1977</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.1977"></a>
<span class="sourceLineNo">1978</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1978"></a>
<span class="sourceLineNo">1979</span>    } else {<a name="line.1979"></a>
<span class="sourceLineNo">1980</span>      if (this.replicationSourceHandler != null) {<a name="line.1980"></a>
<span class="sourceLineNo">1981</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1981"></a>
<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
<span class="sourceLineNo">1983</span>      if (this.replicationSinkHandler != null) {<a name="line.1983"></a>
<span class="sourceLineNo">1984</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1984"></a>
<span class="sourceLineNo">1985</span>      }<a name="line.1985"></a>
<span class="sourceLineNo">1986</span>    }<a name="line.1986"></a>
<span class="sourceLineNo">1987</span>  }<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>   * @return Master address tracker instance.<a name="line.1990"></a>
<span class="sourceLineNo">1991</span>   */<a name="line.1991"></a>
<span class="sourceLineNo">1992</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1992"></a>
<span class="sourceLineNo">1993</span>    return this.masterAddressTracker;<a name="line.1993"></a>
<span class="sourceLineNo">1994</span>  }<a name="line.1994"></a>
<span class="sourceLineNo">1995</span><a name="line.1995"></a>
<span class="sourceLineNo">1996</span>  /**<a name="line.1996"></a>
<span class="sourceLineNo">1997</span>   * Start maintenance Threads, Server, Worker and lease checker threads.<a name="line.1997"></a>
<span class="sourceLineNo">1998</span>   * Start all threads we need to run. This is called after we've successfully<a name="line.1998"></a>
<span class="sourceLineNo">1999</span>   * registered with the Master.<a name="line.1999"></a>
<span class="sourceLineNo">2000</span>   * Install an UncaughtExceptionHandler that calls abort of RegionServer if we<a name="line.2000"></a>
<span class="sourceLineNo">2001</span>   * get an unhandled exception. We cannot set the handler on all threads.<a name="line.2001"></a>
<span class="sourceLineNo">2002</span>   * Server's internal Listener thread is off limits. For Server, if an OOME, it<a name="line.2002"></a>
<span class="sourceLineNo">2003</span>   * waits a while then retries. Meantime, a flush or a compaction that tries to<a name="line.2003"></a>
<span class="sourceLineNo">2004</span>   * run should trigger same critical condition and the shutdown will run. On<a name="line.2004"></a>
<span class="sourceLineNo">2005</span>   * its way out, this server will shut down Server. Leases are sort of<a name="line.2005"></a>
<span class="sourceLineNo">2006</span>   * inbetween. It has an internal thread that while it inherits from Chore, it<a name="line.2006"></a>
<span class="sourceLineNo">2007</span>   * keeps its own internal stop mechanism so needs to be stopped by this<a name="line.2007"></a>
<span class="sourceLineNo">2008</span>   * hosting server. Worker logs the exception and exits.<a name="line.2008"></a>
<span class="sourceLineNo">2009</span>   */<a name="line.2009"></a>
<span class="sourceLineNo">2010</span>  private void startServices() throws IOException {<a name="line.2010"></a>
<span class="sourceLineNo">2011</span>    if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.2011"></a>
<span class="sourceLineNo">2012</span>      initializeThreads();<a name="line.2012"></a>
<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
<span class="sourceLineNo">2014</span>    this.secureBulkLoadManager = new SecureBulkLoadManager(this.conf, asyncClusterConnection);<a name="line.2014"></a>
<span class="sourceLineNo">2015</span>    this.secureBulkLoadManager.start();<a name="line.2015"></a>
<span class="sourceLineNo">2016</span><a name="line.2016"></a>
<span class="sourceLineNo">2017</span>    // Health checker thread.<a name="line.2017"></a>
<span class="sourceLineNo">2018</span>    if (isHealthCheckerConfigured()) {<a name="line.2018"></a>
<span class="sourceLineNo">2019</span>      int sleepTime = this.conf.getInt(HConstants.HEALTH_CHORE_WAKE_FREQ,<a name="line.2019"></a>
<span class="sourceLineNo">2020</span>      HConstants.DEFAULT_THREAD_WAKE_FREQUENCY);<a name="line.2020"></a>
<span class="sourceLineNo">2021</span>      healthCheckChore = new HealthCheckChore(sleepTime, this, getConfiguration());<a name="line.2021"></a>
<span class="sourceLineNo">2022</span>    }<a name="line.2022"></a>
<span class="sourceLineNo">2023</span>    // Executor status collect thread.<a name="line.2023"></a>
<span class="sourceLineNo">2024</span>    if (this.conf.getBoolean(HConstants.EXECUTOR_STATUS_COLLECT_ENABLED,<a name="line.2024"></a>
<span class="sourceLineNo">2025</span>        HConstants.DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED)) {<a name="line.2025"></a>
<span class="sourceLineNo">2026</span>      int sleepTime = this.conf.getInt(ExecutorStatusChore.WAKE_FREQ,<a name="line.2026"></a>
<span class="sourceLineNo">2027</span>          ExecutorStatusChore.DEFAULT_WAKE_FREQ);<a name="line.2027"></a>
<span class="sourceLineNo">2028</span>      executorStatusChore = new ExecutorStatusChore(sleepTime, this, this.getExecutorService(),<a name="line.2028"></a>
<span class="sourceLineNo">2029</span>          this.metricsRegionServer.getMetricsSource());<a name="line.2029"></a>
<span class="sourceLineNo">2030</span>    }<a name="line.2030"></a>
<span class="sourceLineNo">2031</span><a name="line.2031"></a>
<span class="sourceLineNo">2032</span>    this.walRoller = new LogRoller(this);<a name="line.2032"></a>
<span class="sourceLineNo">2033</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, conf);<a name="line.2033"></a>
<span class="sourceLineNo">2034</span>    this.procedureResultReporter = new RemoteProcedureResultReporter(this);<a name="line.2034"></a>
<span class="sourceLineNo">2035</span><a name="line.2035"></a>
<span class="sourceLineNo">2036</span>    // Create the CompactedFileDischarger chore executorService. This chore helps to<a name="line.2036"></a>
<span class="sourceLineNo">2037</span>    // remove the compacted files that will no longer be used in reads.<a name="line.2037"></a>
<span class="sourceLineNo">2038</span>    // Default is 2 mins. The default value for TTLCleaner is 5 mins so we set this to<a name="line.2038"></a>
<span class="sourceLineNo">2039</span>    // 2 mins so that compacted files can be archived before the TTLCleaner runs<a name="line.2039"></a>
<span class="sourceLineNo">2040</span>    int cleanerInterval =<a name="line.2040"></a>
<span class="sourceLineNo">2041</span>      conf.getInt("hbase.hfile.compaction.discharger.interval", 2 * 60 * 1000);<a name="line.2041"></a>
<span class="sourceLineNo">2042</span>    this.compactedFileDischarger =<a name="line.2042"></a>
<span class="sourceLineNo">2043</span>      new CompactedHFilesDischarger(cleanerInterval, this, this);<a name="line.2043"></a>
<span class="sourceLineNo">2044</span>    choreService.scheduleChore(compactedFileDischarger);<a name="line.2044"></a>
<span class="sourceLineNo">2045</span><a name="line.2045"></a>
<span class="sourceLineNo">2046</span>    // Start executor services<a name="line.2046"></a>
<span class="sourceLineNo">2047</span>    final int openRegionThreads = conf.getInt("hbase.regionserver.executor.openregion.threads", 3);<a name="line.2047"></a>
<span class="sourceLineNo">2048</span>    executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.2048"></a>
<span class="sourceLineNo">2049</span>        ExecutorType.RS_OPEN_REGION).setCorePoolSize(openRegionThreads));<a name="line.2049"></a>
<span class="sourceLineNo">2050</span>    final int openMetaThreads = conf.getInt("hbase.regionserver.executor.openmeta.threads", 1);<a name="line.2050"></a>
<span class="sourceLineNo">2051</span>    executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.2051"></a>
<span class="sourceLineNo">2052</span>        ExecutorType.RS_OPEN_META).setCorePoolSize(openMetaThreads));<a name="line.2052"></a>
<span class="sourceLineNo">2053</span>    final int openPriorityRegionThreads =<a name="line.2053"></a>
<span class="sourceLineNo">2054</span>        conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3);<a name="line.2054"></a>
<span class="sourceLineNo">2055</span>    executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.2055"></a>
<span class="sourceLineNo">2056</span>        ExecutorType.RS_OPEN_PRIORITY_REGION).setCorePoolSize(openPriorityRegionThreads));<a name="line.2056"></a>
<span class="sourceLineNo">2057</span>    final int closeRegionThreads =<a name="line.2057"></a>
<span class="sourceLineNo">2058</span>        conf.getInt("hbase.regionserver.executor.closeregion.threads", 3);<a name="line.2058"></a>
<span class="sourceLineNo">2059</span>    executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.2059"></a>
<span class="sourceLineNo">2060</span>        ExecutorType.RS_CLOSE_REGION).setCorePoolSize(closeRegionThreads));<a name="line.2060"></a>
<span class="sourceLineNo">2061</span>    final int closeMetaThreads = conf.getInt("hbase.regionserver.executor.closemeta.threads", 1);<a name="line.2061"></a>
<span class="sourceLineNo">2062</span>    executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.2062"></a>
<span class="sourceLineNo">2063</span>        ExecutorType.RS_CLOSE_META).setCorePoolSize(closeMetaThreads));<a name="line.2063"></a>
<span class="sourceLineNo">2064</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.2064"></a>
<span class="sourceLineNo">2065</span>      final int storeScannerParallelSeekThreads =<a name="line.2065"></a>
<span class="sourceLineNo">2066</span>          conf.getInt("hbase.storescanner.parallel.seek.threads", 10);<a name="line.2066"></a>
<span class="sourceLineNo">2067</span>      executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.2067"></a>
<span class="sourceLineNo">2068</span>          ExecutorType.RS_PARALLEL_SEEK).setCorePoolSize(storeScannerParallelSeekThreads)<a name="line.2068"></a>
<span class="sourceLineNo">2069</span>          .setAllowCoreThreadTimeout(true));<a name="line.2069"></a>
<span class="sourceLineNo">2070</span>    }<a name="line.2070"></a>
<span class="sourceLineNo">2071</span>    final int logReplayOpsThreads = conf.getInt(<a name="line.2071"></a>
<span class="sourceLineNo">2072</span>        HBASE_SPLIT_WAL_MAX_SPLITTER, DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER);<a name="line.2072"></a>
<span class="sourceLineNo">2073</span>    executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.2073"></a>
<span class="sourceLineNo">2074</span>        ExecutorType.RS_LOG_REPLAY_OPS).setCorePoolSize(logReplayOpsThreads)<a name="line.2074"></a>
<span class="sourceLineNo">2075</span>        .setAllowCoreThreadTimeout(true));<a name="line.2075"></a>
<span class="sourceLineNo">2076</span>    // Start the threads for compacted files discharger<a name="line.2076"></a>
<span class="sourceLineNo">2077</span>    final int compactionDischargerThreads =<a name="line.2077"></a>
<span class="sourceLineNo">2078</span>        conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10);<a name="line.2078"></a>
<span class="sourceLineNo">2079</span>    executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.2079"></a>
<span class="sourceLineNo">2080</span>        ExecutorType.RS_COMPACTED_FILES_DISCHARGER).setCorePoolSize(compactionDischargerThreads));<a name="line.2080"></a>
<span class="sourceLineNo">2081</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.2081"></a>
<span class="sourceLineNo">2082</span>      final int regionReplicaFlushThreads = conf.getInt(<a name="line.2082"></a>
<span class="sourceLineNo">2083</span>          "hbase.regionserver.region.replica.flusher.threads", conf.getInt(<a name="line.2083"></a>
<span class="sourceLineNo">2084</span>              "hbase.regionserver.executor.openregion.threads", 3));<a name="line.2084"></a>
<span class="sourceLineNo">2085</span>      executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.2085"></a>
<span class="sourceLineNo">2086</span>          ExecutorType.RS_REGION_REPLICA_FLUSH_OPS).setCorePoolSize(regionReplicaFlushThreads));<a name="line.2086"></a>
<span class="sourceLineNo">2087</span>    }<a name="line.2087"></a>
<span class="sourceLineNo">2088</span>    final int refreshPeerThreads =<a name="line.2088"></a>
<span class="sourceLineNo">2089</span>        conf.getInt("hbase.regionserver.executor.refresh.peer.threads", 2);<a name="line.2089"></a>
<span class="sourceLineNo">2090</span>    executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.2090"></a>
<span class="sourceLineNo">2091</span>        ExecutorType.RS_REFRESH_PEER).setCorePoolSize(refreshPeerThreads));<a name="line.2091"></a>
<span class="sourceLineNo">2092</span>    final int replaySyncReplicationWALThreads =<a name="line.2092"></a>
<span class="sourceLineNo">2093</span>        conf.getInt("hbase.regionserver.executor.replay.sync.replication.wal.threads", 1);<a name="line.2093"></a>
<span class="sourceLineNo">2094</span>    executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.2094"></a>
<span class="sourceLineNo">2095</span>        ExecutorType.RS_REPLAY_SYNC_REPLICATION_WAL).setCorePoolSize(<a name="line.2095"></a>
<span class="sourceLineNo">2096</span>            replaySyncReplicationWALThreads));<a name="line.2096"></a>
<span class="sourceLineNo">2097</span>    final int switchRpcThrottleThreads =<a name="line.2097"></a>
<span class="sourceLineNo">2098</span>        conf.getInt("hbase.regionserver.executor.switch.rpc.throttle.threads", 1);<a name="line.2098"></a>
<span class="sourceLineNo">2099</span>    executorService.startExecutorService(executorService.new ExecutorConfig().setExecutorType(<a name="line.2099"></a>
<span class="sourceLineNo">2100</span>        ExecutorType.RS_SWITCH_RPC_THROTTLE).setCorePoolSize(switchRpcThrottleThreads));<a name="line.2100"></a>
<span class="sourceLineNo">2101</span><a name="line.2101"></a>
<span class="sourceLineNo">2102</span>    Threads.setDaemonThreadRunning(this.walRoller, getName() + ".logRoller",<a name="line.2102"></a>
<span class="sourceLineNo">2103</span>        uncaughtExceptionHandler);<a name="line.2103"></a>
<span class="sourceLineNo">2104</span>    if (this.cacheFlusher != null) {<a name="line.2104"></a>
<span class="sourceLineNo">2105</span>      this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.2105"></a>
<span class="sourceLineNo">2106</span>    }<a name="line.2106"></a>
<span class="sourceLineNo">2107</span>    Threads.setDaemonThreadRunning(this.procedureResultReporter,<a name="line.2107"></a>
<span class="sourceLineNo">2108</span>      getName() + ".procedureResultReporter", uncaughtExceptionHandler);<a name="line.2108"></a>
<span class="sourceLineNo">2109</span><a name="line.2109"></a>
<span class="sourceLineNo">2110</span>    if (this.compactionChecker != null) {<a name="line.2110"></a>
<span class="sourceLineNo">2111</span>      choreService.scheduleChore(compactionChecker);<a name="line.2111"></a>
<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
<span class="sourceLineNo">2113</span>    if (this.periodicFlusher != null) {<a name="line.2113"></a>
<span class="sourceLineNo">2114</span>      choreService.scheduleChore(periodicFlusher);<a name="line.2114"></a>
<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
<span class="sourceLineNo">2116</span>    if (this.healthCheckChore != null) {<a name="line.2116"></a>
<span class="sourceLineNo">2117</span>      choreService.scheduleChore(healthCheckChore);<a name="line.2117"></a>
<span class="sourceLineNo">2118</span>    }<a name="line.2118"></a>
<span class="sourceLineNo">2119</span>    if (this.executorStatusChore != null) {<a name="line.2119"></a>
<span class="sourceLineNo">2120</span>      choreService.scheduleChore(executorStatusChore);<a name="line.2120"></a>
<span class="sourceLineNo">2121</span>    }<a name="line.2121"></a>
<span class="sourceLineNo">2122</span>    if (this.nonceManagerChore != null) {<a name="line.2122"></a>
<span class="sourceLineNo">2123</span>      choreService.scheduleChore(nonceManagerChore);<a name="line.2123"></a>
<span class="sourceLineNo">2124</span>    }<a name="line.2124"></a>
<span class="sourceLineNo">2125</span>    if (this.storefileRefresher != null) {<a name="line.2125"></a>
<span class="sourceLineNo">2126</span>      choreService.scheduleChore(storefileRefresher);<a name="line.2126"></a>
<span class="sourceLineNo">2127</span>    }<a name="line.2127"></a>
<span class="sourceLineNo">2128</span>    if (this.fsUtilizationChore != null) {<a name="line.2128"></a>
<span class="sourceLineNo">2129</span>      choreService.scheduleChore(fsUtilizationChore);<a name="line.2129"></a>
<span class="sourceLineNo">2130</span>    }<a name="line.2130"></a>
<span class="sourceLineNo">2131</span>    if (this.slowLogTableOpsChore != null) {<a name="line.2131"></a>
<span class="sourceLineNo">2132</span>      choreService.scheduleChore(slowLogTableOpsChore);<a name="line.2132"></a>
<span class="sourceLineNo">2133</span>    }<a name="line.2133"></a>
<span class="sourceLineNo">2134</span><a name="line.2134"></a>
<span class="sourceLineNo">2135</span>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.2135"></a>
<span class="sourceLineNo">2136</span>    // an unhandled exception, it will just exit.<a name="line.2136"></a>
<span class="sourceLineNo">2137</span>    Threads.setDaemonThreadRunning(this.leaseManager, getName() + ".leaseChecker",<a name="line.2137"></a>
<span class="sourceLineNo">2138</span>        uncaughtExceptionHandler);<a name="line.2138"></a>
<span class="sourceLineNo">2139</span><a name="line.2139"></a>
<span class="sourceLineNo">2140</span>    // Create the log splitting worker and start it<a name="line.2140"></a>
<span class="sourceLineNo">2141</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.2141"></a>
<span class="sourceLineNo">2142</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.2142"></a>
<span class="sourceLineNo">2143</span>    // tasks even after current task is preempted after a split task times out.<a name="line.2143"></a>
<span class="sourceLineNo">2144</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.2144"></a>
<span class="sourceLineNo">2145</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2145"></a>
<span class="sourceLineNo">2146</span>        conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.2146"></a>
<span class="sourceLineNo">2147</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.2147"></a>
<span class="sourceLineNo">2148</span>        conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.2148"></a>
<span class="sourceLineNo">2149</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_SERVERSIDE_RETRIES_MULTIPLIER, 1);<a name="line.2149"></a>
<span class="sourceLineNo">2150</span>    if (this.csm != null &amp;&amp; conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.2150"></a>
<span class="sourceLineNo">2151</span>      DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.2151"></a>
<span class="sourceLineNo">2152</span>      // SplitLogWorker needs csm. If none, don't start this.<a name="line.2152"></a>
<span class="sourceLineNo">2153</span>      this.splitLogWorker = new SplitLogWorker(sinkConf, this, this, walFactory);<a name="line.2153"></a>
<span class="sourceLineNo">2154</span>      splitLogWorker.start();<a name="line.2154"></a>
<span class="sourceLineNo">2155</span>      LOG.debug("SplitLogWorker started");<a name="line.2155"></a>
<span class="sourceLineNo">2156</span>    }<a name="line.2156"></a>
<span class="sourceLineNo">2157</span><a name="line.2157"></a>
<span class="sourceLineNo">2158</span>    // Memstore services.<a name="line.2158"></a>
<span class="sourceLineNo">2159</span>    startHeapMemoryManager();<a name="line.2159"></a>
<span class="sourceLineNo">2160</span>    // Call it after starting HeapMemoryManager.<a name="line.2160"></a>
<span class="sourceLineNo">2161</span>    initializeMemStoreChunkCreator();<a name="line.2161"></a>
<span class="sourceLineNo">2162</span>  }<a name="line.2162"></a>
<span class="sourceLineNo">2163</span><a name="line.2163"></a>
<span class="sourceLineNo">2164</span>  private void initializeThreads() {<a name="line.2164"></a>
<span class="sourceLineNo">2165</span>    // Cache flushing thread.<a name="line.2165"></a>
<span class="sourceLineNo">2166</span>    this.cacheFlusher = new MemStoreFlusher(conf, this);<a name="line.2166"></a>
<span class="sourceLineNo">2167</span><a name="line.2167"></a>
<span class="sourceLineNo">2168</span>    // Compaction thread<a name="line.2168"></a>
<span class="sourceLineNo">2169</span>    this.compactSplitThread = new CompactSplit(this);<a name="line.2169"></a>
<span class="sourceLineNo">2170</span><a name="line.2170"></a>
<span class="sourceLineNo">2171</span>    // Background thread to check for compactions; needed if region has not gotten updates<a name="line.2171"></a>
<span class="sourceLineNo">2172</span>    // in a while. It will take care of not checking too frequently on store-by-store basis.<a name="line.2172"></a>
<span class="sourceLineNo">2173</span>    this.compactionChecker = new CompactionChecker(this, this.compactionCheckFrequency, this);<a name="line.2173"></a>
<span class="sourceLineNo">2174</span>    this.periodicFlusher = new PeriodicMemStoreFlusher(this.flushCheckFrequency, this);<a name="line.2174"></a>
<span class="sourceLineNo">2175</span>    this.leaseManager = new LeaseManager(this.threadWakeFrequency);<a name="line.2175"></a>
<span class="sourceLineNo">2176</span><a name="line.2176"></a>
<span class="sourceLineNo">2177</span>    final boolean isSlowLogTableEnabled = conf.getBoolean(HConstants.SLOW_LOG_SYS_TABLE_ENABLED_KEY,<a name="line.2177"></a>
<span class="sourceLineNo">2178</span>      HConstants.DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY);<a name="line.2178"></a>
<span class="sourceLineNo">2179</span>    if (isSlowLogTableEnabled) {<a name="line.2179"></a>
<span class="sourceLineNo">2180</span>      // default chore duration: 10 min<a name="line.2180"></a>
<span class="sourceLineNo">2181</span>      final int duration = conf.getInt("hbase.slowlog.systable.chore.duration", 10 * 60 * 1000);<a name="line.2181"></a>
<span class="sourceLineNo">2182</span>      slowLogTableOpsChore = new SlowLogTableOpsChore(this, duration, this.namedQueueRecorder);<a name="line.2182"></a>
<span class="sourceLineNo">2183</span>    }<a name="line.2183"></a>
<span class="sourceLineNo">2184</span><a name="line.2184"></a>
<span class="sourceLineNo">2185</span>    if (this.nonceManager != null) {<a name="line.2185"></a>
<span class="sourceLineNo">2186</span>      // Create the scheduled chore that cleans up nonces.<a name="line.2186"></a>
<span class="sourceLineNo">2187</span>      nonceManagerChore = this.nonceManager.createCleanupScheduledChore(this);<a name="line.2187"></a>
<span class="sourceLineNo">2188</span>    }<a name="line.2188"></a>
<span class="sourceLineNo">2189</span><a name="line.2189"></a>
<span class="sourceLineNo">2190</span>    // Setup the Quota Manager<a name="line.2190"></a>
<span class="sourceLineNo">2191</span>    rsQuotaManager = new RegionServerRpcQuotaManager(this);<a name="line.2191"></a>
<span class="sourceLineNo">2192</span>    rsSpaceQuotaManager = new RegionServerSpaceQuotaManager(this);<a name="line.2192"></a>
<span class="sourceLineNo">2193</span><a name="line.2193"></a>
<span class="sourceLineNo">2194</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.2194"></a>
<span class="sourceLineNo">2195</span>      this.fsUtilizationChore = new FileSystemUtilizationChore(this);<a name="line.2195"></a>
<span class="sourceLineNo">2196</span>    }<a name="line.2196"></a>
<span class="sourceLineNo">2197</span><a name="line.2197"></a>
<span class="sourceLineNo">2198</span><a name="line.2198"></a>
<span class="sourceLineNo">2199</span>    boolean onlyMetaRefresh = false;<a name="line.2199"></a>
<span class="sourceLineNo">2200</span>    int storefileRefreshPeriod = conf.getInt(<a name="line.2200"></a>
<span class="sourceLineNo">2201</span>        StorefileRefresherChore.REGIONSERVER_STOREFILE_REFRESH_PERIOD,<a name="line.2201"></a>
<span class="sourceLineNo">2202</span>        StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2202"></a>
<span class="sourceLineNo">2203</span>    if (storefileRefreshPeriod == 0) {<a name="line.2203"></a>
<span class="sourceLineNo">2204</span>      storefileRefreshPeriod = conf.getInt(<a name="line.2204"></a>
<span class="sourceLineNo">2205</span>          StorefileRefresherChore.REGIONSERVER_META_STOREFILE_REFRESH_PERIOD,<a name="line.2205"></a>
<span class="sourceLineNo">2206</span>          StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2206"></a>
<span class="sourceLineNo">2207</span>      onlyMetaRefresh = true;<a name="line.2207"></a>
<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
<span class="sourceLineNo">2209</span>    if (storefileRefreshPeriod &gt; 0) {<a name="line.2209"></a>
<span class="sourceLineNo">2210</span>      this.storefileRefresher = new StorefileRefresherChore(storefileRefreshPeriod,<a name="line.2210"></a>
<span class="sourceLineNo">2211</span>          onlyMetaRefresh, this, this);<a name="line.2211"></a>
<span class="sourceLineNo">2212</span>    }<a name="line.2212"></a>
<span class="sourceLineNo">2213</span>    registerConfigurationObservers();<a name="line.2213"></a>
<span class="sourceLineNo">2214</span>  }<a name="line.2214"></a>
<span class="sourceLineNo">2215</span><a name="line.2215"></a>
<span class="sourceLineNo">2216</span>  private void registerConfigurationObservers() {<a name="line.2216"></a>
<span class="sourceLineNo">2217</span>    // Registering the compactSplitThread object with the ConfigurationManager.<a name="line.2217"></a>
<span class="sourceLineNo">2218</span>    configurationManager.registerObserver(this.compactSplitThread);<a name="line.2218"></a>
<span class="sourceLineNo">2219</span>    configurationManager.registerObserver(this.rpcServices);<a name="line.2219"></a>
<span class="sourceLineNo">2220</span>    configurationManager.registerObserver(this);<a name="line.2220"></a>
<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
<span class="sourceLineNo">2222</span><a name="line.2222"></a>
<span class="sourceLineNo">2223</span>  /**<a name="line.2223"></a>
<span class="sourceLineNo">2224</span>   * Puts up the webui.<a name="line.2224"></a>
<span class="sourceLineNo">2225</span>   */<a name="line.2225"></a>
<span class="sourceLineNo">2226</span>  private void putUpWebUI() throws IOException {<a name="line.2226"></a>
<span class="sourceLineNo">2227</span>    int port = this.conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.2227"></a>
<span class="sourceLineNo">2228</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.2228"></a>
<span class="sourceLineNo">2229</span>    String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");<a name="line.2229"></a>
<span class="sourceLineNo">2230</span><a name="line.2230"></a>
<span class="sourceLineNo">2231</span>    if(this instanceof HMaster) {<a name="line.2231"></a>
<span class="sourceLineNo">2232</span>      port = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2232"></a>
<span class="sourceLineNo">2233</span>          HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2233"></a>
<span class="sourceLineNo">2234</span>      addr = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.2234"></a>
<span class="sourceLineNo">2235</span>    }<a name="line.2235"></a>
<span class="sourceLineNo">2236</span>    // -1 is for disabling info server<a name="line.2236"></a>
<span class="sourceLineNo">2237</span>    if (port &lt; 0) {<a name="line.2237"></a>
<span class="sourceLineNo">2238</span>      return;<a name="line.2238"></a>
<span class="sourceLineNo">2239</span>    }<a name="line.2239"></a>
<span class="sourceLineNo">2240</span><a name="line.2240"></a>
<span class="sourceLineNo">2241</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.2241"></a>
<span class="sourceLineNo">2242</span>      String msg =<a name="line.2242"></a>
<span class="sourceLineNo">2243</span>          "Failed to start http info server. Address " + addr<a name="line.2243"></a>
<span class="sourceLineNo">2244</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.2244"></a>
<span class="sourceLineNo">2245</span>              + "hbase.regionserver.info.bindAddress";<a name="line.2245"></a>
<span class="sourceLineNo">2246</span>      LOG.error(msg);<a name="line.2246"></a>
<span class="sourceLineNo">2247</span>      throw new IOException(msg);<a name="line.2247"></a>
<span class="sourceLineNo">2248</span>    }<a name="line.2248"></a>
<span class="sourceLineNo">2249</span>    // check if auto port bind enabled<a name="line.2249"></a>
<span class="sourceLineNo">2250</span>    boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO, false);<a name="line.2250"></a>
<span class="sourceLineNo">2251</span>    while (true) {<a name="line.2251"></a>
<span class="sourceLineNo">2252</span>      try {<a name="line.2252"></a>
<span class="sourceLineNo">2253</span>        this.infoServer = new InfoServer(getProcessName(), addr, port, false, this.conf);<a name="line.2253"></a>
<span class="sourceLineNo">2254</span>        infoServer.addPrivilegedServlet("dump", "/dump", getDumpServlet());<a name="line.2254"></a>
<span class="sourceLineNo">2255</span>        configureInfoServer();<a name="line.2255"></a>
<span class="sourceLineNo">2256</span>        this.infoServer.start();<a name="line.2256"></a>
<span class="sourceLineNo">2257</span>        break;<a name="line.2257"></a>
<span class="sourceLineNo">2258</span>      } catch (BindException e) {<a name="line.2258"></a>
<span class="sourceLineNo">2259</span>        if (!auto) {<a name="line.2259"></a>
<span class="sourceLineNo">2260</span>          // auto bind disabled throw BindException<a name="line.2260"></a>
<span class="sourceLineNo">2261</span>          LOG.error("Failed binding http info server to port: " + port);<a name="line.2261"></a>
<span class="sourceLineNo">2262</span>          throw e;<a name="line.2262"></a>
<span class="sourceLineNo">2263</span>        }<a name="line.2263"></a>
<span class="sourceLineNo">2264</span>        // auto bind enabled, try to use another port<a name="line.2264"></a>
<span class="sourceLineNo">2265</span>        LOG.info("Failed binding http info server to port: " + port);<a name="line.2265"></a>
<span class="sourceLineNo">2266</span>        port++;<a name="line.2266"></a>
<span class="sourceLineNo">2267</span>      }<a name="line.2267"></a>
<span class="sourceLineNo">2268</span>    }<a name="line.2268"></a>
<span class="sourceLineNo">2269</span>    port = this.infoServer.getPort();<a name="line.2269"></a>
<span class="sourceLineNo">2270</span>    conf.setInt(HConstants.REGIONSERVER_INFO_PORT, port);<a name="line.2270"></a>
<span class="sourceLineNo">2271</span>    int masterInfoPort = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2271"></a>
<span class="sourceLineNo">2272</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2272"></a>
<span class="sourceLineNo">2273</span>    conf.setInt("hbase.master.info.port.orig", masterInfoPort);<a name="line.2273"></a>
<span class="sourceLineNo">2274</span>    conf.setInt(HConstants.MASTER_INFO_PORT, port);<a name="line.2274"></a>
<span class="sourceLineNo">2275</span>  }<a name="line.2275"></a>
<span class="sourceLineNo">2276</span><a name="line.2276"></a>
<span class="sourceLineNo">2277</span>  /*<a name="line.2277"></a>
<span class="sourceLineNo">2278</span>   * Verify that server is healthy<a name="line.2278"></a>
<span class="sourceLineNo">2279</span>   */<a name="line.2279"></a>
<span class="sourceLineNo">2280</span>  private boolean isHealthy() {<a name="line.2280"></a>
<span class="sourceLineNo">2281</span>    if (!dataFsOk) {<a name="line.2281"></a>
<span class="sourceLineNo">2282</span>      // File system problem<a name="line.2282"></a>
<span class="sourceLineNo">2283</span>      return false;<a name="line.2283"></a>
<span class="sourceLineNo">2284</span>    }<a name="line.2284"></a>
<span class="sourceLineNo">2285</span>    // Verify that all threads are alive<a name="line.2285"></a>
<span class="sourceLineNo">2286</span>    boolean healthy = (this.leaseManager == null || this.leaseManager.isAlive())<a name="line.2286"></a>
<span class="sourceLineNo">2287</span>        &amp;&amp; (this.cacheFlusher == null || this.cacheFlusher.isAlive())<a name="line.2287"></a>
<span class="sourceLineNo">2288</span>        &amp;&amp; (this.walRoller == null || this.walRoller.isAlive())<a name="line.2288"></a>
<span class="sourceLineNo">2289</span>        &amp;&amp; (this.compactionChecker == null || this.compactionChecker.isScheduled())<a name="line.2289"></a>
<span class="sourceLineNo">2290</span>        &amp;&amp; (this.periodicFlusher == null || this.periodicFlusher.isScheduled());<a name="line.2290"></a>
<span class="sourceLineNo">2291</span>    if (!healthy) {<a name="line.2291"></a>
<span class="sourceLineNo">2292</span>      stop("One or more threads are no longer alive -- stop");<a name="line.2292"></a>
<span class="sourceLineNo">2293</span>    }<a name="line.2293"></a>
<span class="sourceLineNo">2294</span>    return healthy;<a name="line.2294"></a>
<span class="sourceLineNo">2295</span>  }<a name="line.2295"></a>
<span class="sourceLineNo">2296</span><a name="line.2296"></a>
<span class="sourceLineNo">2297</span>  @Override<a name="line.2297"></a>
<span class="sourceLineNo">2298</span>  public List&lt;WAL&gt; getWALs() {<a name="line.2298"></a>
<span class="sourceLineNo">2299</span>    return walFactory.getWALs();<a name="line.2299"></a>
<span class="sourceLineNo">2300</span>  }<a name="line.2300"></a>
<span class="sourceLineNo">2301</span><a name="line.2301"></a>
<span class="sourceLineNo">2302</span>  @Override<a name="line.2302"></a>
<span class="sourceLineNo">2303</span>  public WAL getWAL(RegionInfo regionInfo) throws IOException {<a name="line.2303"></a>
<span class="sourceLineNo">2304</span>    WAL wal = walFactory.getWAL(regionInfo);<a name="line.2304"></a>
<span class="sourceLineNo">2305</span>    if (this.walRoller != null) {<a name="line.2305"></a>
<span class="sourceLineNo">2306</span>      this.walRoller.addWAL(wal);<a name="line.2306"></a>
<span class="sourceLineNo">2307</span>    }<a name="line.2307"></a>
<span class="sourceLineNo">2308</span>    return wal;<a name="line.2308"></a>
<span class="sourceLineNo">2309</span>  }<a name="line.2309"></a>
<span class="sourceLineNo">2310</span><a name="line.2310"></a>
<span class="sourceLineNo">2311</span>  public LogRoller getWalRoller() {<a name="line.2311"></a>
<span class="sourceLineNo">2312</span>    return walRoller;<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>  WALFactory getWalFactory() {<a name="line.2315"></a>
<span class="sourceLineNo">2316</span>    return walFactory;<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>  @Override<a name="line.2319"></a>
<span class="sourceLineNo">2320</span>  public Connection getConnection() {<a name="line.2320"></a>
<span class="sourceLineNo">2321</span>    return getAsyncConnection().toConnection();<a name="line.2321"></a>
<span class="sourceLineNo">2322</span>  }<a name="line.2322"></a>
<span class="sourceLineNo">2323</span><a name="line.2323"></a>
<span class="sourceLineNo">2324</span>  @Override<a name="line.2324"></a>
<span class="sourceLineNo">2325</span>  public void stop(final String msg) {<a name="line.2325"></a>
<span class="sourceLineNo">2326</span>    stop(msg, false, RpcServer.getRequestUser().orElse(null));<a name="line.2326"></a>
<span class="sourceLineNo">2327</span>  }<a name="line.2327"></a>
<span class="sourceLineNo">2328</span><a name="line.2328"></a>
<span class="sourceLineNo">2329</span>  /**<a name="line.2329"></a>
<span class="sourceLineNo">2330</span>   * Stops the regionserver.<a name="line.2330"></a>
<span class="sourceLineNo">2331</span>   * @param msg Status message<a name="line.2331"></a>
<span class="sourceLineNo">2332</span>   * @param force True if this is a regionserver abort<a name="line.2332"></a>
<span class="sourceLineNo">2333</span>   * @param user The user executing the stop request, or null if no user is associated<a name="line.2333"></a>
<span class="sourceLineNo">2334</span>   */<a name="line.2334"></a>
<span class="sourceLineNo">2335</span>  public void stop(final String msg, final boolean force, final User user) {<a name="line.2335"></a>
<span class="sourceLineNo">2336</span>    if (!this.stopped) {<a name="line.2336"></a>
<span class="sourceLineNo">2337</span>      LOG.info("***** STOPPING region server '" + this + "' *****");<a name="line.2337"></a>
<span class="sourceLineNo">2338</span>      if (this.rsHost != null) {<a name="line.2338"></a>
<span class="sourceLineNo">2339</span>        // when forced via abort don't allow CPs to override<a name="line.2339"></a>
<span class="sourceLineNo">2340</span>        try {<a name="line.2340"></a>
<span class="sourceLineNo">2341</span>          this.rsHost.preStop(msg, user);<a name="line.2341"></a>
<span class="sourceLineNo">2342</span>        } catch (IOException ioe) {<a name="line.2342"></a>
<span class="sourceLineNo">2343</span>          if (!force) {<a name="line.2343"></a>
<span class="sourceLineNo">2344</span>            LOG.warn("The region server did not stop", ioe);<a name="line.2344"></a>
<span class="sourceLineNo">2345</span>            return;<a name="line.2345"></a>
<span class="sourceLineNo">2346</span>          }<a name="line.2346"></a>
<span class="sourceLineNo">2347</span>          LOG.warn("Skipping coprocessor exception on preStop() due to forced shutdown", ioe);<a name="line.2347"></a>
<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
<span class="sourceLineNo">2349</span>      }<a name="line.2349"></a>
<span class="sourceLineNo">2350</span>      this.stopped = true;<a name="line.2350"></a>
<span class="sourceLineNo">2351</span>      LOG.info("STOPPED: " + msg);<a name="line.2351"></a>
<span class="sourceLineNo">2352</span>      // Wakes run() if it is sleeping<a name="line.2352"></a>
<span class="sourceLineNo">2353</span>      sleeper.skipSleepCycle();<a name="line.2353"></a>
<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
<span class="sourceLineNo">2355</span>  }<a name="line.2355"></a>
<span class="sourceLineNo">2356</span><a name="line.2356"></a>
<span class="sourceLineNo">2357</span>  public void waitForServerOnline(){<a name="line.2357"></a>
<span class="sourceLineNo">2358</span>    while (!isStopped() &amp;&amp; !isOnline()) {<a name="line.2358"></a>
<span class="sourceLineNo">2359</span>      synchronized (online) {<a name="line.2359"></a>
<span class="sourceLineNo">2360</span>        try {<a name="line.2360"></a>
<span class="sourceLineNo">2361</span>          online.wait(msgInterval);<a name="line.2361"></a>
<span class="sourceLineNo">2362</span>        } catch (InterruptedException ie) {<a name="line.2362"></a>
<span class="sourceLineNo">2363</span>          Thread.currentThread().interrupt();<a name="line.2363"></a>
<span class="sourceLineNo">2364</span>          break;<a name="line.2364"></a>
<span class="sourceLineNo">2365</span>        }<a name="line.2365"></a>
<span class="sourceLineNo">2366</span>      }<a name="line.2366"></a>
<span class="sourceLineNo">2367</span>    }<a name="line.2367"></a>
<span class="sourceLineNo">2368</span>  }<a name="line.2368"></a>
<span class="sourceLineNo">2369</span><a name="line.2369"></a>
<span class="sourceLineNo">2370</span>  @Override<a name="line.2370"></a>
<span class="sourceLineNo">2371</span>  public void postOpenDeployTasks(final PostOpenDeployContext context) throws IOException {<a name="line.2371"></a>
<span class="sourceLineNo">2372</span>    HRegion r = context.getRegion();<a name="line.2372"></a>
<span class="sourceLineNo">2373</span>    long openProcId = context.getOpenProcId();<a name="line.2373"></a>
<span class="sourceLineNo">2374</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2374"></a>
<span class="sourceLineNo">2375</span>    rpcServices.checkOpen();<a name="line.2375"></a>
<span class="sourceLineNo">2376</span>    LOG.info("Post open deploy tasks for {}, pid={}, masterSystemTime={}",<a name="line.2376"></a>
<span class="sourceLineNo">2377</span>      r.getRegionInfo().getRegionNameAsString(), openProcId, masterSystemTime);<a name="line.2377"></a>
<span class="sourceLineNo">2378</span>    // Do checks to see if we need to compact (references or too many files)<a name="line.2378"></a>
<span class="sourceLineNo">2379</span>    // Skip compaction check if region is read only<a name="line.2379"></a>
<span class="sourceLineNo">2380</span>    if (!r.isReadOnly()) {<a name="line.2380"></a>
<span class="sourceLineNo">2381</span>      for (HStore s : r.stores.values()) {<a name="line.2381"></a>
<span class="sourceLineNo">2382</span>        if (s.hasReferences() || s.needsCompaction()) {<a name="line.2382"></a>
<span class="sourceLineNo">2383</span>          this.compactSplitThread.requestSystemCompaction(r, s, "Opening Region");<a name="line.2383"></a>
<span class="sourceLineNo">2384</span>        }<a name="line.2384"></a>
<span class="sourceLineNo">2385</span>      }<a name="line.2385"></a>
<span class="sourceLineNo">2386</span>    }<a name="line.2386"></a>
<span class="sourceLineNo">2387</span>    long openSeqNum = r.getOpenSeqNum();<a name="line.2387"></a>
<span class="sourceLineNo">2388</span>    if (openSeqNum == HConstants.NO_SEQNUM) {<a name="line.2388"></a>
<span class="sourceLineNo">2389</span>      // If we opened a region, we should have read some sequence number from it.<a name="line.2389"></a>
<span class="sourceLineNo">2390</span>      LOG.error(<a name="line.2390"></a>
<span class="sourceLineNo">2391</span>        "No sequence number found when opening " + r.getRegionInfo().getRegionNameAsString());<a name="line.2391"></a>
<span class="sourceLineNo">2392</span>      openSeqNum = 0;<a name="line.2392"></a>
<span class="sourceLineNo">2393</span>    }<a name="line.2393"></a>
<span class="sourceLineNo">2394</span><a name="line.2394"></a>
<span class="sourceLineNo">2395</span>    // Notify master<a name="line.2395"></a>
<span class="sourceLineNo">2396</span>    if (!reportRegionStateTransition(new RegionStateTransitionContext(TransitionCode.OPENED,<a name="line.2396"></a>
<span class="sourceLineNo">2397</span>      openSeqNum, openProcId, masterSystemTime, r.getRegionInfo()))) {<a name="line.2397"></a>
<span class="sourceLineNo">2398</span>      throw new IOException(<a name="line.2398"></a>
<span class="sourceLineNo">2399</span>        "Failed to report opened region to master: " + r.getRegionInfo().getRegionNameAsString());<a name="line.2399"></a>
<span class="sourceLineNo">2400</span>    }<a name="line.2400"></a>
<span class="sourceLineNo">2401</span><a name="line.2401"></a>
<span class="sourceLineNo">2402</span>    triggerFlushInPrimaryRegion(r);<a name="line.2402"></a>
<span class="sourceLineNo">2403</span><a name="line.2403"></a>
<span class="sourceLineNo">2404</span>    LOG.debug("Finished post open deploy task for " + r.getRegionInfo().getRegionNameAsString());<a name="line.2404"></a>
<span class="sourceLineNo">2405</span>  }<a name="line.2405"></a>
<span class="sourceLineNo">2406</span><a name="line.2406"></a>
<span class="sourceLineNo">2407</span>  /**<a name="line.2407"></a>
<span class="sourceLineNo">2408</span>   * Helper method for use in tests. Skip the region transition report when there's no master<a name="line.2408"></a>
<span class="sourceLineNo">2409</span>   * around to receive it.<a name="line.2409"></a>
<span class="sourceLineNo">2410</span>   */<a name="line.2410"></a>
<span class="sourceLineNo">2411</span>  private boolean skipReportingTransition(final RegionStateTransitionContext context) {<a name="line.2411"></a>
<span class="sourceLineNo">2412</span>    final TransitionCode code = context.getCode();<a name="line.2412"></a>
<span class="sourceLineNo">2413</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2413"></a>
<span class="sourceLineNo">2414</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2414"></a>
<span class="sourceLineNo">2415</span>    final RegionInfo[] hris = context.getHris();<a name="line.2415"></a>
<span class="sourceLineNo">2416</span><a name="line.2416"></a>
<span class="sourceLineNo">2417</span>    if (code == TransitionCode.OPENED) {<a name="line.2417"></a>
<span class="sourceLineNo">2418</span>      Preconditions.checkArgument(hris != null &amp;&amp; hris.length == 1);<a name="line.2418"></a>
<span class="sourceLineNo">2419</span>      if (hris[0].isMetaRegion()) {<a name="line.2419"></a>
<span class="sourceLineNo">2420</span>        try {<a name="line.2420"></a>
<span class="sourceLineNo">2421</span>          MetaTableLocator.setMetaLocation(getZooKeeper(), serverName,<a name="line.2421"></a>
<span class="sourceLineNo">2422</span>              hris[0].getReplicaId(), RegionState.State.OPEN);<a name="line.2422"></a>
<span class="sourceLineNo">2423</span>        } catch (KeeperException e) {<a name="line.2423"></a>
<span class="sourceLineNo">2424</span>          LOG.info("Failed to update meta location", e);<a name="line.2424"></a>
<span class="sourceLineNo">2425</span>          return false;<a name="line.2425"></a>
<span class="sourceLineNo">2426</span>        }<a name="line.2426"></a>
<span class="sourceLineNo">2427</span>      } else {<a name="line.2427"></a>
<span class="sourceLineNo">2428</span>        try {<a name="line.2428"></a>
<span class="sourceLineNo">2429</span>          MetaTableAccessor.updateRegionLocation(asyncClusterConnection.toConnection(), hris[0],<a name="line.2429"></a>
<span class="sourceLineNo">2430</span>              serverName, openSeqNum, masterSystemTime);<a name="line.2430"></a>
<span class="sourceLineNo">2431</span>        } catch (IOException e) {<a name="line.2431"></a>
<span class="sourceLineNo">2432</span>          LOG.info("Failed to update meta", e);<a name="line.2432"></a>
<span class="sourceLineNo">2433</span>          return false;<a name="line.2433"></a>
<span class="sourceLineNo">2434</span>        }<a name="line.2434"></a>
<span class="sourceLineNo">2435</span>      }<a name="line.2435"></a>
<span class="sourceLineNo">2436</span>    }<a name="line.2436"></a>
<span class="sourceLineNo">2437</span>    return true;<a name="line.2437"></a>
<span class="sourceLineNo">2438</span>  }<a name="line.2438"></a>
<span class="sourceLineNo">2439</span><a name="line.2439"></a>
<span class="sourceLineNo">2440</span>  private ReportRegionStateTransitionRequest createReportRegionStateTransitionRequest(<a name="line.2440"></a>
<span class="sourceLineNo">2441</span>      final RegionStateTransitionContext context) {<a name="line.2441"></a>
<span class="sourceLineNo">2442</span>    final TransitionCode code = context.getCode();<a name="line.2442"></a>
<span class="sourceLineNo">2443</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2443"></a>
<span class="sourceLineNo">2444</span>    final RegionInfo[] hris = context.getHris();<a name="line.2444"></a>
<span class="sourceLineNo">2445</span>    final long[] procIds = context.getProcIds();<a name="line.2445"></a>
<span class="sourceLineNo">2446</span><a name="line.2446"></a>
<span class="sourceLineNo">2447</span>    ReportRegionStateTransitionRequest.Builder builder =<a name="line.2447"></a>
<span class="sourceLineNo">2448</span>        ReportRegionStateTransitionRequest.newBuilder();<a name="line.2448"></a>
<span class="sourceLineNo">2449</span>    builder.setServer(ProtobufUtil.toServerName(serverName));<a name="line.2449"></a>
<span class="sourceLineNo">2450</span>    RegionStateTransition.Builder transition = builder.addTransitionBuilder();<a name="line.2450"></a>
<span class="sourceLineNo">2451</span>    transition.setTransitionCode(code);<a name="line.2451"></a>
<span class="sourceLineNo">2452</span>    if (code == TransitionCode.OPENED &amp;&amp; openSeqNum &gt;= 0) {<a name="line.2452"></a>
<span class="sourceLineNo">2453</span>      transition.setOpenSeqNum(openSeqNum);<a name="line.2453"></a>
<span class="sourceLineNo">2454</span>    }<a name="line.2454"></a>
<span class="sourceLineNo">2455</span>    for (RegionInfo hri: hris) {<a name="line.2455"></a>
<span class="sourceLineNo">2456</span>      transition.addRegionInfo(ProtobufUtil.toRegionInfo(hri));<a name="line.2456"></a>
<span class="sourceLineNo">2457</span>    }<a name="line.2457"></a>
<span class="sourceLineNo">2458</span>    for (long procId: procIds) {<a name="line.2458"></a>
<span class="sourceLineNo">2459</span>      transition.addProcId(procId);<a name="line.2459"></a>
<span class="sourceLineNo">2460</span>    }<a name="line.2460"></a>
<span class="sourceLineNo">2461</span><a name="line.2461"></a>
<span class="sourceLineNo">2462</span>    return builder.build();<a name="line.2462"></a>
<span class="sourceLineNo">2463</span>  }<a name="line.2463"></a>
<span class="sourceLineNo">2464</span><a name="line.2464"></a>
<span class="sourceLineNo">2465</span>  @Override<a name="line.2465"></a>
<span class="sourceLineNo">2466</span>  public boolean reportRegionStateTransition(final RegionStateTransitionContext context) {<a name="line.2466"></a>
<span class="sourceLineNo">2467</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.2467"></a>
<span class="sourceLineNo">2468</span>      return skipReportingTransition(context);<a name="line.2468"></a>
<span class="sourceLineNo">2469</span>    }<a name="line.2469"></a>
<span class="sourceLineNo">2470</span>    final ReportRegionStateTransitionRequest request =<a name="line.2470"></a>
<span class="sourceLineNo">2471</span>        createReportRegionStateTransitionRequest(context);<a name="line.2471"></a>
<span class="sourceLineNo">2472</span><a name="line.2472"></a>
<span class="sourceLineNo">2473</span>    int tries = 0;<a name="line.2473"></a>
<span class="sourceLineNo">2474</span>    long pauseTime = this.retryPauseTime;<a name="line.2474"></a>
<span class="sourceLineNo">2475</span>    // Keep looping till we get an error. We want to send reports even though server is going down.<a name="line.2475"></a>
<span class="sourceLineNo">2476</span>    // Only go down if clusterConnection is null. It is set to null almost as last thing as the<a name="line.2476"></a>
<span class="sourceLineNo">2477</span>    // HRegionServer does down.<a name="line.2477"></a>
<span class="sourceLineNo">2478</span>    while (this.asyncClusterConnection != null &amp;&amp; !this.asyncClusterConnection.isClosed()) {<a name="line.2478"></a>
<span class="sourceLineNo">2479</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2479"></a>
<span class="sourceLineNo">2480</span>      try {<a name="line.2480"></a>
<span class="sourceLineNo">2481</span>        if (rss == null) {<a name="line.2481"></a>
<span class="sourceLineNo">2482</span>          createRegionServerStatusStub();<a name="line.2482"></a>
<span class="sourceLineNo">2483</span>          continue;<a name="line.2483"></a>
<span class="sourceLineNo">2484</span>        }<a name="line.2484"></a>
<span class="sourceLineNo">2485</span>        ReportRegionStateTransitionResponse response =<a name="line.2485"></a>
<span class="sourceLineNo">2486</span>          rss.reportRegionStateTransition(null, request);<a name="line.2486"></a>
<span class="sourceLineNo">2487</span>        if (response.hasErrorMessage()) {<a name="line.2487"></a>
<span class="sourceLineNo">2488</span>          LOG.info("TRANSITION FAILED " + request + ": " + response.getErrorMessage());<a name="line.2488"></a>
<span class="sourceLineNo">2489</span>          break;<a name="line.2489"></a>
<span class="sourceLineNo">2490</span>        }<a name="line.2490"></a>
<span class="sourceLineNo">2491</span>        // Log if we had to retry else don't log unless TRACE. We want to<a name="line.2491"></a>
<span class="sourceLineNo">2492</span>        // know if were successful after an attempt showed in logs as failed.<a name="line.2492"></a>
<span class="sourceLineNo">2493</span>        if (tries &gt; 0 || LOG.isTraceEnabled()) {<a name="line.2493"></a>
<span class="sourceLineNo">2494</span>          LOG.info("TRANSITION REPORTED " + request);<a name="line.2494"></a>
<span class="sourceLineNo">2495</span>        }<a name="line.2495"></a>
<span class="sourceLineNo">2496</span>        // NOTE: Return mid-method!!!<a name="line.2496"></a>
<span class="sourceLineNo">2497</span>        return true;<a name="line.2497"></a>
<span class="sourceLineNo">2498</span>      } catch (ServiceException se) {<a name="line.2498"></a>
<span class="sourceLineNo">2499</span>        IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2499"></a>
<span class="sourceLineNo">2500</span>        boolean pause =<a name="line.2500"></a>
<span class="sourceLineNo">2501</span>            ioe instanceof ServerNotRunningYetException || ioe instanceof PleaseHoldException<a name="line.2501"></a>
<span class="sourceLineNo">2502</span>                || ioe instanceof CallQueueTooBigException;<a name="line.2502"></a>
<span class="sourceLineNo">2503</span>        if (pause) {<a name="line.2503"></a>
<span class="sourceLineNo">2504</span>          // Do backoff else we flood the Master with requests.<a name="line.2504"></a>
<span class="sourceLineNo">2505</span>          pauseTime = ConnectionUtils.getPauseTime(this.retryPauseTime, tries);<a name="line.2505"></a>
<span class="sourceLineNo">2506</span>        } else {<a name="line.2506"></a>
<span class="sourceLineNo">2507</span>          pauseTime = this.retryPauseTime; // Reset.<a name="line.2507"></a>
<span class="sourceLineNo">2508</span>        }<a name="line.2508"></a>
<span class="sourceLineNo">2509</span>        LOG.info("Failed report transition " +<a name="line.2509"></a>
<span class="sourceLineNo">2510</span>          TextFormat.shortDebugString(request) + "; retry (#" + tries + ")" +<a name="line.2510"></a>
<span class="sourceLineNo">2511</span>            (pause?<a name="line.2511"></a>
<span class="sourceLineNo">2512</span>                " after " + pauseTime + "ms delay (Master is coming online...).":<a name="line.2512"></a>
<span class="sourceLineNo">2513</span>                " immediately."),<a name="line.2513"></a>
<span class="sourceLineNo">2514</span>            ioe);<a name="line.2514"></a>
<span class="sourceLineNo">2515</span>        if (pause) Threads.sleep(pauseTime);<a name="line.2515"></a>
<span class="sourceLineNo">2516</span>        tries++;<a name="line.2516"></a>
<span class="sourceLineNo">2517</span>        if (rssStub == rss) {<a name="line.2517"></a>
<span class="sourceLineNo">2518</span>          rssStub = null;<a name="line.2518"></a>
<span class="sourceLineNo">2519</span>        }<a name="line.2519"></a>
<span class="sourceLineNo">2520</span>      }<a name="line.2520"></a>
<span class="sourceLineNo">2521</span>    }<a name="line.2521"></a>
<span class="sourceLineNo">2522</span>    return false;<a name="line.2522"></a>
<span class="sourceLineNo">2523</span>  }<a name="line.2523"></a>
<span class="sourceLineNo">2524</span><a name="line.2524"></a>
<span class="sourceLineNo">2525</span>  /**<a name="line.2525"></a>
<span class="sourceLineNo">2526</span>   * Trigger a flush in the primary region replica if this region is a secondary replica. Does not<a name="line.2526"></a>
<span class="sourceLineNo">2527</span>   * block this thread. See RegionReplicaFlushHandler for details.<a name="line.2527"></a>
<span class="sourceLineNo">2528</span>   */<a name="line.2528"></a>
<span class="sourceLineNo">2529</span>  private void triggerFlushInPrimaryRegion(final HRegion region) {<a name="line.2529"></a>
<span class="sourceLineNo">2530</span>    if (ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) {<a name="line.2530"></a>
<span class="sourceLineNo">2531</span>      return;<a name="line.2531"></a>
<span class="sourceLineNo">2532</span>    }<a name="line.2532"></a>
<span class="sourceLineNo">2533</span>    TableName tn = region.getTableDescriptor().getTableName();<a name="line.2533"></a>
<span class="sourceLineNo">2534</span>    if (!ServerRegionReplicaUtil.isRegionReplicaReplicationEnabled(region.conf, tn) ||<a name="line.2534"></a>
<span class="sourceLineNo">2535</span>        !ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(region.conf)) {<a name="line.2535"></a>
<span class="sourceLineNo">2536</span>      region.setReadsEnabled(true);<a name="line.2536"></a>
<span class="sourceLineNo">2537</span>      return;<a name="line.2537"></a>
<span class="sourceLineNo">2538</span>    }<a name="line.2538"></a>
<span class="sourceLineNo">2539</span><a name="line.2539"></a>
<span class="sourceLineNo">2540</span>    region.setReadsEnabled(false); // disable reads before marking the region as opened.<a name="line.2540"></a>
<span class="sourceLineNo">2541</span>    // RegionReplicaFlushHandler might reset this.<a name="line.2541"></a>
<span class="sourceLineNo">2542</span><a name="line.2542"></a>
<span class="sourceLineNo">2543</span>    // Submit it to be handled by one of the handlers so that we do not block OpenRegionHandler<a name="line.2543"></a>
<span class="sourceLineNo">2544</span>    if (this.executorService != null) {<a name="line.2544"></a>
<span class="sourceLineNo">2545</span>      this.executorService.submit(new RegionReplicaFlushHandler(this, region));<a name="line.2545"></a>
<span class="sourceLineNo">2546</span>    } else {<a name="line.2546"></a>
<span class="sourceLineNo">2547</span>      LOG.info("Executor is null; not running flush of primary region replica for {}",<a name="line.2547"></a>
<span class="sourceLineNo">2548</span>        region.getRegionInfo());<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><a name="line.2551"></a>
<span class="sourceLineNo">2552</span>  @Override<a name="line.2552"></a>
<span class="sourceLineNo">2553</span>  public RpcServerInterface getRpcServer() {<a name="line.2553"></a>
<span class="sourceLineNo">2554</span>    return rpcServices.rpcServer;<a name="line.2554"></a>
<span class="sourceLineNo">2555</span>  }<a name="line.2555"></a>
<span class="sourceLineNo">2556</span><a name="line.2556"></a>
<span class="sourceLineNo">2557</span>  @InterfaceAudience.Private<a name="line.2557"></a>
<span class="sourceLineNo">2558</span>  public RSRpcServices getRSRpcServices() {<a name="line.2558"></a>
<span class="sourceLineNo">2559</span>    return rpcServices;<a name="line.2559"></a>
<span class="sourceLineNo">2560</span>  }<a name="line.2560"></a>
<span class="sourceLineNo">2561</span><a name="line.2561"></a>
<span class="sourceLineNo">2562</span>  /**<a name="line.2562"></a>
<span class="sourceLineNo">2563</span>   * Cause the server to exit without closing the regions it is serving, the log<a name="line.2563"></a>
<span class="sourceLineNo">2564</span>   * it is using and without notifying the master. Used unit testing and on<a name="line.2564"></a>
<span class="sourceLineNo">2565</span>   * catastrophic events such as HDFS is yanked out from under hbase or we OOME.<a name="line.2565"></a>
<span class="sourceLineNo">2566</span>   *<a name="line.2566"></a>
<span class="sourceLineNo">2567</span>   * @param reason<a name="line.2567"></a>
<span class="sourceLineNo">2568</span>   *          the reason we are aborting<a name="line.2568"></a>
<span class="sourceLineNo">2569</span>   * @param cause<a name="line.2569"></a>
<span class="sourceLineNo">2570</span>   *          the exception that caused the abort, or null<a name="line.2570"></a>
<span class="sourceLineNo">2571</span>   */<a name="line.2571"></a>
<span class="sourceLineNo">2572</span>  @Override<a name="line.2572"></a>
<span class="sourceLineNo">2573</span>  public void abort(String reason, Throwable cause) {<a name="line.2573"></a>
<span class="sourceLineNo">2574</span>    if (!setAbortRequested()) {<a name="line.2574"></a>
<span class="sourceLineNo">2575</span>      // Abort already in progress, ignore the new request.<a name="line.2575"></a>
<span class="sourceLineNo">2576</span>      LOG.debug(<a name="line.2576"></a>
<span class="sourceLineNo">2577</span>          "Abort already in progress. Ignoring the current request with reason: {}", reason);<a name="line.2577"></a>
<span class="sourceLineNo">2578</span>      return;<a name="line.2578"></a>
<span class="sourceLineNo">2579</span>    }<a name="line.2579"></a>
<span class="sourceLineNo">2580</span>    String msg = "***** ABORTING region server " + this + ": " + reason + " *****";<a name="line.2580"></a>
<span class="sourceLineNo">2581</span>    if (cause != null) {<a name="line.2581"></a>
<span class="sourceLineNo">2582</span>      LOG.error(HBaseMarkers.FATAL, msg, cause);<a name="line.2582"></a>
<span class="sourceLineNo">2583</span>    } else {<a name="line.2583"></a>
<span class="sourceLineNo">2584</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.2584"></a>
<span class="sourceLineNo">2585</span>    }<a name="line.2585"></a>
<span class="sourceLineNo">2586</span>    // HBASE-4014: show list of coprocessors that were loaded to help debug<a name="line.2586"></a>
<span class="sourceLineNo">2587</span>    // regionserver crashes.Note that we're implicitly using<a name="line.2587"></a>
<span class="sourceLineNo">2588</span>    // java.util.HashSet's toString() method to print the coprocessor names.<a name="line.2588"></a>
<span class="sourceLineNo">2589</span>    LOG.error(HBaseMarkers.FATAL, "RegionServer abort: loaded coprocessors are: " +<a name="line.2589"></a>
<span class="sourceLineNo">2590</span>        CoprocessorHost.getLoadedCoprocessors());<a name="line.2590"></a>
<span class="sourceLineNo">2591</span>    // Try and dump metrics if abort -- might give clue as to how fatal came about....<a name="line.2591"></a>
<span class="sourceLineNo">2592</span>    try {<a name="line.2592"></a>
<span class="sourceLineNo">2593</span>      LOG.info("Dump of metrics as JSON on abort: " + DumpRegionServerMetrics.dumpMetrics());<a name="line.2593"></a>
<span class="sourceLineNo">2594</span>    } catch (MalformedObjectNameException | IOException e) {<a name="line.2594"></a>
<span class="sourceLineNo">2595</span>      LOG.warn("Failed dumping metrics", e);<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>    // Do our best to report our abort to the master, but this may not work<a name="line.2598"></a>
<span class="sourceLineNo">2599</span>    try {<a name="line.2599"></a>
<span class="sourceLineNo">2600</span>      if (cause != null) {<a name="line.2600"></a>
<span class="sourceLineNo">2601</span>        msg += "\nCause:\n" + Throwables.getStackTraceAsString(cause);<a name="line.2601"></a>
<span class="sourceLineNo">2602</span>      }<a name="line.2602"></a>
<span class="sourceLineNo">2603</span>      // Report to the master but only if we have already registered with the master.<a name="line.2603"></a>
<span class="sourceLineNo">2604</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2604"></a>
<span class="sourceLineNo">2605</span>      if (rss != null &amp;&amp; this.serverName != null) {<a name="line.2605"></a>
<span class="sourceLineNo">2606</span>        ReportRSFatalErrorRequest.Builder builder =<a name="line.2606"></a>
<span class="sourceLineNo">2607</span>          ReportRSFatalErrorRequest.newBuilder();<a name="line.2607"></a>
<span class="sourceLineNo">2608</span>        builder.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.2608"></a>
<span class="sourceLineNo">2609</span>        builder.setErrorMessage(msg);<a name="line.2609"></a>
<span class="sourceLineNo">2610</span>        rss.reportRSFatalError(null, builder.build());<a name="line.2610"></a>
<span class="sourceLineNo">2611</span>      }<a name="line.2611"></a>
<span class="sourceLineNo">2612</span>    } catch (Throwable t) {<a name="line.2612"></a>
<span class="sourceLineNo">2613</span>      LOG.warn("Unable to report fatal error to master", t);<a name="line.2613"></a>
<span class="sourceLineNo">2614</span>    }<a name="line.2614"></a>
<span class="sourceLineNo">2615</span><a name="line.2615"></a>
<span class="sourceLineNo">2616</span>    scheduleAbortTimer();<a name="line.2616"></a>
<span class="sourceLineNo">2617</span>    // shutdown should be run as the internal user<a name="line.2617"></a>
<span class="sourceLineNo">2618</span>    stop(reason, true, null);<a name="line.2618"></a>
<span class="sourceLineNo">2619</span>  }<a name="line.2619"></a>
<span class="sourceLineNo">2620</span><a name="line.2620"></a>
<span class="sourceLineNo">2621</span>  /**<a name="line.2621"></a>
<span class="sourceLineNo">2622</span>   * Sets the abort state if not already set.<a name="line.2622"></a>
<span class="sourceLineNo">2623</span>   * @return True if abortRequested set to True successfully, false if an abort is already in<a name="line.2623"></a>
<span class="sourceLineNo">2624</span>   * progress.<a name="line.2624"></a>
<span class="sourceLineNo">2625</span>   */<a name="line.2625"></a>
<span class="sourceLineNo">2626</span>  protected boolean setAbortRequested() {<a name="line.2626"></a>
<span class="sourceLineNo">2627</span>    return abortRequested.compareAndSet(false, true);<a name="line.2627"></a>
<span class="sourceLineNo">2628</span>  }<a name="line.2628"></a>
<span class="sourceLineNo">2629</span><a name="line.2629"></a>
<span class="sourceLineNo">2630</span>  /**<a name="line.2630"></a>
<span class="sourceLineNo">2631</span>   * @see HRegionServer#abort(String, Throwable)<a name="line.2631"></a>
<span class="sourceLineNo">2632</span>   */<a name="line.2632"></a>
<span class="sourceLineNo">2633</span>  public void abort(String reason) {<a name="line.2633"></a>
<span class="sourceLineNo">2634</span>    abort(reason, null);<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>  @Override<a name="line.2637"></a>
<span class="sourceLineNo">2638</span>  public boolean isAborted() {<a name="line.2638"></a>
<span class="sourceLineNo">2639</span>    return abortRequested.get();<a name="line.2639"></a>
<span class="sourceLineNo">2640</span>  }<a name="line.2640"></a>
<span class="sourceLineNo">2641</span><a name="line.2641"></a>
<span class="sourceLineNo">2642</span>  /*<a name="line.2642"></a>
<span class="sourceLineNo">2643</span>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup<a name="line.2643"></a>
<span class="sourceLineNo">2644</span>   * logs but it does close socket in case want to bring up server on old<a name="line.2644"></a>
<span class="sourceLineNo">2645</span>   * hostname+port immediately.<a name="line.2645"></a>
<span class="sourceLineNo">2646</span>   */<a name="line.2646"></a>
<span class="sourceLineNo">2647</span>  @InterfaceAudience.Private<a name="line.2647"></a>
<span class="sourceLineNo">2648</span>  protected void kill() {<a name="line.2648"></a>
<span class="sourceLineNo">2649</span>    this.killed = true;<a name="line.2649"></a>
<span class="sourceLineNo">2650</span>    abort("Simulated kill");<a name="line.2650"></a>
<span class="sourceLineNo">2651</span>  }<a name="line.2651"></a>
<span class="sourceLineNo">2652</span><a name="line.2652"></a>
<span class="sourceLineNo">2653</span>  // Limits the time spent in the shutdown process.<a name="line.2653"></a>
<span class="sourceLineNo">2654</span>  private void scheduleAbortTimer() {<a name="line.2654"></a>
<span class="sourceLineNo">2655</span>    if (this.abortMonitor == null) {<a name="line.2655"></a>
<span class="sourceLineNo">2656</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2656"></a>
<span class="sourceLineNo">2657</span>      TimerTask abortTimeoutTask = null;<a name="line.2657"></a>
<span class="sourceLineNo">2658</span>      try {<a name="line.2658"></a>
<span class="sourceLineNo">2659</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2659"></a>
<span class="sourceLineNo">2660</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2660"></a>
<span class="sourceLineNo">2661</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2661"></a>
<span class="sourceLineNo">2662</span>        timerTaskCtor.setAccessible(true);<a name="line.2662"></a>
<span class="sourceLineNo">2663</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2663"></a>
<span class="sourceLineNo">2664</span>      } catch (Exception e) {<a name="line.2664"></a>
<span class="sourceLineNo">2665</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2665"></a>
<span class="sourceLineNo">2666</span>      }<a name="line.2666"></a>
<span class="sourceLineNo">2667</span>      if (abortTimeoutTask != null) {<a name="line.2667"></a>
<span class="sourceLineNo">2668</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2668"></a>
<span class="sourceLineNo">2669</span>      }<a name="line.2669"></a>
<span class="sourceLineNo">2670</span>    }<a name="line.2670"></a>
<span class="sourceLineNo">2671</span>  }<a name="line.2671"></a>
<span class="sourceLineNo">2672</span><a name="line.2672"></a>
<span class="sourceLineNo">2673</span>  protected final void shutdownChore(ScheduledChore chore) {<a name="line.2673"></a>
<span class="sourceLineNo">2674</span>    if (chore != null) {<a name="line.2674"></a>
<span class="sourceLineNo">2675</span>      chore.shutdown();<a name="line.2675"></a>
<span class="sourceLineNo">2676</span>    }<a name="line.2676"></a>
<span class="sourceLineNo">2677</span>  }<a name="line.2677"></a>
<span class="sourceLineNo">2678</span>  /**<a name="line.2678"></a>
<span class="sourceLineNo">2679</span>   * Wait on all threads to finish. Presumption is that all closes and stops<a name="line.2679"></a>
<span class="sourceLineNo">2680</span>   * have already been called.<a name="line.2680"></a>
<span class="sourceLineNo">2681</span>   */<a name="line.2681"></a>
<span class="sourceLineNo">2682</span>  protected void stopServiceThreads() {<a name="line.2682"></a>
<span class="sourceLineNo">2683</span>    // clean up the scheduled chores<a name="line.2683"></a>
<span class="sourceLineNo">2684</span>    if (this.choreService != null) {<a name="line.2684"></a>
<span class="sourceLineNo">2685</span>      shutdownChore(nonceManagerChore);<a name="line.2685"></a>
<span class="sourceLineNo">2686</span>      shutdownChore(compactionChecker);<a name="line.2686"></a>
<span class="sourceLineNo">2687</span>      shutdownChore(periodicFlusher);<a name="line.2687"></a>
<span class="sourceLineNo">2688</span>      shutdownChore(healthCheckChore);<a name="line.2688"></a>
<span class="sourceLineNo">2689</span>      shutdownChore(executorStatusChore);<a name="line.2689"></a>
<span class="sourceLineNo">2690</span>      shutdownChore(storefileRefresher);<a name="line.2690"></a>
<span class="sourceLineNo">2691</span>      shutdownChore(fsUtilizationChore);<a name="line.2691"></a>
<span class="sourceLineNo">2692</span>      shutdownChore(slowLogTableOpsChore);<a name="line.2692"></a>
<span class="sourceLineNo">2693</span>      // cancel the remaining scheduled chores (in case we missed out any)<a name="line.2693"></a>
<span class="sourceLineNo">2694</span>      // TODO: cancel will not cleanup the chores, so we need make sure we do not miss any<a name="line.2694"></a>
<span class="sourceLineNo">2695</span>      choreService.shutdown();<a name="line.2695"></a>
<span class="sourceLineNo">2696</span>    }<a name="line.2696"></a>
<span class="sourceLineNo">2697</span><a name="line.2697"></a>
<span class="sourceLineNo">2698</span>    if (this.cacheFlusher != null) {<a name="line.2698"></a>
<span class="sourceLineNo">2699</span>      this.cacheFlusher.join();<a name="line.2699"></a>
<span class="sourceLineNo">2700</span>    }<a name="line.2700"></a>
<span class="sourceLineNo">2701</span><a name="line.2701"></a>
<span class="sourceLineNo">2702</span>    if (this.spanReceiverHost != null) {<a name="line.2702"></a>
<span class="sourceLineNo">2703</span>      this.spanReceiverHost.closeReceivers();<a name="line.2703"></a>
<span class="sourceLineNo">2704</span>    }<a name="line.2704"></a>
<span class="sourceLineNo">2705</span>    if (this.walRoller != null) {<a name="line.2705"></a>
<span class="sourceLineNo">2706</span>      this.walRoller.close();<a name="line.2706"></a>
<span class="sourceLineNo">2707</span>    }<a name="line.2707"></a>
<span class="sourceLineNo">2708</span>    if (this.compactSplitThread != null) {<a name="line.2708"></a>
<span class="sourceLineNo">2709</span>      this.compactSplitThread.join();<a name="line.2709"></a>
<span class="sourceLineNo">2710</span>    }<a name="line.2710"></a>
<span class="sourceLineNo">2711</span>    if (this.executorService != null) {<a name="line.2711"></a>
<span class="sourceLineNo">2712</span>      this.executorService.shutdown();<a name="line.2712"></a>
<span class="sourceLineNo">2713</span>    }<a name="line.2713"></a>
<span class="sourceLineNo">2714</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.2714"></a>
<span class="sourceLineNo">2715</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2715"></a>
<span class="sourceLineNo">2716</span>    } else {<a name="line.2716"></a>
<span class="sourceLineNo">2717</span>      if (this.replicationSourceHandler != null) {<a name="line.2717"></a>
<span class="sourceLineNo">2718</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2718"></a>
<span class="sourceLineNo">2719</span>      }<a name="line.2719"></a>
<span class="sourceLineNo">2720</span>      if (this.replicationSinkHandler != null) {<a name="line.2720"></a>
<span class="sourceLineNo">2721</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2721"></a>
<span class="sourceLineNo">2722</span>      }<a name="line.2722"></a>
<span class="sourceLineNo">2723</span>    }<a name="line.2723"></a>
<span class="sourceLineNo">2724</span>  }<a name="line.2724"></a>
<span class="sourceLineNo">2725</span><a name="line.2725"></a>
<span class="sourceLineNo">2726</span>  /**<a name="line.2726"></a>
<span class="sourceLineNo">2727</span>   * @return Return the object that implements the replication<a name="line.2727"></a>
<span class="sourceLineNo">2728</span>   * source executorService.<a name="line.2728"></a>
<span class="sourceLineNo">2729</span>   */<a name="line.2729"></a>
<span class="sourceLineNo">2730</span>  @Override<a name="line.2730"></a>
<span class="sourceLineNo">2731</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2731"></a>
<span class="sourceLineNo">2732</span>    return replicationSourceHandler;<a name="line.2732"></a>
<span class="sourceLineNo">2733</span>  }<a name="line.2733"></a>
<span class="sourceLineNo">2734</span><a name="line.2734"></a>
<span class="sourceLineNo">2735</span>  /**<a name="line.2735"></a>
<span class="sourceLineNo">2736</span>   * @return Return the object that implements the replication sink executorService.<a name="line.2736"></a>
<span class="sourceLineNo">2737</span>   */<a name="line.2737"></a>
<span class="sourceLineNo">2738</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2738"></a>
<span class="sourceLineNo">2739</span>    return replicationSinkHandler;<a name="line.2739"></a>
<span class="sourceLineNo">2740</span>  }<a name="line.2740"></a>
<span class="sourceLineNo">2741</span><a name="line.2741"></a>
<span class="sourceLineNo">2742</span>  /**<a name="line.2742"></a>
<span class="sourceLineNo">2743</span>   * Get the current master from ZooKeeper and open the RPC connection to it.<a name="line.2743"></a>
<span class="sourceLineNo">2744</span>   * To get a fresh connection, the current rssStub must be null.<a name="line.2744"></a>
<span class="sourceLineNo">2745</span>   * Method will block until a master is available. You can break from this<a name="line.2745"></a>
<span class="sourceLineNo">2746</span>   * block by requesting the server stop.<a name="line.2746"></a>
<span class="sourceLineNo">2747</span>   *<a name="line.2747"></a>
<span class="sourceLineNo">2748</span>   * @return master + port, or null if server has been stopped<a name="line.2748"></a>
<span class="sourceLineNo">2749</span>   */<a name="line.2749"></a>
<span class="sourceLineNo">2750</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2750"></a>
<span class="sourceLineNo">2751</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2751"></a>
<span class="sourceLineNo">2752</span>    return createRegionServerStatusStub(false);<a name="line.2752"></a>
<span class="sourceLineNo">2753</span>  }<a name="line.2753"></a>
<span class="sourceLineNo">2754</span><a name="line.2754"></a>
<span class="sourceLineNo">2755</span>  /**<a name="line.2755"></a>
<span class="sourceLineNo">2756</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2756"></a>
<span class="sourceLineNo">2757</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2757"></a>
<span class="sourceLineNo">2758</span>   * You can break from this block by requesting the server stop.<a name="line.2758"></a>
<span class="sourceLineNo">2759</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2759"></a>
<span class="sourceLineNo">2760</span>   * @return master + port, or null if server has been stopped<a name="line.2760"></a>
<span class="sourceLineNo">2761</span>   */<a name="line.2761"></a>
<span class="sourceLineNo">2762</span>  @InterfaceAudience.Private<a name="line.2762"></a>
<span class="sourceLineNo">2763</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2763"></a>
<span class="sourceLineNo">2764</span>    if (rssStub != null) {<a name="line.2764"></a>
<span class="sourceLineNo">2765</span>      return masterAddressTracker.getMasterAddress();<a name="line.2765"></a>
<span class="sourceLineNo">2766</span>    }<a name="line.2766"></a>
<span class="sourceLineNo">2767</span>    ServerName sn = null;<a name="line.2767"></a>
<span class="sourceLineNo">2768</span>    long previousLogTime = 0;<a name="line.2768"></a>
<span class="sourceLineNo">2769</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2769"></a>
<span class="sourceLineNo">2770</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2770"></a>
<span class="sourceLineNo">2771</span>    boolean interrupted = false;<a name="line.2771"></a>
<span class="sourceLineNo">2772</span>    try {<a name="line.2772"></a>
<span class="sourceLineNo">2773</span>      while (keepLooping()) {<a name="line.2773"></a>
<span class="sourceLineNo">2774</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2774"></a>
<span class="sourceLineNo">2775</span>        if (sn == null) {<a name="line.2775"></a>
<span class="sourceLineNo">2776</span>          if (!keepLooping()) {<a name="line.2776"></a>
<span class="sourceLineNo">2777</span>            // give up with no connection.<a name="line.2777"></a>
<span class="sourceLineNo">2778</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2778"></a>
<span class="sourceLineNo">2779</span>            return null;<a name="line.2779"></a>
<span class="sourceLineNo">2780</span>          }<a name="line.2780"></a>
<span class="sourceLineNo">2781</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2781"></a>
<span class="sourceLineNo">2782</span>            LOG.debug("No master found; retry");<a name="line.2782"></a>
<span class="sourceLineNo">2783</span>            previousLogTime = System.currentTimeMillis();<a name="line.2783"></a>
<span class="sourceLineNo">2784</span>          }<a name="line.2784"></a>
<span class="sourceLineNo">2785</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2785"></a>
<span class="sourceLineNo">2786</span>          if (sleepInterrupted(200)) {<a name="line.2786"></a>
<span class="sourceLineNo">2787</span>            interrupted = true;<a name="line.2787"></a>
<span class="sourceLineNo">2788</span>          }<a name="line.2788"></a>
<span class="sourceLineNo">2789</span>          continue;<a name="line.2789"></a>
<span class="sourceLineNo">2790</span>        }<a name="line.2790"></a>
<span class="sourceLineNo">2791</span><a name="line.2791"></a>
<span class="sourceLineNo">2792</span>        // If we are on the active master, use the shortcut<a name="line.2792"></a>
<span class="sourceLineNo">2793</span>        if (this instanceof HMaster &amp;&amp; sn.equals(getServerName())) {<a name="line.2793"></a>
<span class="sourceLineNo">2794</span>          // Wrap the shortcut in a class providing our version to the calls where it's relevant.<a name="line.2794"></a>
<span class="sourceLineNo">2795</span>          // Normally, RpcServer-based threadlocals do that.<a name="line.2795"></a>
<span class="sourceLineNo">2796</span>          intRssStub = new MasterRpcServicesVersionWrapper(((HMaster)this).getMasterRpcServices());<a name="line.2796"></a>
<span class="sourceLineNo">2797</span>          intLockStub = ((HMaster)this).getMasterRpcServices();<a name="line.2797"></a>
<span class="sourceLineNo">2798</span>          break;<a name="line.2798"></a>
<span class="sourceLineNo">2799</span>        }<a name="line.2799"></a>
<span class="sourceLineNo">2800</span>        try {<a name="line.2800"></a>
<span class="sourceLineNo">2801</span>          BlockingRpcChannel channel =<a name="line.2801"></a>
<span class="sourceLineNo">2802</span>            this.rpcClient.createBlockingRpcChannel(sn, userProvider.getCurrent(),<a name="line.2802"></a>
<span class="sourceLineNo">2803</span>              shortOperationTimeout);<a name="line.2803"></a>
<span class="sourceLineNo">2804</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2804"></a>
<span class="sourceLineNo">2805</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2805"></a>
<span class="sourceLineNo">2806</span>          break;<a name="line.2806"></a>
<span class="sourceLineNo">2807</span>        } catch (IOException e) {<a name="line.2807"></a>
<span class="sourceLineNo">2808</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2808"></a>
<span class="sourceLineNo">2809</span>            e = e instanceof RemoteException ?<a name="line.2809"></a>
<span class="sourceLineNo">2810</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.2810"></a>
<span class="sourceLineNo">2811</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2811"></a>
<span class="sourceLineNo">2812</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2812"></a>
<span class="sourceLineNo">2813</span>            } else {<a name="line.2813"></a>
<span class="sourceLineNo">2814</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2814"></a>
<span class="sourceLineNo">2815</span>            }<a name="line.2815"></a>
<span class="sourceLineNo">2816</span>            previousLogTime = System.currentTimeMillis();<a name="line.2816"></a>
<span class="sourceLineNo">2817</span>          }<a name="line.2817"></a>
<span class="sourceLineNo">2818</span>          if (sleepInterrupted(200)) {<a name="line.2818"></a>
<span class="sourceLineNo">2819</span>            interrupted = true;<a name="line.2819"></a>
<span class="sourceLineNo">2820</span>          }<a name="line.2820"></a>
<span class="sourceLineNo">2821</span>        }<a name="line.2821"></a>
<span class="sourceLineNo">2822</span>      }<a name="line.2822"></a>
<span class="sourceLineNo">2823</span>    } finally {<a name="line.2823"></a>
<span class="sourceLineNo">2824</span>      if (interrupted) {<a name="line.2824"></a>
<span class="sourceLineNo">2825</span>        Thread.currentThread().interrupt();<a name="line.2825"></a>
<span class="sourceLineNo">2826</span>      }<a name="line.2826"></a>
<span class="sourceLineNo">2827</span>    }<a name="line.2827"></a>
<span class="sourceLineNo">2828</span>    this.rssStub = intRssStub;<a name="line.2828"></a>
<span class="sourceLineNo">2829</span>    this.lockStub = intLockStub;<a name="line.2829"></a>
<span class="sourceLineNo">2830</span>    return sn;<a name="line.2830"></a>
<span class="sourceLineNo">2831</span>  }<a name="line.2831"></a>
<span class="sourceLineNo">2832</span><a name="line.2832"></a>
<span class="sourceLineNo">2833</span>  /**<a name="line.2833"></a>
<span class="sourceLineNo">2834</span>   * @return True if we should break loop because cluster is going down or<a name="line.2834"></a>
<span class="sourceLineNo">2835</span>   * this server has been stopped or hdfs has gone bad.<a name="line.2835"></a>
<span class="sourceLineNo">2836</span>   */<a name="line.2836"></a>
<span class="sourceLineNo">2837</span>  private boolean keepLooping() {<a name="line.2837"></a>
<span class="sourceLineNo">2838</span>    return !this.stopped &amp;&amp; isClusterUp();<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>   * Run initialization using parameters passed us by the master.<a name="line.2842"></a>
<span class="sourceLineNo">2843</span>   * @return A Map of key/value configurations we got from the Master else<a name="line.2843"></a>
<span class="sourceLineNo">2844</span>   * null if we failed during report.<a name="line.2844"></a>
<span class="sourceLineNo">2845</span>   * @throws IOException<a name="line.2845"></a>
<span class="sourceLineNo">2846</span>   */<a name="line.2846"></a>
<span class="sourceLineNo">2847</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2847"></a>
<span class="sourceLineNo">2848</span>    if (this.masterless) return RegionServerStartupResponse.getDefaultInstance();<a name="line.2848"></a>
<span class="sourceLineNo">2849</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2849"></a>
<span class="sourceLineNo">2850</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2850"></a>
<span class="sourceLineNo">2851</span>    if (masterServerName == null || rss == null) return null;<a name="line.2851"></a>
<span class="sourceLineNo">2852</span>    RegionServerStartupResponse result = null;<a name="line.2852"></a>
<span class="sourceLineNo">2853</span>    try {<a name="line.2853"></a>
<span class="sourceLineNo">2854</span>      rpcServices.requestCount.reset();<a name="line.2854"></a>
<span class="sourceLineNo">2855</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2855"></a>
<span class="sourceLineNo">2856</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2856"></a>
<span class="sourceLineNo">2857</span>      rpcServices.rpcFullScanRequestCount.reset();<a name="line.2857"></a>
<span class="sourceLineNo">2858</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2858"></a>
<span class="sourceLineNo">2859</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2859"></a>
<span class="sourceLineNo">2860</span>      LOG.info("reportForDuty to master=" + masterServerName + " with port="<a name="line.2860"></a>
<span class="sourceLineNo">2861</span>        + rpcServices.isa.getPort() + ", startcode=" + this.startcode);<a name="line.2861"></a>
<span class="sourceLineNo">2862</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2862"></a>
<span class="sourceLineNo">2863</span>      int port = rpcServices.isa.getPort();<a name="line.2863"></a>
<span class="sourceLineNo">2864</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2864"></a>
<span class="sourceLineNo">2865</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2865"></a>
<span class="sourceLineNo">2866</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2866"></a>
<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
<span class="sourceLineNo">2868</span>      request.setPort(port);<a name="line.2868"></a>
<span class="sourceLineNo">2869</span>      request.setServerStartCode(this.startcode);<a name="line.2869"></a>
<span class="sourceLineNo">2870</span>      request.setServerCurrentTime(now);<a name="line.2870"></a>
<span class="sourceLineNo">2871</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2871"></a>
<span class="sourceLineNo">2872</span>    } catch (ServiceException se) {<a name="line.2872"></a>
<span class="sourceLineNo">2873</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2873"></a>
<span class="sourceLineNo">2874</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2874"></a>
<span class="sourceLineNo">2875</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync",<a name="line.2875"></a>
<span class="sourceLineNo">2876</span>            ioe);<a name="line.2876"></a>
<span class="sourceLineNo">2877</span>        // Re-throw IOE will cause RS to abort<a name="line.2877"></a>
<span class="sourceLineNo">2878</span>        throw ioe;<a name="line.2878"></a>
<span class="sourceLineNo">2879</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2879"></a>
<span class="sourceLineNo">2880</span>        LOG.debug("Master is not running yet");<a name="line.2880"></a>
<span class="sourceLineNo">2881</span>      } else {<a name="line.2881"></a>
<span class="sourceLineNo">2882</span>        LOG.warn("error telling master we are up", se);<a name="line.2882"></a>
<span class="sourceLineNo">2883</span>      }<a name="line.2883"></a>
<span class="sourceLineNo">2884</span>      rssStub = null;<a name="line.2884"></a>
<span class="sourceLineNo">2885</span>    }<a name="line.2885"></a>
<span class="sourceLineNo">2886</span>    return result;<a name="line.2886"></a>
<span class="sourceLineNo">2887</span>  }<a name="line.2887"></a>
<span class="sourceLineNo">2888</span><a name="line.2888"></a>
<span class="sourceLineNo">2889</span>  @Override<a name="line.2889"></a>
<span class="sourceLineNo">2890</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2890"></a>
<span class="sourceLineNo">2891</span>    try {<a name="line.2891"></a>
<span class="sourceLineNo">2892</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2892"></a>
<span class="sourceLineNo">2893</span>          RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2893"></a>
<span class="sourceLineNo">2894</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2894"></a>
<span class="sourceLineNo">2895</span>      if (rss == null) { // Try to connect one more time<a name="line.2895"></a>
<span class="sourceLineNo">2896</span>        createRegionServerStatusStub();<a name="line.2896"></a>
<span class="sourceLineNo">2897</span>        rss = rssStub;<a name="line.2897"></a>
<span class="sourceLineNo">2898</span>        if (rss == null) {<a name="line.2898"></a>
<span class="sourceLineNo">2899</span>          // Still no luck, we tried<a name="line.2899"></a>
<span class="sourceLineNo">2900</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2900"></a>
<span class="sourceLineNo">2901</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2901"></a>
<span class="sourceLineNo">2902</span>              .build();<a name="line.2902"></a>
<span class="sourceLineNo">2903</span>        }<a name="line.2903"></a>
<span class="sourceLineNo">2904</span>      }<a name="line.2904"></a>
<span class="sourceLineNo">2905</span>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2905"></a>
<span class="sourceLineNo">2906</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2906"></a>
<span class="sourceLineNo">2907</span>          .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2907"></a>
<span class="sourceLineNo">2908</span>          .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2908"></a>
<span class="sourceLineNo">2909</span>    } catch (ServiceException e) {<a name="line.2909"></a>
<span class="sourceLineNo">2910</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2910"></a>
<span class="sourceLineNo">2911</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2911"></a>
<span class="sourceLineNo">2912</span>          .build();<a name="line.2912"></a>
<span class="sourceLineNo">2913</span>    }<a name="line.2913"></a>
<span class="sourceLineNo">2914</span>  }<a name="line.2914"></a>
<span class="sourceLineNo">2915</span><a name="line.2915"></a>
<span class="sourceLineNo">2916</span>  /**<a name="line.2916"></a>
<span class="sourceLineNo">2917</span>   * Close meta region if we carry it<a name="line.2917"></a>
<span class="sourceLineNo">2918</span>   * @param abort Whether we're running an abort.<a name="line.2918"></a>
<span class="sourceLineNo">2919</span>   */<a name="line.2919"></a>
<span class="sourceLineNo">2920</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2920"></a>
<span class="sourceLineNo">2921</span>    HRegion meta = null;<a name="line.2921"></a>
<span class="sourceLineNo">2922</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2922"></a>
<span class="sourceLineNo">2923</span>    try {<a name="line.2923"></a>
<span class="sourceLineNo">2924</span>      for (Map.Entry&lt;String, HRegion&gt; e: onlineRegions.entrySet()) {<a name="line.2924"></a>
<span class="sourceLineNo">2925</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2925"></a>
<span class="sourceLineNo">2926</span>        if (hri.isMetaRegion()) {<a name="line.2926"></a>
<span class="sourceLineNo">2927</span>          meta = e.getValue();<a name="line.2927"></a>
<span class="sourceLineNo">2928</span>        }<a name="line.2928"></a>
<span class="sourceLineNo">2929</span>        if (meta != null) break;<a name="line.2929"></a>
<span class="sourceLineNo">2930</span>      }<a name="line.2930"></a>
<span class="sourceLineNo">2931</span>    } finally {<a name="line.2931"></a>
<span class="sourceLineNo">2932</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2932"></a>
<span class="sourceLineNo">2933</span>    }<a name="line.2933"></a>
<span class="sourceLineNo">2934</span>    if (meta != null) closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2934"></a>
<span class="sourceLineNo">2935</span>  }<a name="line.2935"></a>
<span class="sourceLineNo">2936</span><a name="line.2936"></a>
<span class="sourceLineNo">2937</span>  /**<a name="line.2937"></a>
<span class="sourceLineNo">2938</span>   * Schedule closes on all user regions.<a name="line.2938"></a>
<span class="sourceLineNo">2939</span>   * Should be safe calling multiple times because it wont' close regions<a name="line.2939"></a>
<span class="sourceLineNo">2940</span>   * that are already closed or that are closing.<a name="line.2940"></a>
<span class="sourceLineNo">2941</span>   * @param abort Whether we're running an abort.<a name="line.2941"></a>
<span class="sourceLineNo">2942</span>   */<a name="line.2942"></a>
<span class="sourceLineNo">2943</span>  private void closeUserRegions(final boolean abort) {<a name="line.2943"></a>
<span class="sourceLineNo">2944</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2944"></a>
<span class="sourceLineNo">2945</span>    try {<a name="line.2945"></a>
<span class="sourceLineNo">2946</span>      for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.2946"></a>
<span class="sourceLineNo">2947</span>        HRegion r = e.getValue();<a name="line.2947"></a>
<span class="sourceLineNo">2948</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2948"></a>
<span class="sourceLineNo">2949</span>          // Don't update zk with this close transition; pass false.<a name="line.2949"></a>
<span class="sourceLineNo">2950</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<a name="line.2950"></a>
<span class="sourceLineNo">2951</span>        }<a name="line.2951"></a>
<span class="sourceLineNo">2952</span>      }<a name="line.2952"></a>
<span class="sourceLineNo">2953</span>    } finally {<a name="line.2953"></a>
<span class="sourceLineNo">2954</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2954"></a>
<span class="sourceLineNo">2955</span>    }<a name="line.2955"></a>
<span class="sourceLineNo">2956</span>  }<a name="line.2956"></a>
<span class="sourceLineNo">2957</span><a name="line.2957"></a>
<span class="sourceLineNo">2958</span>  /** @return the info server */<a name="line.2958"></a>
<span class="sourceLineNo">2959</span>  public InfoServer getInfoServer() {<a name="line.2959"></a>
<span class="sourceLineNo">2960</span>    return infoServer;<a name="line.2960"></a>
<span class="sourceLineNo">2961</span>  }<a name="line.2961"></a>
<span class="sourceLineNo">2962</span><a name="line.2962"></a>
<span class="sourceLineNo">2963</span>  /**<a name="line.2963"></a>
<span class="sourceLineNo">2964</span>   * @return true if a stop has been requested.<a name="line.2964"></a>
<span class="sourceLineNo">2965</span>   */<a name="line.2965"></a>
<span class="sourceLineNo">2966</span>  @Override<a name="line.2966"></a>
<span class="sourceLineNo">2967</span>  public boolean isStopped() {<a name="line.2967"></a>
<span class="sourceLineNo">2968</span>    return this.stopped;<a name="line.2968"></a>
<span class="sourceLineNo">2969</span>  }<a name="line.2969"></a>
<span class="sourceLineNo">2970</span><a name="line.2970"></a>
<span class="sourceLineNo">2971</span>  @Override<a name="line.2971"></a>
<span class="sourceLineNo">2972</span>  public boolean isStopping() {<a name="line.2972"></a>
<span class="sourceLineNo">2973</span>    return this.stopping;<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>  @Override<a name="line.2976"></a>
<span class="sourceLineNo">2977</span>  public Configuration getConfiguration() {<a name="line.2977"></a>
<span class="sourceLineNo">2978</span>    return conf;<a name="line.2978"></a>
<span class="sourceLineNo">2979</span>  }<a name="line.2979"></a>
<span class="sourceLineNo">2980</span><a name="line.2980"></a>
<span class="sourceLineNo">2981</span>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2981"></a>
<span class="sourceLineNo">2982</span>    return this.onlineRegions;<a name="line.2982"></a>
<span class="sourceLineNo">2983</span>  }<a name="line.2983"></a>
<span class="sourceLineNo">2984</span><a name="line.2984"></a>
<span class="sourceLineNo">2985</span>  public int getNumberOfOnlineRegions() {<a name="line.2985"></a>
<span class="sourceLineNo">2986</span>    return this.onlineRegions.size();<a name="line.2986"></a>
<span class="sourceLineNo">2987</span>  }<a name="line.2987"></a>
<span class="sourceLineNo">2988</span><a name="line.2988"></a>
<span class="sourceLineNo">2989</span>  /**<a name="line.2989"></a>
<span class="sourceLineNo">2990</span>   * For tests, web ui and metrics.<a name="line.2990"></a>
<span class="sourceLineNo">2991</span>   * This method will only work if HRegionServer is in the same JVM as client;<a name="line.2991"></a>
<span class="sourceLineNo">2992</span>   * HRegion cannot be serialized to cross an rpc.<a name="line.2992"></a>
<span class="sourceLineNo">2993</span>   */<a name="line.2993"></a>
<span class="sourceLineNo">2994</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.2994"></a>
<span class="sourceLineNo">2995</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.2995"></a>
<span class="sourceLineNo">2996</span>    return Collections.unmodifiableCollection(regions);<a name="line.2996"></a>
<span class="sourceLineNo">2997</span>  }<a name="line.2997"></a>
<span class="sourceLineNo">2998</span><a name="line.2998"></a>
<span class="sourceLineNo">2999</span>  @Override<a name="line.2999"></a>
<span class="sourceLineNo">3000</span>  public void addRegion(HRegion region) {<a name="line.3000"></a>
<span class="sourceLineNo">3001</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.3001"></a>
<span class="sourceLineNo">3002</span>    configurationManager.registerObserver(region);<a name="line.3002"></a>
<span class="sourceLineNo">3003</span>  }<a name="line.3003"></a>
<span class="sourceLineNo">3004</span><a name="line.3004"></a>
<span class="sourceLineNo">3005</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.3005"></a>
<span class="sourceLineNo">3006</span>      long size) {<a name="line.3006"></a>
<span class="sourceLineNo">3007</span>    if (!sortedRegions.containsKey(size)) {<a name="line.3007"></a>
<span class="sourceLineNo">3008</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.3008"></a>
<span class="sourceLineNo">3009</span>    }<a name="line.3009"></a>
<span class="sourceLineNo">3010</span>    sortedRegions.get(size).add(region);<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>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.3013"></a>
<span class="sourceLineNo">3014</span>   *   the biggest.<a name="line.3014"></a>
<span class="sourceLineNo">3015</span>   */<a name="line.3015"></a>
<span class="sourceLineNo">3016</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.3016"></a>
<span class="sourceLineNo">3017</span>    // we'll sort the regions in reverse<a name="line.3017"></a>
<span class="sourceLineNo">3018</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.3018"></a>
<span class="sourceLineNo">3019</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.3019"></a>
<span class="sourceLineNo">3020</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.3020"></a>
<span class="sourceLineNo">3021</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.3021"></a>
<span class="sourceLineNo">3022</span>    }<a name="line.3022"></a>
<span class="sourceLineNo">3023</span>    return sortedRegions;<a name="line.3023"></a>
<span class="sourceLineNo">3024</span>  }<a name="line.3024"></a>
<span class="sourceLineNo">3025</span><a name="line.3025"></a>
<span class="sourceLineNo">3026</span>  /**<a name="line.3026"></a>
<span class="sourceLineNo">3027</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.3027"></a>
<span class="sourceLineNo">3028</span>   *   biggest.<a name="line.3028"></a>
<span class="sourceLineNo">3029</span>   */<a name="line.3029"></a>
<span class="sourceLineNo">3030</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.3030"></a>
<span class="sourceLineNo">3031</span>    // we'll sort the regions in reverse<a name="line.3031"></a>
<span class="sourceLineNo">3032</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.3032"></a>
<span class="sourceLineNo">3033</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.3033"></a>
<span class="sourceLineNo">3034</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.3034"></a>
<span class="sourceLineNo">3035</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.3035"></a>
<span class="sourceLineNo">3036</span>    }<a name="line.3036"></a>
<span class="sourceLineNo">3037</span>    return sortedRegions;<a name="line.3037"></a>
<span class="sourceLineNo">3038</span>  }<a name="line.3038"></a>
<span class="sourceLineNo">3039</span><a name="line.3039"></a>
<span class="sourceLineNo">3040</span>  /**<a name="line.3040"></a>
<span class="sourceLineNo">3041</span>   * @return time stamp in millis of when this region server was started<a name="line.3041"></a>
<span class="sourceLineNo">3042</span>   */<a name="line.3042"></a>
<span class="sourceLineNo">3043</span>  public long getStartcode() {<a name="line.3043"></a>
<span class="sourceLineNo">3044</span>    return this.startcode;<a name="line.3044"></a>
<span class="sourceLineNo">3045</span>  }<a name="line.3045"></a>
<span class="sourceLineNo">3046</span><a name="line.3046"></a>
<span class="sourceLineNo">3047</span>  /** @return reference to FlushRequester */<a name="line.3047"></a>
<span class="sourceLineNo">3048</span>  @Override<a name="line.3048"></a>
<span class="sourceLineNo">3049</span>  public FlushRequester getFlushRequester() {<a name="line.3049"></a>
<span class="sourceLineNo">3050</span>    return this.cacheFlusher;<a name="line.3050"></a>
<span class="sourceLineNo">3051</span>  }<a name="line.3051"></a>
<span class="sourceLineNo">3052</span><a name="line.3052"></a>
<span class="sourceLineNo">3053</span>  @Override<a name="line.3053"></a>
<span class="sourceLineNo">3054</span>  public CompactionRequester getCompactionRequestor() {<a name="line.3054"></a>
<span class="sourceLineNo">3055</span>    return this.compactSplitThread;<a name="line.3055"></a>
<span class="sourceLineNo">3056</span>  }<a name="line.3056"></a>
<span class="sourceLineNo">3057</span><a name="line.3057"></a>
<span class="sourceLineNo">3058</span>  @Override<a name="line.3058"></a>
<span class="sourceLineNo">3059</span>  public LeaseManager getLeaseManager() {<a name="line.3059"></a>
<span class="sourceLineNo">3060</span>    return leaseManager;<a name="line.3060"></a>
<span class="sourceLineNo">3061</span>  }<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>   * @return Return the rootDir.<a name="line.3064"></a>
<span class="sourceLineNo">3065</span>   */<a name="line.3065"></a>
<span class="sourceLineNo">3066</span>  protected Path getDataRootDir() {<a name="line.3066"></a>
<span class="sourceLineNo">3067</span>    return dataRootDir;<a name="line.3067"></a>
<span class="sourceLineNo">3068</span>  }<a name="line.3068"></a>
<span class="sourceLineNo">3069</span><a name="line.3069"></a>
<span class="sourceLineNo">3070</span>  @Override<a name="line.3070"></a>
<span class="sourceLineNo">3071</span>  public FileSystem getFileSystem() {<a name="line.3071"></a>
<span class="sourceLineNo">3072</span>    return dataFs;<a name="line.3072"></a>
<span class="sourceLineNo">3073</span>  }<a name="line.3073"></a>
<span class="sourceLineNo">3074</span><a name="line.3074"></a>
<span class="sourceLineNo">3075</span>  /**<a name="line.3075"></a>
<span class="sourceLineNo">3076</span>   * @return {@code true} when the data file system is available, {@code false} otherwise.<a name="line.3076"></a>
<span class="sourceLineNo">3077</span>   */<a name="line.3077"></a>
<span class="sourceLineNo">3078</span>  boolean isDataFileSystemOk() {<a name="line.3078"></a>
<span class="sourceLineNo">3079</span>    return this.dataFsOk;<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>  /**<a name="line.3082"></a>
<span class="sourceLineNo">3083</span>   * @return Return the walRootDir.<a name="line.3083"></a>
<span class="sourceLineNo">3084</span>   */<a name="line.3084"></a>
<span class="sourceLineNo">3085</span>  public Path getWALRootDir() {<a name="line.3085"></a>
<span class="sourceLineNo">3086</span>    return walRootDir;<a name="line.3086"></a>
<span class="sourceLineNo">3087</span>  }<a name="line.3087"></a>
<span class="sourceLineNo">3088</span><a name="line.3088"></a>
<span class="sourceLineNo">3089</span>  /**<a name="line.3089"></a>
<span class="sourceLineNo">3090</span>   * @return Return the walFs.<a name="line.3090"></a>
<span class="sourceLineNo">3091</span>   */<a name="line.3091"></a>
<span class="sourceLineNo">3092</span>  public FileSystem getWALFileSystem() {<a name="line.3092"></a>
<span class="sourceLineNo">3093</span>    return walFs;<a name="line.3093"></a>
<span class="sourceLineNo">3094</span>  }<a name="line.3094"></a>
<span class="sourceLineNo">3095</span><a name="line.3095"></a>
<span class="sourceLineNo">3096</span>  @Override<a name="line.3096"></a>
<span class="sourceLineNo">3097</span>  public String toString() {<a name="line.3097"></a>
<span class="sourceLineNo">3098</span>    return getServerName().toString();<a name="line.3098"></a>
<span class="sourceLineNo">3099</span>  }<a name="line.3099"></a>
<span class="sourceLineNo">3100</span><a name="line.3100"></a>
<span class="sourceLineNo">3101</span>  @Override<a name="line.3101"></a>
<span class="sourceLineNo">3102</span>  public ZKWatcher getZooKeeper() {<a name="line.3102"></a>
<span class="sourceLineNo">3103</span>    return zooKeeper;<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 CoordinatedStateManager getCoordinatedStateManager() {<a name="line.3107"></a>
<span class="sourceLineNo">3108</span>    return csm;<a name="line.3108"></a>
<span class="sourceLineNo">3109</span>  }<a name="line.3109"></a>
<span class="sourceLineNo">3110</span><a name="line.3110"></a>
<span class="sourceLineNo">3111</span>  @Override<a name="line.3111"></a>
<span class="sourceLineNo">3112</span>  public ServerName getServerName() {<a name="line.3112"></a>
<span class="sourceLineNo">3113</span>    return serverName;<a name="line.3113"></a>
<span class="sourceLineNo">3114</span>  }<a name="line.3114"></a>
<span class="sourceLineNo">3115</span><a name="line.3115"></a>
<span class="sourceLineNo">3116</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.3116"></a>
<span class="sourceLineNo">3117</span>    return this.rsHost;<a name="line.3117"></a>
<span class="sourceLineNo">3118</span>  }<a name="line.3118"></a>
<span class="sourceLineNo">3119</span><a name="line.3119"></a>
<span class="sourceLineNo">3120</span>  @Override<a name="line.3120"></a>
<span class="sourceLineNo">3121</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.3121"></a>
<span class="sourceLineNo">3122</span>    return this.regionsInTransitionInRS;<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>  @Override<a name="line.3125"></a>
<span class="sourceLineNo">3126</span>  public ExecutorService getExecutorService() {<a name="line.3126"></a>
<span class="sourceLineNo">3127</span>    return executorService;<a name="line.3127"></a>
<span class="sourceLineNo">3128</span>  }<a name="line.3128"></a>
<span class="sourceLineNo">3129</span><a name="line.3129"></a>
<span class="sourceLineNo">3130</span>  @Override<a name="line.3130"></a>
<span class="sourceLineNo">3131</span>  public ChoreService getChoreService() {<a name="line.3131"></a>
<span class="sourceLineNo">3132</span>    return choreService;<a name="line.3132"></a>
<span class="sourceLineNo">3133</span>  }<a name="line.3133"></a>
<span class="sourceLineNo">3134</span><a name="line.3134"></a>
<span class="sourceLineNo">3135</span>  @Override<a name="line.3135"></a>
<span class="sourceLineNo">3136</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.3136"></a>
<span class="sourceLineNo">3137</span>    return rsQuotaManager;<a name="line.3137"></a>
<span class="sourceLineNo">3138</span>  }<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>  // Main program and support routines<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>   * Load the replication executorService objects, if any<a name="line.3144"></a>
<span class="sourceLineNo">3145</span>   */<a name="line.3145"></a>
<span class="sourceLineNo">3146</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.3146"></a>
<span class="sourceLineNo">3147</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALFactory walFactory) throws IOException {<a name="line.3147"></a>
<span class="sourceLineNo">3148</span>    // read in the name of the source replication class from the config file.<a name="line.3148"></a>
<span class="sourceLineNo">3149</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.3149"></a>
<span class="sourceLineNo">3150</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3150"></a>
<span class="sourceLineNo">3151</span><a name="line.3151"></a>
<span class="sourceLineNo">3152</span>    // read in the name of the sink replication class from the config file.<a name="line.3152"></a>
<span class="sourceLineNo">3153</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.3153"></a>
<span class="sourceLineNo">3154</span>      HConstants.REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT);<a name="line.3154"></a>
<span class="sourceLineNo">3155</span><a name="line.3155"></a>
<span class="sourceLineNo">3156</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.3156"></a>
<span class="sourceLineNo">3157</span>    // only one object.<a name="line.3157"></a>
<span class="sourceLineNo">3158</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.3158"></a>
<span class="sourceLineNo">3159</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3159"></a>
<span class="sourceLineNo">3160</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.3160"></a>
<span class="sourceLineNo">3161</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.3161"></a>
<span class="sourceLineNo">3162</span>      server.sameReplicationSourceAndSink = true;<a name="line.3162"></a>
<span class="sourceLineNo">3163</span>    } else {<a name="line.3163"></a>
<span class="sourceLineNo">3164</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3164"></a>
<span class="sourceLineNo">3165</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.3165"></a>
<span class="sourceLineNo">3166</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.3166"></a>
<span class="sourceLineNo">3167</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.3167"></a>
<span class="sourceLineNo">3168</span>      server.sameReplicationSourceAndSink = false;<a name="line.3168"></a>
<span class="sourceLineNo">3169</span>    }<a name="line.3169"></a>
<span class="sourceLineNo">3170</span>  }<a name="line.3170"></a>
<span class="sourceLineNo">3171</span><a name="line.3171"></a>
<span class="sourceLineNo">3172</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.3172"></a>
<span class="sourceLineNo">3173</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.3173"></a>
<span class="sourceLineNo">3174</span>      Path oldLogDir, WALFactory walFactory) throws IOException {<a name="line.3174"></a>
<span class="sourceLineNo">3175</span>    final Class&lt;? extends T&gt; clazz;<a name="line.3175"></a>
<span class="sourceLineNo">3176</span>    try {<a name="line.3176"></a>
<span class="sourceLineNo">3177</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.3177"></a>
<span class="sourceLineNo">3178</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.3178"></a>
<span class="sourceLineNo">3179</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.3179"></a>
<span class="sourceLineNo">3180</span>      throw new IOException("Could not find class for " + classname);<a name="line.3180"></a>
<span class="sourceLineNo">3181</span>    }<a name="line.3181"></a>
<span class="sourceLineNo">3182</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.3182"></a>
<span class="sourceLineNo">3183</span>    service.initialize(server, walFs, logDir, oldLogDir, walFactory);<a name="line.3183"></a>
<span class="sourceLineNo">3184</span>    return service;<a name="line.3184"></a>
<span class="sourceLineNo">3185</span>  }<a name="line.3185"></a>
<span class="sourceLineNo">3186</span><a name="line.3186"></a>
<span class="sourceLineNo">3187</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus(){<a name="line.3187"></a>
<span class="sourceLineNo">3188</span>    Map&lt;String, ReplicationStatus&gt; walGroupsReplicationStatus = new TreeMap&lt;&gt;();<a name="line.3188"></a>
<span class="sourceLineNo">3189</span>    if(!this.isOnline()){<a name="line.3189"></a>
<span class="sourceLineNo">3190</span>      return walGroupsReplicationStatus;<a name="line.3190"></a>
<span class="sourceLineNo">3191</span>    }<a name="line.3191"></a>
<span class="sourceLineNo">3192</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.3192"></a>
<span class="sourceLineNo">3193</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getSources());<a name="line.3193"></a>
<span class="sourceLineNo">3194</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getOldSources());<a name="line.3194"></a>
<span class="sourceLineNo">3195</span>    for(ReplicationSourceInterface source: allSources){<a name="line.3195"></a>
<span class="sourceLineNo">3196</span>      walGroupsReplicationStatus.putAll(source.getWalGroupStatus());<a name="line.3196"></a>
<span class="sourceLineNo">3197</span>    }<a name="line.3197"></a>
<span class="sourceLineNo">3198</span>    return walGroupsReplicationStatus;<a name="line.3198"></a>
<span class="sourceLineNo">3199</span>  }<a name="line.3199"></a>
<span class="sourceLineNo">3200</span><a name="line.3200"></a>
<span class="sourceLineNo">3201</span>  /**<a name="line.3201"></a>
<span class="sourceLineNo">3202</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.3202"></a>
<span class="sourceLineNo">3203</span>   */<a name="line.3203"></a>
<span class="sourceLineNo">3204</span>  static HRegionServer constructRegionServer(<a name="line.3204"></a>
<span class="sourceLineNo">3205</span>      final Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.3205"></a>
<span class="sourceLineNo">3206</span>      final Configuration conf<a name="line.3206"></a>
<span class="sourceLineNo">3207</span>  ) {<a name="line.3207"></a>
<span class="sourceLineNo">3208</span>    try {<a name="line.3208"></a>
<span class="sourceLineNo">3209</span>      Constructor&lt;? extends HRegionServer&gt; c =<a name="line.3209"></a>
<span class="sourceLineNo">3210</span>          regionServerClass.getConstructor(Configuration.class);<a name="line.3210"></a>
<span class="sourceLineNo">3211</span>      return c.newInstance(conf);<a name="line.3211"></a>
<span class="sourceLineNo">3212</span>    } catch (Exception e) {<a name="line.3212"></a>
<span class="sourceLineNo">3213</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3213"></a>
<span class="sourceLineNo">3214</span>          + regionServerClass.toString(), e);<a name="line.3214"></a>
<span class="sourceLineNo">3215</span>    }<a name="line.3215"></a>
<span class="sourceLineNo">3216</span>  }<a name="line.3216"></a>
<span class="sourceLineNo">3217</span><a name="line.3217"></a>
<span class="sourceLineNo">3218</span>  /**<a name="line.3218"></a>
<span class="sourceLineNo">3219</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3219"></a>
<span class="sourceLineNo">3220</span>   */<a name="line.3220"></a>
<span class="sourceLineNo">3221</span>  public static void main(String[] args) {<a name="line.3221"></a>
<span class="sourceLineNo">3222</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3222"></a>
<span class="sourceLineNo">3223</span>    VersionInfo.logVersion();<a name="line.3223"></a>
<span class="sourceLineNo">3224</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3224"></a>
<span class="sourceLineNo">3225</span>    @SuppressWarnings("unchecked")<a name="line.3225"></a>
<span class="sourceLineNo">3226</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3226"></a>
<span class="sourceLineNo">3227</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3227"></a>
<span class="sourceLineNo">3228</span><a name="line.3228"></a>
<span class="sourceLineNo">3229</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3229"></a>
<span class="sourceLineNo">3230</span>  }<a name="line.3230"></a>
<span class="sourceLineNo">3231</span><a name="line.3231"></a>
<span class="sourceLineNo">3232</span>  /**<a name="line.3232"></a>
<span class="sourceLineNo">3233</span>   * Gets the online regions of the specified table.<a name="line.3233"></a>
<span class="sourceLineNo">3234</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3234"></a>
<span class="sourceLineNo">3235</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3235"></a>
<span class="sourceLineNo">3236</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3236"></a>
<span class="sourceLineNo">3237</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3237"></a>
<span class="sourceLineNo">3238</span>   * all the ONLINE regions in the table.<a name="line.3238"></a>
<span class="sourceLineNo">3239</span>   * @param tableName table to limit the scope of the query<a name="line.3239"></a>
<span class="sourceLineNo">3240</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3240"></a>
<span class="sourceLineNo">3241</span>   */<a name="line.3241"></a>
<span class="sourceLineNo">3242</span>  @Override<a name="line.3242"></a>
<span class="sourceLineNo">3243</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3243"></a>
<span class="sourceLineNo">3244</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3244"></a>
<span class="sourceLineNo">3245</span>     synchronized (this.onlineRegions) {<a name="line.3245"></a>
<span class="sourceLineNo">3246</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3246"></a>
<span class="sourceLineNo">3247</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3247"></a>
<span class="sourceLineNo">3248</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3248"></a>
<span class="sourceLineNo">3249</span>           tableRegions.add(region);<a name="line.3249"></a>
<span class="sourceLineNo">3250</span>         }<a name="line.3250"></a>
<span class="sourceLineNo">3251</span>       }<a name="line.3251"></a>
<span class="sourceLineNo">3252</span>     }<a name="line.3252"></a>
<span class="sourceLineNo">3253</span>     return tableRegions;<a name="line.3253"></a>
<span class="sourceLineNo">3254</span>   }<a name="line.3254"></a>
<span class="sourceLineNo">3255</span><a name="line.3255"></a>
<span class="sourceLineNo">3256</span>  @Override<a name="line.3256"></a>
<span class="sourceLineNo">3257</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3257"></a>
<span class="sourceLineNo">3258</span>    List&lt;HRegion&gt; allRegions;<a name="line.3258"></a>
<span class="sourceLineNo">3259</span>    synchronized (this.onlineRegions) {<a name="line.3259"></a>
<span class="sourceLineNo">3260</span>      // Return a clone copy of the onlineRegions<a name="line.3260"></a>
<span class="sourceLineNo">3261</span>      allRegions = new ArrayList&lt;&gt;(onlineRegions.values());<a name="line.3261"></a>
<span class="sourceLineNo">3262</span>    }<a name="line.3262"></a>
<span class="sourceLineNo">3263</span>    return allRegions;<a name="line.3263"></a>
<span class="sourceLineNo">3264</span>  }<a name="line.3264"></a>
<span class="sourceLineNo">3265</span><a name="line.3265"></a>
<span class="sourceLineNo">3266</span>  /**<a name="line.3266"></a>
<span class="sourceLineNo">3267</span>   * Gets the online tables in this RS.<a name="line.3267"></a>
<span class="sourceLineNo">3268</span>   * This method looks at the in-memory onlineRegions.<a name="line.3268"></a>
<span class="sourceLineNo">3269</span>   * @return all the online tables in this RS<a name="line.3269"></a>
<span class="sourceLineNo">3270</span>   */<a name="line.3270"></a>
<span class="sourceLineNo">3271</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3271"></a>
<span class="sourceLineNo">3272</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3272"></a>
<span class="sourceLineNo">3273</span>    synchronized (this.onlineRegions) {<a name="line.3273"></a>
<span class="sourceLineNo">3274</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3274"></a>
<span class="sourceLineNo">3275</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3275"></a>
<span class="sourceLineNo">3276</span>      }<a name="line.3276"></a>
<span class="sourceLineNo">3277</span>    }<a name="line.3277"></a>
<span class="sourceLineNo">3278</span>    return tables;<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>  public String[] getRegionServerCoprocessors() {<a name="line.3281"></a>
<span class="sourceLineNo">3282</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3282"></a>
<span class="sourceLineNo">3283</span>    try {<a name="line.3283"></a>
<span class="sourceLineNo">3284</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3284"></a>
<span class="sourceLineNo">3285</span>    } catch (IOException exception) {<a name="line.3285"></a>
<span class="sourceLineNo">3286</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3286"></a>
<span class="sourceLineNo">3287</span>          "skipping.");<a name="line.3287"></a>
<span class="sourceLineNo">3288</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3288"></a>
<span class="sourceLineNo">3289</span>    }<a name="line.3289"></a>
<span class="sourceLineNo">3290</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3290"></a>
<span class="sourceLineNo">3291</span>    for (HRegion region: regions) {<a name="line.3291"></a>
<span class="sourceLineNo">3292</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3292"></a>
<span class="sourceLineNo">3293</span>      try {<a name="line.3293"></a>
<span class="sourceLineNo">3294</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3294"></a>
<span class="sourceLineNo">3295</span>      } catch (IOException exception) {<a name="line.3295"></a>
<span class="sourceLineNo">3296</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3296"></a>
<span class="sourceLineNo">3297</span>            "; skipping.");<a name="line.3297"></a>
<span class="sourceLineNo">3298</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3298"></a>
<span class="sourceLineNo">3299</span>      }<a name="line.3299"></a>
<span class="sourceLineNo">3300</span>    }<a name="line.3300"></a>
<span class="sourceLineNo">3301</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3301"></a>
<span class="sourceLineNo">3302</span>    return coprocessors.toArray(new String[0]);<a name="line.3302"></a>
<span class="sourceLineNo">3303</span>  }<a name="line.3303"></a>
<span class="sourceLineNo">3304</span><a name="line.3304"></a>
<span class="sourceLineNo">3305</span>  /**<a name="line.3305"></a>
<span class="sourceLineNo">3306</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3306"></a>
<span class="sourceLineNo">3307</span>   * @param region Region to close<a name="line.3307"></a>
<span class="sourceLineNo">3308</span>   */<a name="line.3308"></a>
<span class="sourceLineNo">3309</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3309"></a>
<span class="sourceLineNo">3310</span>    try {<a name="line.3310"></a>
<span class="sourceLineNo">3311</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3311"></a>
<span class="sourceLineNo">3312</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3312"></a>
<span class="sourceLineNo">3313</span>            " - ignoring and continuing");<a name="line.3313"></a>
<span class="sourceLineNo">3314</span>      }<a name="line.3314"></a>
<span class="sourceLineNo">3315</span>    } catch (IOException e) {<a name="line.3315"></a>
<span class="sourceLineNo">3316</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3316"></a>
<span class="sourceLineNo">3317</span>          " - ignoring and continuing", e);<a name="line.3317"></a>
<span class="sourceLineNo">3318</span>    }<a name="line.3318"></a>
<span class="sourceLineNo">3319</span>  }<a name="line.3319"></a>
<span class="sourceLineNo">3320</span><a name="line.3320"></a>
<span class="sourceLineNo">3321</span>  /**<a name="line.3321"></a>
<span class="sourceLineNo">3322</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3322"></a>
<span class="sourceLineNo">3323</span>   * when stopping. If called from the master, the region will update the status.<a name="line.3323"></a>
<span class="sourceLineNo">3324</span>   *<a name="line.3324"></a>
<span class="sourceLineNo">3325</span>   * &lt;p&gt;<a name="line.3325"></a>
<span class="sourceLineNo">3326</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3326"></a>
<span class="sourceLineNo">3327</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3327"></a>
<span class="sourceLineNo">3328</span>   * &lt;/p&gt;<a name="line.3328"></a>
<span class="sourceLineNo">3329</span><a name="line.3329"></a>
<span class="sourceLineNo">3330</span>   * &lt;p&gt;<a name="line.3330"></a>
<span class="sourceLineNo">3331</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3331"></a>
<span class="sourceLineNo">3332</span>   * &lt;/p&gt;<a name="line.3332"></a>
<span class="sourceLineNo">3333</span>   *<a name="line.3333"></a>
<span class="sourceLineNo">3334</span>   * @param encodedName Region to close<a name="line.3334"></a>
<span class="sourceLineNo">3335</span>   * @param abort True if we are aborting<a name="line.3335"></a>
<span class="sourceLineNo">3336</span>   * @param destination Where the Region is being moved too... maybe null if unknown.<a name="line.3336"></a>
<span class="sourceLineNo">3337</span>   * @return True if closed a region.<a name="line.3337"></a>
<span class="sourceLineNo">3338</span>   * @throws NotServingRegionException if the region is not online<a name="line.3338"></a>
<span class="sourceLineNo">3339</span>   */<a name="line.3339"></a>
<span class="sourceLineNo">3340</span>  protected boolean closeRegion(String encodedName, final boolean abort,<a name="line.3340"></a>
<span class="sourceLineNo">3341</span>        final ServerName destination)<a name="line.3341"></a>
<span class="sourceLineNo">3342</span>      throws NotServingRegionException {<a name="line.3342"></a>
<span class="sourceLineNo">3343</span>    //Check for permissions to close.<a name="line.3343"></a>
<span class="sourceLineNo">3344</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3344"></a>
<span class="sourceLineNo">3345</span>    // Can be null if we're calling close on a region that's not online<a name="line.3345"></a>
<span class="sourceLineNo">3346</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3346"></a>
<span class="sourceLineNo">3347</span>      try {<a name="line.3347"></a>
<span class="sourceLineNo">3348</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3348"></a>
<span class="sourceLineNo">3349</span>      } catch (IOException exp) {<a name="line.3349"></a>
<span class="sourceLineNo">3350</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3350"></a>
<span class="sourceLineNo">3351</span>        return false;<a name="line.3351"></a>
<span class="sourceLineNo">3352</span>      }<a name="line.3352"></a>
<span class="sourceLineNo">3353</span>    }<a name="line.3353"></a>
<span class="sourceLineNo">3354</span><a name="line.3354"></a>
<span class="sourceLineNo">3355</span>    // previous can come back 'null' if not in map.<a name="line.3355"></a>
<span class="sourceLineNo">3356</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3356"></a>
<span class="sourceLineNo">3357</span>        Boolean.FALSE);<a name="line.3357"></a>
<span class="sourceLineNo">3358</span><a name="line.3358"></a>
<span class="sourceLineNo">3359</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3359"></a>
<span class="sourceLineNo">3360</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3360"></a>
<span class="sourceLineNo">3361</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3361"></a>
<span class="sourceLineNo">3362</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3362"></a>
<span class="sourceLineNo">3363</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3363"></a>
<span class="sourceLineNo">3364</span>        // We're going to try to do a standard close then.<a name="line.3364"></a>
<span class="sourceLineNo">3365</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3365"></a>
<span class="sourceLineNo">3366</span>            " Doing a standard close now");<a name="line.3366"></a>
<span class="sourceLineNo">3367</span>        return closeRegion(encodedName, abort, destination);<a name="line.3367"></a>
<span class="sourceLineNo">3368</span>      }<a name="line.3368"></a>
<span class="sourceLineNo">3369</span>      // Let's get the region from the online region list again<a name="line.3369"></a>
<span class="sourceLineNo">3370</span>      actualRegion = this.getRegion(encodedName);<a name="line.3370"></a>
<span class="sourceLineNo">3371</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3371"></a>
<span class="sourceLineNo">3372</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3372"></a>
<span class="sourceLineNo">3373</span>        // The master deletes the znode when it receives this exception.<a name="line.3373"></a>
<span class="sourceLineNo">3374</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3374"></a>
<span class="sourceLineNo">3375</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3375"></a>
<span class="sourceLineNo">3376</span>      }<a name="line.3376"></a>
<span class="sourceLineNo">3377</span>    } else if (previous == null) {<a name="line.3377"></a>
<span class="sourceLineNo">3378</span>      LOG.info("Received CLOSE for {}", encodedName);<a name="line.3378"></a>
<span class="sourceLineNo">3379</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3379"></a>
<span class="sourceLineNo">3380</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3380"></a>
<span class="sourceLineNo">3381</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3381"></a>
<span class="sourceLineNo">3382</span>      return true;<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>    if (actualRegion == null) {<a name="line.3385"></a>
<span class="sourceLineNo">3386</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3386"></a>
<span class="sourceLineNo">3387</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3387"></a>
<span class="sourceLineNo">3388</span>      // The master deletes the znode when it receives this exception.<a name="line.3388"></a>
<span class="sourceLineNo">3389</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3389"></a>
<span class="sourceLineNo">3390</span>          " is not online, and is not opening.");<a name="line.3390"></a>
<span class="sourceLineNo">3391</span>    }<a name="line.3391"></a>
<span class="sourceLineNo">3392</span><a name="line.3392"></a>
<span class="sourceLineNo">3393</span>    CloseRegionHandler crh;<a name="line.3393"></a>
<span class="sourceLineNo">3394</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3394"></a>
<span class="sourceLineNo">3395</span>    if (hri.isMetaRegion()) {<a name="line.3395"></a>
<span class="sourceLineNo">3396</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3396"></a>
<span class="sourceLineNo">3397</span>    } else {<a name="line.3397"></a>
<span class="sourceLineNo">3398</span>      crh = new CloseRegionHandler(this, this, hri, abort, destination);<a name="line.3398"></a>
<span class="sourceLineNo">3399</span>    }<a name="line.3399"></a>
<span class="sourceLineNo">3400</span>    this.executorService.submit(crh);<a name="line.3400"></a>
<span class="sourceLineNo">3401</span>    return true;<a name="line.3401"></a>
<span class="sourceLineNo">3402</span>  }<a name="line.3402"></a>
<span class="sourceLineNo">3403</span><a name="line.3403"></a>
<span class="sourceLineNo">3404</span>   /**<a name="line.3404"></a>
<span class="sourceLineNo">3405</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3405"></a>
<span class="sourceLineNo">3406</span>   *         named region is not member of the online regions.<a name="line.3406"></a>
<span class="sourceLineNo">3407</span>   */<a name="line.3407"></a>
<span class="sourceLineNo">3408</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3408"></a>
<span class="sourceLineNo">3409</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3409"></a>
<span class="sourceLineNo">3410</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3410"></a>
<span class="sourceLineNo">3411</span>  }<a name="line.3411"></a>
<span class="sourceLineNo">3412</span><a name="line.3412"></a>
<span class="sourceLineNo">3413</span>  @Override<a name="line.3413"></a>
<span class="sourceLineNo">3414</span>  public HRegion getRegion(final String encodedRegionName) {<a name="line.3414"></a>
<span class="sourceLineNo">3415</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3415"></a>
<span class="sourceLineNo">3416</span>  }<a name="line.3416"></a>
<span class="sourceLineNo">3417</span><a name="line.3417"></a>
<span class="sourceLineNo">3418</span><a name="line.3418"></a>
<span class="sourceLineNo">3419</span>  @Override<a name="line.3419"></a>
<span class="sourceLineNo">3420</span>  public boolean removeRegion(final HRegion r, ServerName destination) {<a name="line.3420"></a>
<span class="sourceLineNo">3421</span>    HRegion toReturn = this.onlineRegions.remove(r.getRegionInfo().getEncodedName());<a name="line.3421"></a>
<span class="sourceLineNo">3422</span>    metricsRegionServerImpl.requestsCountCache.remove(r.getRegionInfo().getEncodedName());<a name="line.3422"></a>
<span class="sourceLineNo">3423</span>    if (destination != null) {<a name="line.3423"></a>
<span class="sourceLineNo">3424</span>      long closeSeqNum = r.getMaxFlushedSeqId();<a name="line.3424"></a>
<span class="sourceLineNo">3425</span>      if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3425"></a>
<span class="sourceLineNo">3426</span>        // No edits in WAL for this region; get the sequence number when the region was opened.<a name="line.3426"></a>
<span class="sourceLineNo">3427</span>        closeSeqNum = r.getOpenSeqNum();<a name="line.3427"></a>
<span class="sourceLineNo">3428</span>        if (closeSeqNum == HConstants.NO_SEQNUM) closeSeqNum = 0;<a name="line.3428"></a>
<span class="sourceLineNo">3429</span>      }<a name="line.3429"></a>
<span class="sourceLineNo">3430</span>      boolean selfMove = ServerName.isSameAddress(destination, this.getServerName());<a name="line.3430"></a>
<span class="sourceLineNo">3431</span>      addToMovedRegions(r.getRegionInfo().getEncodedName(), destination, closeSeqNum, selfMove);<a name="line.3431"></a>
<span class="sourceLineNo">3432</span>      if (selfMove) {<a name="line.3432"></a>
<span class="sourceLineNo">3433</span>        this.regionServerAccounting.getRetainedRegionRWRequestsCnt().put(r.getRegionInfo().getEncodedName()<a name="line.3433"></a>
<span class="sourceLineNo">3434</span>          , new Pair&lt;&gt;(r.getReadRequestsCount(), r.getWriteRequestsCount()));<a name="line.3434"></a>
<span class="sourceLineNo">3435</span>      }<a name="line.3435"></a>
<span class="sourceLineNo">3436</span>    }<a name="line.3436"></a>
<span class="sourceLineNo">3437</span>    this.regionFavoredNodesMap.remove(r.getRegionInfo().getEncodedName());<a name="line.3437"></a>
<span class="sourceLineNo">3438</span>    configurationManager.deregisterObserver(r);<a name="line.3438"></a>
<span class="sourceLineNo">3439</span>    return toReturn != null;<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>  /**<a name="line.3442"></a>
<span class="sourceLineNo">3443</span>   * Protected Utility method for safely obtaining an HRegion handle.<a name="line.3443"></a>
<span class="sourceLineNo">3444</span>   *<a name="line.3444"></a>
<span class="sourceLineNo">3445</span>   * @param regionName Name of online {@link HRegion} to return<a name="line.3445"></a>
<span class="sourceLineNo">3446</span>   * @return {@link HRegion} for &lt;code&gt;regionName&lt;/code&gt;<a name="line.3446"></a>
<span class="sourceLineNo">3447</span>   */<a name="line.3447"></a>
<span class="sourceLineNo">3448</span>  protected HRegion getRegion(final byte[] regionName)<a name="line.3448"></a>
<span class="sourceLineNo">3449</span>      throws NotServingRegionException {<a name="line.3449"></a>
<span class="sourceLineNo">3450</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3450"></a>
<span class="sourceLineNo">3451</span>    return getRegionByEncodedName(regionName, encodedRegionName);<a name="line.3451"></a>
<span class="sourceLineNo">3452</span>  }<a name="line.3452"></a>
<span class="sourceLineNo">3453</span><a name="line.3453"></a>
<span class="sourceLineNo">3454</span>  public HRegion getRegionByEncodedName(String encodedRegionName)<a name="line.3454"></a>
<span class="sourceLineNo">3455</span>      throws NotServingRegionException {<a name="line.3455"></a>
<span class="sourceLineNo">3456</span>    return getRegionByEncodedName(null, encodedRegionName);<a name="line.3456"></a>
<span class="sourceLineNo">3457</span>  }<a name="line.3457"></a>
<span class="sourceLineNo">3458</span><a name="line.3458"></a>
<span class="sourceLineNo">3459</span>  private HRegion getRegionByEncodedName(byte[] regionName, String encodedRegionName)<a name="line.3459"></a>
<span class="sourceLineNo">3460</span>    throws NotServingRegionException {<a name="line.3460"></a>
<span class="sourceLineNo">3461</span>    HRegion region = this.onlineRegions.get(encodedRegionName);<a name="line.3461"></a>
<span class="sourceLineNo">3462</span>    if (region == null) {<a name="line.3462"></a>
<span class="sourceLineNo">3463</span>      MovedRegionInfo moveInfo = getMovedRegion(encodedRegionName);<a name="line.3463"></a>
<span class="sourceLineNo">3464</span>      if (moveInfo != null) {<a name="line.3464"></a>
<span class="sourceLineNo">3465</span>        throw new RegionMovedException(moveInfo.getServerName(), moveInfo.getSeqNum());<a name="line.3465"></a>
<span class="sourceLineNo">3466</span>      }<a name="line.3466"></a>
<span class="sourceLineNo">3467</span>      Boolean isOpening = this.regionsInTransitionInRS.get(Bytes.toBytes(encodedRegionName));<a name="line.3467"></a>
<span class="sourceLineNo">3468</span>      String regionNameStr = regionName == null?<a name="line.3468"></a>
<span class="sourceLineNo">3469</span>        encodedRegionName: Bytes.toStringBinary(regionName);<a name="line.3469"></a>
<span class="sourceLineNo">3470</span>      if (isOpening != null &amp;&amp; isOpening) {<a name="line.3470"></a>
<span class="sourceLineNo">3471</span>        throw new RegionOpeningException("Region " + regionNameStr +<a name="line.3471"></a>
<span class="sourceLineNo">3472</span>          " is opening on " + this.serverName);<a name="line.3472"></a>
<span class="sourceLineNo">3473</span>      }<a name="line.3473"></a>
<span class="sourceLineNo">3474</span>      throw new NotServingRegionException("" + regionNameStr +<a name="line.3474"></a>
<span class="sourceLineNo">3475</span>        " is not online on " + this.serverName);<a name="line.3475"></a>
<span class="sourceLineNo">3476</span>    }<a name="line.3476"></a>
<span class="sourceLineNo">3477</span>    return region;<a name="line.3477"></a>
<span class="sourceLineNo">3478</span>  }<a name="line.3478"></a>
<span class="sourceLineNo">3479</span><a name="line.3479"></a>
<span class="sourceLineNo">3480</span>  /**<a name="line.3480"></a>
<span class="sourceLineNo">3481</span>   * Cleanup after Throwable caught invoking method. Converts &lt;code&gt;t&lt;/code&gt; to<a name="line.3481"></a>
<span class="sourceLineNo">3482</span>   * IOE if it isn't already.<a name="line.3482"></a>
<span class="sourceLineNo">3483</span>   *<a name="line.3483"></a>
<span class="sourceLineNo">3484</span>   * @param t Throwable<a name="line.3484"></a>
<span class="sourceLineNo">3485</span>   * @param msg Message to log in error. Can be null.<a name="line.3485"></a>
<span class="sourceLineNo">3486</span>   * @return Throwable converted to an IOE; methods can only let out IOEs.<a name="line.3486"></a>
<span class="sourceLineNo">3487</span>   */<a name="line.3487"></a>
<span class="sourceLineNo">3488</span>  private Throwable cleanup(final Throwable t, final String msg) {<a name="line.3488"></a>
<span class="sourceLineNo">3489</span>    // Don't log as error if NSRE; NSRE is 'normal' operation.<a name="line.3489"></a>
<span class="sourceLineNo">3490</span>    if (t instanceof NotServingRegionException) {<a name="line.3490"></a>
<span class="sourceLineNo">3491</span>      LOG.debug("NotServingRegionException; " + t.getMessage());<a name="line.3491"></a>
<span class="sourceLineNo">3492</span>      return t;<a name="line.3492"></a>
<span class="sourceLineNo">3493</span>    }<a name="line.3493"></a>
<span class="sourceLineNo">3494</span>    Throwable e = t instanceof RemoteException ? ((RemoteException) t).unwrapRemoteException() : t;<a name="line.3494"></a>
<span class="sourceLineNo">3495</span>    if (msg == null) {<a name="line.3495"></a>
<span class="sourceLineNo">3496</span>      LOG.error("", e);<a name="line.3496"></a>
<span class="sourceLineNo">3497</span>    } else {<a name="line.3497"></a>
<span class="sourceLineNo">3498</span>      LOG.error(msg, e);<a name="line.3498"></a>
<span class="sourceLineNo">3499</span>    }<a name="line.3499"></a>
<span class="sourceLineNo">3500</span>    if (!rpcServices.checkOOME(t)) {<a name="line.3500"></a>
<span class="sourceLineNo">3501</span>      checkFileSystem();<a name="line.3501"></a>
<span class="sourceLineNo">3502</span>    }<a name="line.3502"></a>
<span class="sourceLineNo">3503</span>    return t;<a name="line.3503"></a>
<span class="sourceLineNo">3504</span>  }<a name="line.3504"></a>
<span class="sourceLineNo">3505</span><a name="line.3505"></a>
<span class="sourceLineNo">3506</span>  /**<a name="line.3506"></a>
<span class="sourceLineNo">3507</span>   * @param msg Message to put in new IOE if passed &lt;code&gt;t&lt;/code&gt; is not an IOE<a name="line.3507"></a>
<span class="sourceLineNo">3508</span>   * @return Make &lt;code&gt;t&lt;/code&gt; an IOE if it isn't already.<a name="line.3508"></a>
<span class="sourceLineNo">3509</span>   */<a name="line.3509"></a>
<span class="sourceLineNo">3510</span>  private IOException convertThrowableToIOE(final Throwable t, final String msg) {<a name="line.3510"></a>
<span class="sourceLineNo">3511</span>    return (t instanceof IOException ? (IOException) t : msg == null<a name="line.3511"></a>
<span class="sourceLineNo">3512</span>        || msg.length() == 0 ? new IOException(t) : new IOException(msg, t));<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>   * Checks to see if the file system is still accessible. If not, sets<a name="line.3516"></a>
<span class="sourceLineNo">3517</span>   * abortRequested and stopRequested<a name="line.3517"></a>
<span class="sourceLineNo">3518</span>   *<a name="line.3518"></a>
<span class="sourceLineNo">3519</span>   * @return false if file system is not available<a name="line.3519"></a>
<span class="sourceLineNo">3520</span>   */<a name="line.3520"></a>
<span class="sourceLineNo">3521</span>  boolean checkFileSystem() {<a name="line.3521"></a>
<span class="sourceLineNo">3522</span>    if (this.dataFsOk &amp;&amp; this.dataFs != null) {<a name="line.3522"></a>
<span class="sourceLineNo">3523</span>      try {<a name="line.3523"></a>
<span class="sourceLineNo">3524</span>        FSUtils.checkFileSystemAvailable(this.dataFs);<a name="line.3524"></a>
<span class="sourceLineNo">3525</span>      } catch (IOException e) {<a name="line.3525"></a>
<span class="sourceLineNo">3526</span>        abort("File System not available", e);<a name="line.3526"></a>
<span class="sourceLineNo">3527</span>        this.dataFsOk = false;<a name="line.3527"></a>
<span class="sourceLineNo">3528</span>      }<a name="line.3528"></a>
<span class="sourceLineNo">3529</span>    }<a name="line.3529"></a>
<span class="sourceLineNo">3530</span>    return this.dataFsOk;<a name="line.3530"></a>
<span class="sourceLineNo">3531</span>  }<a name="line.3531"></a>
<span class="sourceLineNo">3532</span><a name="line.3532"></a>
<span class="sourceLineNo">3533</span>  @Override<a name="line.3533"></a>
<span class="sourceLineNo">3534</span>  public void updateRegionFavoredNodesMapping(String encodedRegionName,<a name="line.3534"></a>
<span class="sourceLineNo">3535</span>      List&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName&gt; favoredNodes) {<a name="line.3535"></a>
<span class="sourceLineNo">3536</span>    Address[] addr = new Address[favoredNodes.size()];<a name="line.3536"></a>
<span class="sourceLineNo">3537</span>    // Refer to the comment on the declaration of regionFavoredNodesMap on why<a name="line.3537"></a>
<span class="sourceLineNo">3538</span>    // it is a map of region name to Address[]<a name="line.3538"></a>
<span class="sourceLineNo">3539</span>    for (int i = 0; i &lt; favoredNodes.size(); i++) {<a name="line.3539"></a>
<span class="sourceLineNo">3540</span>      addr[i] = Address.fromParts(favoredNodes.get(i).getHostName(),<a name="line.3540"></a>
<span class="sourceLineNo">3541</span>          favoredNodes.get(i).getPort());<a name="line.3541"></a>
<span class="sourceLineNo">3542</span>    }<a name="line.3542"></a>
<span class="sourceLineNo">3543</span>    regionFavoredNodesMap.put(encodedRegionName, addr);<a name="line.3543"></a>
<span class="sourceLineNo">3544</span>  }<a name="line.3544"></a>
<span class="sourceLineNo">3545</span><a name="line.3545"></a>
<span class="sourceLineNo">3546</span>  /**<a name="line.3546"></a>
<span class="sourceLineNo">3547</span>   * Return the favored nodes for a region given its encoded name. Look at the<a name="line.3547"></a>
<span class="sourceLineNo">3548</span>   * comment around {@link #regionFavoredNodesMap} on why we convert to InetSocketAddress[]<a name="line.3548"></a>
<span class="sourceLineNo">3549</span>   * here.<a name="line.3549"></a>
<span class="sourceLineNo">3550</span>   * @param encodedRegionName<a name="line.3550"></a>
<span class="sourceLineNo">3551</span>   * @return array of favored locations<a name="line.3551"></a>
<span class="sourceLineNo">3552</span>   */<a name="line.3552"></a>
<span class="sourceLineNo">3553</span>  @Override<a name="line.3553"></a>
<span class="sourceLineNo">3554</span>  public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {<a name="line.3554"></a>
<span class="sourceLineNo">3555</span>    return Address.toSocketAddress(regionFavoredNodesMap.get(encodedRegionName));<a name="line.3555"></a>
<span class="sourceLineNo">3556</span>  }<a name="line.3556"></a>
<span class="sourceLineNo">3557</span><a name="line.3557"></a>
<span class="sourceLineNo">3558</span>  @Override<a name="line.3558"></a>
<span class="sourceLineNo">3559</span>  public ServerNonceManager getNonceManager() {<a name="line.3559"></a>
<span class="sourceLineNo">3560</span>    return this.nonceManager;<a name="line.3560"></a>
<span class="sourceLineNo">3561</span>  }<a name="line.3561"></a>
<span class="sourceLineNo">3562</span><a name="line.3562"></a>
<span class="sourceLineNo">3563</span>  private static class MovedRegionInfo {<a name="line.3563"></a>
<span class="sourceLineNo">3564</span>    private final ServerName serverName;<a name="line.3564"></a>
<span class="sourceLineNo">3565</span>    private final long seqNum;<a name="line.3565"></a>
<span class="sourceLineNo">3566</span><a name="line.3566"></a>
<span class="sourceLineNo">3567</span>    MovedRegionInfo(ServerName serverName, long closeSeqNum) {<a name="line.3567"></a>
<span class="sourceLineNo">3568</span>      this.serverName = serverName;<a name="line.3568"></a>
<span class="sourceLineNo">3569</span>      this.seqNum = closeSeqNum;<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 ServerName getServerName() {<a name="line.3572"></a>
<span class="sourceLineNo">3573</span>      return serverName;<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 long getSeqNum() {<a name="line.3576"></a>
<span class="sourceLineNo">3577</span>      return seqNum;<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><a name="line.3580"></a>
<span class="sourceLineNo">3581</span>  /**<a name="line.3581"></a>
<span class="sourceLineNo">3582</span>   * We need a timeout. If not there is a risk of giving a wrong information: this would double<a name="line.3582"></a>
<span class="sourceLineNo">3583</span>   * the number of network calls instead of reducing them.<a name="line.3583"></a>
<span class="sourceLineNo">3584</span>   */<a name="line.3584"></a>
<span class="sourceLineNo">3585</span>  private static final int TIMEOUT_REGION_MOVED = (2 * 60 * 1000);<a name="line.3585"></a>
<span class="sourceLineNo">3586</span><a name="line.3586"></a>
<span class="sourceLineNo">3587</span>  private void addToMovedRegions(String encodedName, ServerName destination, long closeSeqNum, boolean selfMove) {<a name="line.3587"></a>
<span class="sourceLineNo">3588</span>    if (selfMove) {<a name="line.3588"></a>
<span class="sourceLineNo">3589</span>      LOG.warn("Not adding moved region record: " + encodedName + " to self.");<a name="line.3589"></a>
<span class="sourceLineNo">3590</span>      return;<a name="line.3590"></a>
<span class="sourceLineNo">3591</span>    }<a name="line.3591"></a>
<span class="sourceLineNo">3592</span>    LOG.info("Adding " + encodedName + " move to " + destination + " record at close sequenceid=" +<a name="line.3592"></a>
<span class="sourceLineNo">3593</span>        closeSeqNum);<a name="line.3593"></a>
<span class="sourceLineNo">3594</span>    movedRegionInfoCache.put(encodedName, new MovedRegionInfo(destination, closeSeqNum));<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>  void removeFromMovedRegions(String encodedName) {<a name="line.3597"></a>
<span class="sourceLineNo">3598</span>    movedRegionInfoCache.invalidate(encodedName);<a name="line.3598"></a>
<span class="sourceLineNo">3599</span>  }<a name="line.3599"></a>
<span class="sourceLineNo">3600</span><a name="line.3600"></a>
<span class="sourceLineNo">3601</span>  @InterfaceAudience.Private<a name="line.3601"></a>
<span class="sourceLineNo">3602</span>  public MovedRegionInfo getMovedRegion(String encodedRegionName) {<a name="line.3602"></a>
<span class="sourceLineNo">3603</span>    return movedRegionInfoCache.getIfPresent(encodedRegionName);<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>  @InterfaceAudience.Private<a name="line.3606"></a>
<span class="sourceLineNo">3607</span>  public int movedRegionCacheExpiredTime() {<a name="line.3607"></a>
<span class="sourceLineNo">3608</span>        return TIMEOUT_REGION_MOVED;<a name="line.3608"></a>
<span class="sourceLineNo">3609</span>  }<a name="line.3609"></a>
<span class="sourceLineNo">3610</span><a name="line.3610"></a>
<span class="sourceLineNo">3611</span>  private String getMyEphemeralNodePath() {<a name="line.3611"></a>
<span class="sourceLineNo">3612</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<a name="line.3612"></a>
<span class="sourceLineNo">3613</span>  }<a name="line.3613"></a>
<span class="sourceLineNo">3614</span><a name="line.3614"></a>
<span class="sourceLineNo">3615</span>  private boolean isHealthCheckerConfigured() {<a name="line.3615"></a>
<span class="sourceLineNo">3616</span>    String healthScriptLocation = this.conf.get(HConstants.HEALTH_SCRIPT_LOC);<a name="line.3616"></a>
<span class="sourceLineNo">3617</span>    return org.apache.commons.lang3.StringUtils.isNotBlank(healthScriptLocation);<a name="line.3617"></a>
<span class="sourceLineNo">3618</span>  }<a name="line.3618"></a>
<span class="sourceLineNo">3619</span><a name="line.3619"></a>
<span class="sourceLineNo">3620</span>  /**<a name="line.3620"></a>
<span class="sourceLineNo">3621</span>   * @return the underlying {@link CompactSplit} for the servers<a name="line.3621"></a>
<span class="sourceLineNo">3622</span>   */<a name="line.3622"></a>
<span class="sourceLineNo">3623</span>  public CompactSplit getCompactSplitThread() {<a name="line.3623"></a>
<span class="sourceLineNo">3624</span>    return this.compactSplitThread;<a name="line.3624"></a>
<span class="sourceLineNo">3625</span>  }<a name="line.3625"></a>
<span class="sourceLineNo">3626</span><a name="line.3626"></a>
<span class="sourceLineNo">3627</span>  CoprocessorServiceResponse execRegionServerService(<a name="line.3627"></a>
<span class="sourceLineNo">3628</span>      @SuppressWarnings("UnusedParameters") final RpcController controller,<a name="line.3628"></a>
<span class="sourceLineNo">3629</span>      final CoprocessorServiceRequest serviceRequest) throws ServiceException {<a name="line.3629"></a>
<span class="sourceLineNo">3630</span>    try {<a name="line.3630"></a>
<span class="sourceLineNo">3631</span>      ServerRpcController serviceController = new ServerRpcController();<a name="line.3631"></a>
<span class="sourceLineNo">3632</span>      CoprocessorServiceCall call = serviceRequest.getCall();<a name="line.3632"></a>
<span class="sourceLineNo">3633</span>      String serviceName = call.getServiceName();<a name="line.3633"></a>
<span class="sourceLineNo">3634</span>      Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.3634"></a>
<span class="sourceLineNo">3635</span>      if (service == null) {<a name="line.3635"></a>
<span class="sourceLineNo">3636</span>        throw new UnknownProtocolException(null, "No registered coprocessor executorService found for " +<a name="line.3636"></a>
<span class="sourceLineNo">3637</span>            serviceName);<a name="line.3637"></a>
<span class="sourceLineNo">3638</span>      }<a name="line.3638"></a>
<span class="sourceLineNo">3639</span>      ServiceDescriptor serviceDesc =<a name="line.3639"></a>
<span class="sourceLineNo">3640</span>          service.getDescriptorForType();<a name="line.3640"></a>
<span class="sourceLineNo">3641</span><a name="line.3641"></a>
<span class="sourceLineNo">3642</span>      String methodName = call.getMethodName();<a name="line.3642"></a>
<span class="sourceLineNo">3643</span>      MethodDescriptor methodDesc =<a name="line.3643"></a>
<span class="sourceLineNo">3644</span>          serviceDesc.findMethodByName(methodName);<a name="line.3644"></a>
<span class="sourceLineNo">3645</span>      if (methodDesc == null) {<a name="line.3645"></a>
<span class="sourceLineNo">3646</span>        throw new UnknownProtocolException(service.getClass(), "Unknown method " + methodName +<a name="line.3646"></a>
<span class="sourceLineNo">3647</span>            " called on executorService " + serviceName);<a name="line.3647"></a>
<span class="sourceLineNo">3648</span>      }<a name="line.3648"></a>
<span class="sourceLineNo">3649</span><a name="line.3649"></a>
<span class="sourceLineNo">3650</span>      Message request =<a name="line.3650"></a>
<span class="sourceLineNo">3651</span>          CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.3651"></a>
<span class="sourceLineNo">3652</span>      final Message.Builder responseBuilder =<a name="line.3652"></a>
<span class="sourceLineNo">3653</span>          service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.3653"></a>
<span class="sourceLineNo">3654</span>      service.callMethod(methodDesc, serviceController, request, message -&gt; {<a name="line.3654"></a>
<span class="sourceLineNo">3655</span>        if (message != null) {<a name="line.3655"></a>
<span class="sourceLineNo">3656</span>          responseBuilder.mergeFrom(message);<a name="line.3656"></a>
<span class="sourceLineNo">3657</span>        }<a name="line.3657"></a>
<span class="sourceLineNo">3658</span>      });<a name="line.3658"></a>
<span class="sourceLineNo">3659</span>      IOException exception = CoprocessorRpcUtils.getControllerException(serviceController);<a name="line.3659"></a>
<span class="sourceLineNo">3660</span>      if (exception != null) {<a name="line.3660"></a>
<span class="sourceLineNo">3661</span>        throw exception;<a name="line.3661"></a>
<span class="sourceLineNo">3662</span>      }<a name="line.3662"></a>
<span class="sourceLineNo">3663</span>      return CoprocessorRpcUtils.getResponse(responseBuilder.build(), HConstants.EMPTY_BYTE_ARRAY);<a name="line.3663"></a>
<span class="sourceLineNo">3664</span>    } catch (IOException ie) {<a name="line.3664"></a>
<span class="sourceLineNo">3665</span>      throw new ServiceException(ie);<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><a name="line.3668"></a>
<span class="sourceLineNo">3669</span>  /**<a name="line.3669"></a>
<span class="sourceLineNo">3670</span>   * May be null if this is a master which not carry table.<a name="line.3670"></a>
<span class="sourceLineNo">3671</span>   *<a name="line.3671"></a>
<span class="sourceLineNo">3672</span>   * @return The block cache instance used by the regionserver.<a name="line.3672"></a>
<span class="sourceLineNo">3673</span>   */<a name="line.3673"></a>
<span class="sourceLineNo">3674</span>  @Override<a name="line.3674"></a>
<span class="sourceLineNo">3675</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.3675"></a>
<span class="sourceLineNo">3676</span>    return Optional.ofNullable(this.blockCache);<a name="line.3676"></a>
<span class="sourceLineNo">3677</span>  }<a name="line.3677"></a>
<span class="sourceLineNo">3678</span><a name="line.3678"></a>
<span class="sourceLineNo">3679</span>  /**<a name="line.3679"></a>
<span class="sourceLineNo">3680</span>   * May be null if this is a master which not carry table.<a name="line.3680"></a>
<span class="sourceLineNo">3681</span>   *<a name="line.3681"></a>
<span class="sourceLineNo">3682</span>   * @return The cache for mob files used by the regionserver.<a name="line.3682"></a>
<span class="sourceLineNo">3683</span>   */<a name="line.3683"></a>
<span class="sourceLineNo">3684</span>  @Override<a name="line.3684"></a>
<span class="sourceLineNo">3685</span>  public Optional&lt;MobFileCache&gt; getMobFileCache() {<a name="line.3685"></a>
<span class="sourceLineNo">3686</span>    return Optional.ofNullable(this.mobFileCache);<a name="line.3686"></a>
<span class="sourceLineNo">3687</span>  }<a name="line.3687"></a>
<span class="sourceLineNo">3688</span><a name="line.3688"></a>
<span class="sourceLineNo">3689</span>  @Override<a name="line.3689"></a>
<span class="sourceLineNo">3690</span>  public AccessChecker getAccessChecker() {<a name="line.3690"></a>
<span class="sourceLineNo">3691</span>    return rpcServices.getAccessChecker();<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>  @Override<a name="line.3694"></a>
<span class="sourceLineNo">3695</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.3695"></a>
<span class="sourceLineNo">3696</span>    return rpcServices.getZkPermissionWatcher();<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>  /**<a name="line.3699"></a>
<span class="sourceLineNo">3700</span>   * @return : Returns the ConfigurationManager object for testing purposes.<a name="line.3700"></a>
<span class="sourceLineNo">3701</span>   */<a name="line.3701"></a>
<span class="sourceLineNo">3702</span>  @InterfaceAudience.Private<a name="line.3702"></a>
<span class="sourceLineNo">3703</span>  ConfigurationManager getConfigurationManager() {<a name="line.3703"></a>
<span class="sourceLineNo">3704</span>    return configurationManager;<a name="line.3704"></a>
<span class="sourceLineNo">3705</span>  }<a name="line.3705"></a>
<span class="sourceLineNo">3706</span><a name="line.3706"></a>
<span class="sourceLineNo">3707</span>  /**<a name="line.3707"></a>
<span class="sourceLineNo">3708</span>   * @return Return table descriptors implementation.<a name="line.3708"></a>
<span class="sourceLineNo">3709</span>   */<a name="line.3709"></a>
<span class="sourceLineNo">3710</span>  @Override<a name="line.3710"></a>
<span class="sourceLineNo">3711</span>  public TableDescriptors getTableDescriptors() {<a name="line.3711"></a>
<span class="sourceLineNo">3712</span>    return this.tableDescriptors;<a name="line.3712"></a>
<span class="sourceLineNo">3713</span>  }<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>   * Reload the configuration from disk.<a name="line.3716"></a>
<span class="sourceLineNo">3717</span>   */<a name="line.3717"></a>
<span class="sourceLineNo">3718</span>  void updateConfiguration() {<a name="line.3718"></a>
<span class="sourceLineNo">3719</span>    LOG.info("Reloading the configuration from disk.");<a name="line.3719"></a>
<span class="sourceLineNo">3720</span>    // Reload the configuration from disk.<a name="line.3720"></a>
<span class="sourceLineNo">3721</span>    conf.reloadConfiguration();<a name="line.3721"></a>
<span class="sourceLineNo">3722</span>    configurationManager.notifyAllObservers(conf);<a name="line.3722"></a>
<span class="sourceLineNo">3723</span>  }<a name="line.3723"></a>
<span class="sourceLineNo">3724</span><a name="line.3724"></a>
<span class="sourceLineNo">3725</span>  CacheEvictionStats clearRegionBlockCache(Region region) {<a name="line.3725"></a>
<span class="sourceLineNo">3726</span>    long evictedBlocks = 0;<a name="line.3726"></a>
<span class="sourceLineNo">3727</span><a name="line.3727"></a>
<span class="sourceLineNo">3728</span>    for(Store store : region.getStores()) {<a name="line.3728"></a>
<span class="sourceLineNo">3729</span>      for(StoreFile hFile : store.getStorefiles()) {<a name="line.3729"></a>
<span class="sourceLineNo">3730</span>        evictedBlocks += blockCache.evictBlocksByHfileName(hFile.getPath().getName());<a name="line.3730"></a>
<span class="sourceLineNo">3731</span>      }<a name="line.3731"></a>
<span class="sourceLineNo">3732</span>    }<a name="line.3732"></a>
<span class="sourceLineNo">3733</span><a name="line.3733"></a>
<span class="sourceLineNo">3734</span>    return CacheEvictionStats.builder()<a name="line.3734"></a>
<span class="sourceLineNo">3735</span>        .withEvictedBlocks(evictedBlocks)<a name="line.3735"></a>
<span class="sourceLineNo">3736</span>        .build();<a name="line.3736"></a>
<span class="sourceLineNo">3737</span>  }<a name="line.3737"></a>
<span class="sourceLineNo">3738</span><a name="line.3738"></a>
<span class="sourceLineNo">3739</span>  @Override<a name="line.3739"></a>
<span class="sourceLineNo">3740</span>  public double getCompactionPressure() {<a name="line.3740"></a>
<span class="sourceLineNo">3741</span>    double max = 0;<a name="line.3741"></a>
<span class="sourceLineNo">3742</span>    for (Region region : onlineRegions.values()) {<a name="line.3742"></a>
<span class="sourceLineNo">3743</span>      for (Store store : region.getStores()) {<a name="line.3743"></a>
<span class="sourceLineNo">3744</span>        double normCount = store.getCompactionPressure();<a name="line.3744"></a>
<span class="sourceLineNo">3745</span>        if (normCount &gt; max) {<a name="line.3745"></a>
<span class="sourceLineNo">3746</span>          max = normCount;<a name="line.3746"></a>
<span class="sourceLineNo">3747</span>        }<a name="line.3747"></a>
<span class="sourceLineNo">3748</span>      }<a name="line.3748"></a>
<span class="sourceLineNo">3749</span>    }<a name="line.3749"></a>
<span class="sourceLineNo">3750</span>    return max;<a name="line.3750"></a>
<span class="sourceLineNo">3751</span>  }<a name="line.3751"></a>
<span class="sourceLineNo">3752</span><a name="line.3752"></a>
<span class="sourceLineNo">3753</span>  @Override<a name="line.3753"></a>
<span class="sourceLineNo">3754</span>  public HeapMemoryManager getHeapMemoryManager() {<a name="line.3754"></a>
<span class="sourceLineNo">3755</span>    return hMemManager;<a name="line.3755"></a>
<span class="sourceLineNo">3756</span>  }<a name="line.3756"></a>
<span class="sourceLineNo">3757</span><a name="line.3757"></a>
<span class="sourceLineNo">3758</span>  MemStoreFlusher getMemStoreFlusher() {<a name="line.3758"></a>
<span class="sourceLineNo">3759</span>    return cacheFlusher;<a name="line.3759"></a>
<span class="sourceLineNo">3760</span>  }<a name="line.3760"></a>
<span class="sourceLineNo">3761</span><a name="line.3761"></a>
<span class="sourceLineNo">3762</span>  /**<a name="line.3762"></a>
<span class="sourceLineNo">3763</span>   * For testing<a name="line.3763"></a>
<span class="sourceLineNo">3764</span>   * @return whether all wal roll request finished for this regionserver<a name="line.3764"></a>
<span class="sourceLineNo">3765</span>   */<a name="line.3765"></a>
<span class="sourceLineNo">3766</span>  @InterfaceAudience.Private<a name="line.3766"></a>
<span class="sourceLineNo">3767</span>  public boolean walRollRequestFinished() {<a name="line.3767"></a>
<span class="sourceLineNo">3768</span>    return this.walRoller.walRollFinished();<a name="line.3768"></a>
<span class="sourceLineNo">3769</span>  }<a name="line.3769"></a>
<span class="sourceLineNo">3770</span><a name="line.3770"></a>
<span class="sourceLineNo">3771</span>  @Override<a name="line.3771"></a>
<span class="sourceLineNo">3772</span>  public ThroughputController getFlushThroughputController() {<a name="line.3772"></a>
<span class="sourceLineNo">3773</span>    return flushThroughputController;<a name="line.3773"></a>
<span class="sourceLineNo">3774</span>  }<a name="line.3774"></a>
<span class="sourceLineNo">3775</span><a name="line.3775"></a>
<span class="sourceLineNo">3776</span>  @Override<a name="line.3776"></a>
<span class="sourceLineNo">3777</span>  public double getFlushPressure() {<a name="line.3777"></a>
<span class="sourceLineNo">3778</span>    if (getRegionServerAccounting() == null || cacheFlusher == null) {<a name="line.3778"></a>
<span class="sourceLineNo">3779</span>      // return 0 during RS initialization<a name="line.3779"></a>
<span class="sourceLineNo">3780</span>      return 0.0;<a name="line.3780"></a>
<span class="sourceLineNo">3781</span>    }<a name="line.3781"></a>
<span class="sourceLineNo">3782</span>    return getRegionServerAccounting().getFlushPressure();<a name="line.3782"></a>
<span class="sourceLineNo">3783</span>  }<a name="line.3783"></a>
<span class="sourceLineNo">3784</span><a name="line.3784"></a>
<span class="sourceLineNo">3785</span>  @Override<a name="line.3785"></a>
<span class="sourceLineNo">3786</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.3786"></a>
<span class="sourceLineNo">3787</span>    ThroughputController old = this.flushThroughputController;<a name="line.3787"></a>
<span class="sourceLineNo">3788</span>    if (old != null) {<a name="line.3788"></a>
<span class="sourceLineNo">3789</span>      old.stop("configuration change");<a name="line.3789"></a>
<span class="sourceLineNo">3790</span>    }<a name="line.3790"></a>
<span class="sourceLineNo">3791</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, newConf);<a name="line.3791"></a>
<span class="sourceLineNo">3792</span>    try {<a name="line.3792"></a>
<span class="sourceLineNo">3793</span>      Superusers.initialize(newConf);<a name="line.3793"></a>
<span class="sourceLineNo">3794</span>    } catch (IOException e) {<a name="line.3794"></a>
<span class="sourceLineNo">3795</span>      LOG.warn("Failed to initialize SuperUsers on reloading of the configuration");<a name="line.3795"></a>
<span class="sourceLineNo">3796</span>    }<a name="line.3796"></a>
<span class="sourceLineNo">3797</span>  }<a name="line.3797"></a>
<span class="sourceLineNo">3798</span><a name="line.3798"></a>
<span class="sourceLineNo">3799</span>  @Override<a name="line.3799"></a>
<span class="sourceLineNo">3800</span>  public MetricsRegionServer getMetrics() {<a name="line.3800"></a>
<span class="sourceLineNo">3801</span>    return metricsRegionServer;<a name="line.3801"></a>
<span class="sourceLineNo">3802</span>  }<a name="line.3802"></a>
<span class="sourceLineNo">3803</span><a name="line.3803"></a>
<span class="sourceLineNo">3804</span>  @Override<a name="line.3804"></a>
<span class="sourceLineNo">3805</span>  public SecureBulkLoadManager getSecureBulkLoadManager() {<a name="line.3805"></a>
<span class="sourceLineNo">3806</span>    return this.secureBulkLoadManager;<a name="line.3806"></a>
<span class="sourceLineNo">3807</span>  }<a name="line.3807"></a>
<span class="sourceLineNo">3808</span><a name="line.3808"></a>
<span class="sourceLineNo">3809</span>  @Override<a name="line.3809"></a>
<span class="sourceLineNo">3810</span>  public EntityLock regionLock(final List&lt;RegionInfo&gt; regionInfo, final String description,<a name="line.3810"></a>
<span class="sourceLineNo">3811</span>      final Abortable abort) {<a name="line.3811"></a>
<span class="sourceLineNo">3812</span>    final LockServiceClient client =<a name="line.3812"></a>
<span class="sourceLineNo">3813</span>        new LockServiceClient(conf, lockStub, asyncClusterConnection.getNonceGenerator());<a name="line.3813"></a>
<span class="sourceLineNo">3814</span>    return client.regionLock(regionInfo, description, abort);<a name="line.3814"></a>
<span class="sourceLineNo">3815</span>  }<a name="line.3815"></a>
<span class="sourceLineNo">3816</span><a name="line.3816"></a>
<span class="sourceLineNo">3817</span>  @Override<a name="line.3817"></a>
<span class="sourceLineNo">3818</span>  public void unassign(byte[] regionName) throws IOException {<a name="line.3818"></a>
<span class="sourceLineNo">3819</span>    FutureUtils.get(asyncClusterConnection.getAdmin().unassign(regionName, false));<a name="line.3819"></a>
<span class="sourceLineNo">3820</span>  }<a name="line.3820"></a>
<span class="sourceLineNo">3821</span><a name="line.3821"></a>
<span class="sourceLineNo">3822</span>  @Override<a name="line.3822"></a>
<span class="sourceLineNo">3823</span>  public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() {<a name="line.3823"></a>
<span class="sourceLineNo">3824</span>    return this.rsSpaceQuotaManager;<a name="line.3824"></a>
<span class="sourceLineNo">3825</span>  }<a name="line.3825"></a>
<span class="sourceLineNo">3826</span><a name="line.3826"></a>
<span class="sourceLineNo">3827</span>  @Override<a name="line.3827"></a>
<span class="sourceLineNo">3828</span>  public boolean reportFileArchivalForQuotas(TableName tableName,<a name="line.3828"></a>
<span class="sourceLineNo">3829</span>      Collection&lt;Entry&lt;String, Long&gt;&gt; archivedFiles) {<a name="line.3829"></a>
<span class="sourceLineNo">3830</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.3830"></a>
<span class="sourceLineNo">3831</span>      return false;<a name="line.3831"></a>
<span class="sourceLineNo">3832</span>    }<a name="line.3832"></a>
<span class="sourceLineNo">3833</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.3833"></a>
<span class="sourceLineNo">3834</span>    if (rss == null || rsSpaceQuotaManager == null) {<a name="line.3834"></a>
<span class="sourceLineNo">3835</span>      // the current server could be stopping.<a name="line.3835"></a>
<span class="sourceLineNo">3836</span>      LOG.trace("Skipping file archival reporting to HMaster as stub is null");<a name="line.3836"></a>
<span class="sourceLineNo">3837</span>      return false;<a name="line.3837"></a>
<span class="sourceLineNo">3838</span>    }<a name="line.3838"></a>
<span class="sourceLineNo">3839</span>    try {<a name="line.3839"></a>
<span class="sourceLineNo">3840</span>      RegionServerStatusProtos.FileArchiveNotificationRequest request =<a name="line.3840"></a>
<span class="sourceLineNo">3841</span>          rsSpaceQuotaManager.buildFileArchiveRequest(tableName, archivedFiles);<a name="line.3841"></a>
<span class="sourceLineNo">3842</span>      rss.reportFileArchival(null, request);<a name="line.3842"></a>
<span class="sourceLineNo">3843</span>    } catch (ServiceException se) {<a name="line.3843"></a>
<span class="sourceLineNo">3844</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.3844"></a>
<span class="sourceLineNo">3845</span>      if (ioe instanceof PleaseHoldException) {<a name="line.3845"></a>
<span class="sourceLineNo">3846</span>        if (LOG.isTraceEnabled()) {<a name="line.3846"></a>
<span class="sourceLineNo">3847</span>          LOG.trace("Failed to report file archival(s) to Master because it is initializing."<a name="line.3847"></a>
<span class="sourceLineNo">3848</span>              + " This will be retried.", ioe);<a name="line.3848"></a>
<span class="sourceLineNo">3849</span>        }<a name="line.3849"></a>
<span class="sourceLineNo">3850</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.3850"></a>
<span class="sourceLineNo">3851</span>        return false;<a name="line.3851"></a>
<span class="sourceLineNo">3852</span>      }<a name="line.3852"></a>
<span class="sourceLineNo">3853</span>      if (rssStub == rss) {<a name="line.3853"></a>
<span class="sourceLineNo">3854</span>        rssStub = null;<a name="line.3854"></a>
<span class="sourceLineNo">3855</span>      }<a name="line.3855"></a>
<span class="sourceLineNo">3856</span>      // re-create the stub if we failed to report the archival<a name="line.3856"></a>
<span class="sourceLineNo">3857</span>      createRegionServerStatusStub(true);<a name="line.3857"></a>
<span class="sourceLineNo">3858</span>      LOG.debug("Failed to report file archival(s) to Master. This will be retried.", ioe);<a name="line.3858"></a>
<span class="sourceLineNo">3859</span>      return false;<a name="line.3859"></a>
<span class="sourceLineNo">3860</span>    }<a name="line.3860"></a>
<span class="sourceLineNo">3861</span>    return true;<a name="line.3861"></a>
<span class="sourceLineNo">3862</span>  }<a name="line.3862"></a>
<span class="sourceLineNo">3863</span><a name="line.3863"></a>
<span class="sourceLineNo">3864</span>  public NettyEventLoopGroupConfig getEventLoopGroupConfig() {<a name="line.3864"></a>
<span class="sourceLineNo">3865</span>    return eventLoopGroupConfig;<a name="line.3865"></a>
<span class="sourceLineNo">3866</span>  }<a name="line.3866"></a>
<span class="sourceLineNo">3867</span><a name="line.3867"></a>
<span class="sourceLineNo">3868</span>  @Override<a name="line.3868"></a>
<span class="sourceLineNo">3869</span>  public Connection createConnection(Configuration conf) throws IOException {<a name="line.3869"></a>
<span class="sourceLineNo">3870</span>    User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3870"></a>
<span class="sourceLineNo">3871</span>    return ConnectionFactory.createConnection(conf, null, user);<a name="line.3871"></a>
<span class="sourceLineNo">3872</span>  }<a name="line.3872"></a>
<span class="sourceLineNo">3873</span><a name="line.3873"></a>
<span class="sourceLineNo">3874</span>  void executeProcedure(long procId, RSProcedureCallable callable) {<a name="line.3874"></a>
<span class="sourceLineNo">3875</span>    executorService.submit(new RSProcedureHandler(this, procId, callable));<a name="line.3875"></a>
<span class="sourceLineNo">3876</span>  }<a name="line.3876"></a>
<span class="sourceLineNo">3877</span><a name="line.3877"></a>
<span class="sourceLineNo">3878</span>  public void remoteProcedureComplete(long procId, Throwable error) {<a name="line.3878"></a>
<span class="sourceLineNo">3879</span>    procedureResultReporter.complete(procId, error);<a name="line.3879"></a>
<span class="sourceLineNo">3880</span>  }<a name="line.3880"></a>
<span class="sourceLineNo">3881</span><a name="line.3881"></a>
<span class="sourceLineNo">3882</span>  void reportProcedureDone(ReportProcedureDoneRequest request) throws IOException {<a name="line.3882"></a>
<span class="sourceLineNo">3883</span>    RegionServerStatusService.BlockingInterface rss;<a name="line.3883"></a>
<span class="sourceLineNo">3884</span>    // TODO: juggling class state with an instance variable, outside of a synchronized block :'(<a name="line.3884"></a>
<span class="sourceLineNo">3885</span>    for (;;) {<a name="line.3885"></a>
<span class="sourceLineNo">3886</span>      rss = rssStub;<a name="line.3886"></a>
<span class="sourceLineNo">3887</span>      if (rss != null) {<a name="line.3887"></a>
<span class="sourceLineNo">3888</span>        break;<a name="line.3888"></a>
<span class="sourceLineNo">3889</span>      }<a name="line.3889"></a>
<span class="sourceLineNo">3890</span>      createRegionServerStatusStub();<a name="line.3890"></a>
<span class="sourceLineNo">3891</span>    }<a name="line.3891"></a>
<span class="sourceLineNo">3892</span>    try {<a name="line.3892"></a>
<span class="sourceLineNo">3893</span>      rss.reportProcedureDone(null, request);<a name="line.3893"></a>
<span class="sourceLineNo">3894</span>    } catch (ServiceException se) {<a name="line.3894"></a>
<span class="sourceLineNo">3895</span>      if (rssStub == rss) {<a name="line.3895"></a>
<span class="sourceLineNo">3896</span>        rssStub = null;<a name="line.3896"></a>
<span class="sourceLineNo">3897</span>      }<a name="line.3897"></a>
<span class="sourceLineNo">3898</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.3898"></a>
<span class="sourceLineNo">3899</span>    }<a name="line.3899"></a>
<span class="sourceLineNo">3900</span>  }<a name="line.3900"></a>
<span class="sourceLineNo">3901</span><a name="line.3901"></a>
<span class="sourceLineNo">3902</span>  /**<a name="line.3902"></a>
<span class="sourceLineNo">3903</span>   * Will ignore the open/close region procedures which already submitted or executed.<a name="line.3903"></a>
<span class="sourceLineNo">3904</span>   *<a name="line.3904"></a>
<span class="sourceLineNo">3905</span>   * When master had unfinished open/close region procedure and restarted, new active master may<a name="line.3905"></a>
<span class="sourceLineNo">3906</span>   * send duplicate open/close region request to regionserver. The open/close request is submitted<a name="line.3906"></a>
<span class="sourceLineNo">3907</span>   * to a thread pool and execute. So first need a cache for submitted open/close region procedures.<a name="line.3907"></a>
<span class="sourceLineNo">3908</span>   *<a name="line.3908"></a>
<span class="sourceLineNo">3909</span>   * After the open/close region request executed and report region transition succeed, cache it in<a name="line.3909"></a>
<span class="sourceLineNo">3910</span>   * executed region procedures cache. See {@link #finishRegionProcedure(long)}. After report region<a name="line.3910"></a>
<span class="sourceLineNo">3911</span>   * transition succeed, master will not send the open/close region request to regionserver again.<a name="line.3911"></a>
<span class="sourceLineNo">3912</span>   * And we thought that the ongoing duplicate open/close region request should not be delayed more<a name="line.3912"></a>
<span class="sourceLineNo">3913</span>   * than 600 seconds. So the executed region procedures cache will expire after 600 seconds.<a name="line.3913"></a>
<span class="sourceLineNo">3914</span>   *<a name="line.3914"></a>
<span class="sourceLineNo">3915</span>   * See HBASE-22404 for more details.<a name="line.3915"></a>
<span class="sourceLineNo">3916</span>   *<a name="line.3916"></a>
<span class="sourceLineNo">3917</span>   * @param procId the id of the open/close region procedure<a name="line.3917"></a>
<span class="sourceLineNo">3918</span>   * @return true if the procedure can be submitted.<a name="line.3918"></a>
<span class="sourceLineNo">3919</span>   */<a name="line.3919"></a>
<span class="sourceLineNo">3920</span>  boolean submitRegionProcedure(long procId) {<a name="line.3920"></a>
<span class="sourceLineNo">3921</span>    if (procId == -1) {<a name="line.3921"></a>
<span class="sourceLineNo">3922</span>      return true;<a name="line.3922"></a>
<span class="sourceLineNo">3923</span>    }<a name="line.3923"></a>
<span class="sourceLineNo">3924</span>    // Ignore the region procedures which already submitted.<a name="line.3924"></a>
<span class="sourceLineNo">3925</span>    Long previous = submittedRegionProcedures.putIfAbsent(procId, procId);<a name="line.3925"></a>
<span class="sourceLineNo">3926</span>    if (previous != null) {<a name="line.3926"></a>
<span class="sourceLineNo">3927</span>      LOG.warn("Received procedure pid={}, which already submitted, just ignore it", procId);<a name="line.3927"></a>
<span class="sourceLineNo">3928</span>      return false;<a name="line.3928"></a>
<span class="sourceLineNo">3929</span>    }<a name="line.3929"></a>
<span class="sourceLineNo">3930</span>    // Ignore the region procedures which already executed.<a name="line.3930"></a>
<span class="sourceLineNo">3931</span>    if (executedRegionProcedures.getIfPresent(procId) != null) {<a name="line.3931"></a>
<span class="sourceLineNo">3932</span>      LOG.warn("Received procedure pid={}, which already executed, just ignore it", procId);<a name="line.3932"></a>
<span class="sourceLineNo">3933</span>      return false;<a name="line.3933"></a>
<span class="sourceLineNo">3934</span>    }<a name="line.3934"></a>
<span class="sourceLineNo">3935</span>    return true;<a name="line.3935"></a>
<span class="sourceLineNo">3936</span>  }<a name="line.3936"></a>
<span class="sourceLineNo">3937</span><a name="line.3937"></a>
<span class="sourceLineNo">3938</span>  /**<a name="line.3938"></a>
<span class="sourceLineNo">3939</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.3939"></a>
<span class="sourceLineNo">3940</span>   * @param procId the id of the open/close region procedure<a name="line.3940"></a>
<span class="sourceLineNo">3941</span>   */<a name="line.3941"></a>
<span class="sourceLineNo">3942</span>  public void finishRegionProcedure(long procId) {<a name="line.3942"></a>
<span class="sourceLineNo">3943</span>    executedRegionProcedures.put(procId, procId);<a name="line.3943"></a>
<span class="sourceLineNo">3944</span>    submittedRegionProcedures.remove(procId);<a name="line.3944"></a>
<span class="sourceLineNo">3945</span>  }<a name="line.3945"></a>
<span class="sourceLineNo">3946</span><a name="line.3946"></a>
<span class="sourceLineNo">3947</span>  public boolean isShutDown() {<a name="line.3947"></a>
<span class="sourceLineNo">3948</span>    return shutDown;<a name="line.3948"></a>
<span class="sourceLineNo">3949</span>  }<a name="line.3949"></a>
<span class="sourceLineNo">3950</span><a name="line.3950"></a>
<span class="sourceLineNo">3951</span>  /**<a name="line.3951"></a>
<span class="sourceLineNo">3952</span>   * Force to terminate region server when abort timeout.<a name="line.3952"></a>
<span class="sourceLineNo">3953</span>   */<a name="line.3953"></a>
<span class="sourceLineNo">3954</span>  private static class SystemExitWhenAbortTimeout extends TimerTask {<a name="line.3954"></a>
<span class="sourceLineNo">3955</span><a name="line.3955"></a>
<span class="sourceLineNo">3956</span>    public SystemExitWhenAbortTimeout() {<a name="line.3956"></a>
<span class="sourceLineNo">3957</span>    }<a name="line.3957"></a>
<span class="sourceLineNo">3958</span><a name="line.3958"></a>
<span class="sourceLineNo">3959</span>    @Override<a name="line.3959"></a>
<span class="sourceLineNo">3960</span>    public void run() {<a name="line.3960"></a>
<span class="sourceLineNo">3961</span>      LOG.warn("Aborting region server timed out, terminating forcibly" +<a name="line.3961"></a>
<span class="sourceLineNo">3962</span>          " and does not wait for any running shutdown hooks or finalizers to finish their work." +<a name="line.3962"></a>
<span class="sourceLineNo">3963</span>          " Thread dump to stdout.");<a name="line.3963"></a>
<span class="sourceLineNo">3964</span>      Threads.printThreadInfo(System.out, "Zombie HRegionServer");<a name="line.3964"></a>
<span class="sourceLineNo">3965</span>      Runtime.getRuntime().halt(1);<a name="line.3965"></a>
<span class="sourceLineNo">3966</span>    }<a name="line.3966"></a>
<span class="sourceLineNo">3967</span>  }<a name="line.3967"></a>
<span class="sourceLineNo">3968</span><a name="line.3968"></a>
<span class="sourceLineNo">3969</span>  @Override<a name="line.3969"></a>
<span class="sourceLineNo">3970</span>  public AsyncClusterConnection getAsyncClusterConnection() {<a name="line.3970"></a>
<span class="sourceLineNo">3971</span>    return asyncClusterConnection;<a name="line.3971"></a>
<span class="sourceLineNo">3972</span>  }<a name="line.3972"></a>
<span class="sourceLineNo">3973</span><a name="line.3973"></a>
<span class="sourceLineNo">3974</span>  @InterfaceAudience.Private<a name="line.3974"></a>
<span class="sourceLineNo">3975</span>  public CompactedHFilesDischarger getCompactedHFilesDischarger() {<a name="line.3975"></a>
<span class="sourceLineNo">3976</span>    return compactedFileDischarger;<a name="line.3976"></a>
<span class="sourceLineNo">3977</span>  }<a name="line.3977"></a>
<span class="sourceLineNo">3978</span><a name="line.3978"></a>
<span class="sourceLineNo">3979</span>  /**<a name="line.3979"></a>
<span class="sourceLineNo">3980</span>   * Return pause time configured in {@link HConstants#HBASE_RPC_SHORTOPERATION_RETRY_PAUSE_TIME}}<a name="line.3980"></a>
<span class="sourceLineNo">3981</span>   * @return pause time<a name="line.3981"></a>
<span class="sourceLineNo">3982</span>   */<a name="line.3982"></a>
<span class="sourceLineNo">3983</span>  @InterfaceAudience.Private<a name="line.3983"></a>
<span class="sourceLineNo">3984</span>  public long getRetryPauseTime() {<a name="line.3984"></a>
<span class="sourceLineNo">3985</span>    return this.retryPauseTime;<a name="line.3985"></a>
<span class="sourceLineNo">3986</span>  }<a name="line.3986"></a>
<span class="sourceLineNo">3987</span>}<a name="line.3987"></a>




























































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