| <!DOCTYPE HTML> |
| <html lang="en"> |
| <head> |
| <!-- Generated by javadoc (17) --> |
| <title>Source code</title> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| <meta name="description" content="source: package: org.apache.hadoop.hbase.master, class: MasterRpcServices"> |
| <meta name="generator" content="javadoc/SourceToHTMLConverter"> |
| <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style"> |
| </head> |
| <body class="source-page"> |
| <main role="main"> |
| <div class="source-container"> |
| <pre><span class="source-line-no">001</span><span id="line-1">/*</span> |
| <span class="source-line-no">002</span><span id="line-2"> * Licensed to the Apache Software Foundation (ASF) under one</span> |
| <span class="source-line-no">003</span><span id="line-3"> * or more contributor license agreements. See the NOTICE file</span> |
| <span class="source-line-no">004</span><span id="line-4"> * distributed with this work for additional information</span> |
| <span class="source-line-no">005</span><span id="line-5"> * regarding copyright ownership. The ASF licenses this file</span> |
| <span class="source-line-no">006</span><span id="line-6"> * to you under the Apache License, Version 2.0 (the</span> |
| <span class="source-line-no">007</span><span id="line-7"> * "License"); you may not use this file except in compliance</span> |
| <span class="source-line-no">008</span><span id="line-8"> * with the License. You may obtain a copy of the License at</span> |
| <span class="source-line-no">009</span><span id="line-9"> *</span> |
| <span class="source-line-no">010</span><span id="line-10"> * http://www.apache.org/licenses/LICENSE-2.0</span> |
| <span class="source-line-no">011</span><span id="line-11"> *</span> |
| <span class="source-line-no">012</span><span id="line-12"> * Unless required by applicable law or agreed to in writing, software</span> |
| <span class="source-line-no">013</span><span id="line-13"> * distributed under the License is distributed on an "AS IS" BASIS,</span> |
| <span class="source-line-no">014</span><span id="line-14"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span> |
| <span class="source-line-no">015</span><span id="line-15"> * See the License for the specific language governing permissions and</span> |
| <span class="source-line-no">016</span><span id="line-16"> * limitations under the License.</span> |
| <span class="source-line-no">017</span><span id="line-17"> */</span> |
| <span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.master;</span> |
| <span class="source-line-no">019</span><span id="line-19"></span> |
| <span class="source-line-no">020</span><span id="line-20">import java.io.IOException;</span> |
| <span class="source-line-no">021</span><span id="line-21">import java.lang.reflect.InvocationTargetException;</span> |
| <span class="source-line-no">022</span><span id="line-22">import java.lang.reflect.Method;</span> |
| <span class="source-line-no">023</span><span id="line-23">import java.net.InetAddress;</span> |
| <span class="source-line-no">024</span><span id="line-24">import java.util.ArrayList;</span> |
| <span class="source-line-no">025</span><span id="line-25">import java.util.Collections;</span> |
| <span class="source-line-no">026</span><span id="line-26">import java.util.HashMap;</span> |
| <span class="source-line-no">027</span><span id="line-27">import java.util.HashSet;</span> |
| <span class="source-line-no">028</span><span id="line-28">import java.util.List;</span> |
| <span class="source-line-no">029</span><span id="line-29">import java.util.Map;</span> |
| <span class="source-line-no">030</span><span id="line-30">import java.util.Map.Entry;</span> |
| <span class="source-line-no">031</span><span id="line-31">import java.util.Optional;</span> |
| <span class="source-line-no">032</span><span id="line-32">import java.util.Set;</span> |
| <span class="source-line-no">033</span><span id="line-33">import java.util.concurrent.CompletableFuture;</span> |
| <span class="source-line-no">034</span><span id="line-34">import java.util.concurrent.ExecutionException;</span> |
| <span class="source-line-no">035</span><span id="line-35">import java.util.concurrent.ThreadLocalRandom;</span> |
| <span class="source-line-no">036</span><span id="line-36">import java.util.stream.Collectors;</span> |
| <span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.conf.Configuration;</span> |
| <span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.ClusterMetricsBuilder;</span> |
| <span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.DoNotRetryIOException;</span> |
| <span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.HBaseRpcServicesBase;</span> |
| <span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.HConstants;</span> |
| <span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.MasterNotRunningException;</span> |
| <span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.MetaTableAccessor;</span> |
| <span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.NamespaceDescriptor;</span> |
| <span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.ServerMetrics;</span> |
| <span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.hbase.ServerMetricsBuilder;</span> |
| <span class="source-line-no">047</span><span id="line-47">import org.apache.hadoop.hbase.ServerName;</span> |
| <span class="source-line-no">048</span><span id="line-48">import org.apache.hadoop.hbase.TableName;</span> |
| <span class="source-line-no">049</span><span id="line-49">import org.apache.hadoop.hbase.UnknownRegionException;</span> |
| <span class="source-line-no">050</span><span id="line-50">import org.apache.hadoop.hbase.client.BalanceRequest;</span> |
| <span class="source-line-no">051</span><span id="line-51">import org.apache.hadoop.hbase.client.BalanceResponse;</span> |
| <span class="source-line-no">052</span><span id="line-52">import org.apache.hadoop.hbase.client.MasterSwitchType;</span> |
| <span class="source-line-no">053</span><span id="line-53">import org.apache.hadoop.hbase.client.NormalizeTableFilterParams;</span> |
| <span class="source-line-no">054</span><span id="line-54">import org.apache.hadoop.hbase.client.RegionInfo;</span> |
| <span class="source-line-no">055</span><span id="line-55">import org.apache.hadoop.hbase.client.Table;</span> |
| <span class="source-line-no">056</span><span id="line-56">import org.apache.hadoop.hbase.client.TableDescriptor;</span> |
| <span class="source-line-no">057</span><span id="line-57">import org.apache.hadoop.hbase.client.TableState;</span> |
| <span class="source-line-no">058</span><span id="line-58">import org.apache.hadoop.hbase.client.VersionInfoUtil;</span> |
| <span class="source-line-no">059</span><span id="line-59">import org.apache.hadoop.hbase.client.replication.ReplicationPeerConfigUtil;</span> |
| <span class="source-line-no">060</span><span id="line-60">import org.apache.hadoop.hbase.coprocessor.MasterCoprocessor;</span> |
| <span class="source-line-no">061</span><span id="line-61">import org.apache.hadoop.hbase.errorhandling.ForeignException;</span> |
| <span class="source-line-no">062</span><span id="line-62">import org.apache.hadoop.hbase.exceptions.UnknownProtocolException;</span> |
| <span class="source-line-no">063</span><span id="line-63">import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;</span> |
| <span class="source-line-no">064</span><span id="line-64">import org.apache.hadoop.hbase.ipc.PriorityFunction;</span> |
| <span class="source-line-no">065</span><span id="line-65">import org.apache.hadoop.hbase.ipc.QosPriority;</span> |
| <span class="source-line-no">066</span><span id="line-66">import org.apache.hadoop.hbase.ipc.RpcServer;</span> |
| <span class="source-line-no">067</span><span id="line-67">import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;</span> |
| <span class="source-line-no">068</span><span id="line-68">import org.apache.hadoop.hbase.ipc.ServerRpcController;</span> |
| <span class="source-line-no">069</span><span id="line-69">import org.apache.hadoop.hbase.master.assignment.AssignmentManager;</span> |
| <span class="source-line-no">070</span><span id="line-70">import org.apache.hadoop.hbase.master.assignment.RegionStateNode;</span> |
| <span class="source-line-no">071</span><span id="line-71">import org.apache.hadoop.hbase.master.assignment.RegionStates;</span> |
| <span class="source-line-no">072</span><span id="line-72">import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;</span> |
| <span class="source-line-no">073</span><span id="line-73">import org.apache.hadoop.hbase.master.hbck.HbckChore;</span> |
| <span class="source-line-no">074</span><span id="line-74">import org.apache.hadoop.hbase.master.janitor.MetaFixer;</span> |
| <span class="source-line-no">075</span><span id="line-75">import org.apache.hadoop.hbase.master.locking.LockProcedure;</span> |
| <span class="source-line-no">076</span><span id="line-76">import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;</span> |
| <span class="source-line-no">077</span><span id="line-77">import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil;</span> |
| <span class="source-line-no">078</span><span id="line-78">import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.NonceProcedureRunnable;</span> |
| <span class="source-line-no">079</span><span id="line-79">import org.apache.hadoop.hbase.master.procedure.RestoreBackupSystemTableProcedure;</span> |
| <span class="source-line-no">080</span><span id="line-80">import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;</span> |
| <span class="source-line-no">081</span><span id="line-81">import org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure;</span> |
| <span class="source-line-no">082</span><span id="line-82">import org.apache.hadoop.hbase.mob.MobUtils;</span> |
| <span class="source-line-no">083</span><span id="line-83">import org.apache.hadoop.hbase.namequeues.BalancerDecisionDetails;</span> |
| <span class="source-line-no">084</span><span id="line-84">import org.apache.hadoop.hbase.namequeues.BalancerRejectionDetails;</span> |
| <span class="source-line-no">085</span><span id="line-85">import org.apache.hadoop.hbase.namequeues.NamedQueueRecorder;</span> |
| <span class="source-line-no">086</span><span id="line-86">import org.apache.hadoop.hbase.namequeues.request.NamedQueueGetRequest;</span> |
| <span class="source-line-no">087</span><span id="line-87">import org.apache.hadoop.hbase.namequeues.response.NamedQueueGetResponse;</span> |
| <span class="source-line-no">088</span><span id="line-88">import org.apache.hadoop.hbase.net.Address;</span> |
| <span class="source-line-no">089</span><span id="line-89">import org.apache.hadoop.hbase.procedure.MasterProcedureManager;</span> |
| <span class="source-line-no">090</span><span id="line-90">import org.apache.hadoop.hbase.procedure2.LockType;</span> |
| <span class="source-line-no">091</span><span id="line-91">import org.apache.hadoop.hbase.procedure2.LockedResource;</span> |
| <span class="source-line-no">092</span><span id="line-92">import org.apache.hadoop.hbase.procedure2.Procedure;</span> |
| <span class="source-line-no">093</span><span id="line-93">import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;</span> |
| <span class="source-line-no">094</span><span id="line-94">import org.apache.hadoop.hbase.procedure2.ProcedureUtil;</span> |
| <span class="source-line-no">095</span><span id="line-95">import org.apache.hadoop.hbase.procedure2.RemoteProcedureException;</span> |
| <span class="source-line-no">096</span><span id="line-96">import org.apache.hadoop.hbase.quotas.MasterQuotaManager;</span> |
| <span class="source-line-no">097</span><span id="line-97">import org.apache.hadoop.hbase.quotas.QuotaObserverChore;</span> |
| <span class="source-line-no">098</span><span id="line-98">import org.apache.hadoop.hbase.quotas.QuotaUtil;</span> |
| <span class="source-line-no">099</span><span id="line-99">import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;</span> |
| <span class="source-line-no">100</span><span id="line-100">import org.apache.hadoop.hbase.regionserver.SimpleRpcSchedulerFactory;</span> |
| <span class="source-line-no">101</span><span id="line-101">import org.apache.hadoop.hbase.replication.ReplicationException;</span> |
| <span class="source-line-no">102</span><span id="line-102">import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;</span> |
| <span class="source-line-no">103</span><span id="line-103">import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;</span> |
| <span class="source-line-no">104</span><span id="line-104">import org.apache.hadoop.hbase.rsgroup.RSGroupInfo;</span> |
| <span class="source-line-no">105</span><span id="line-105">import org.apache.hadoop.hbase.rsgroup.RSGroupUtil;</span> |
| <span class="source-line-no">106</span><span id="line-106">import org.apache.hadoop.hbase.security.Superusers;</span> |
| <span class="source-line-no">107</span><span id="line-107">import org.apache.hadoop.hbase.security.User;</span> |
| <span class="source-line-no">108</span><span id="line-108">import org.apache.hadoop.hbase.security.access.AccessChecker;</span> |
| <span class="source-line-no">109</span><span id="line-109">import org.apache.hadoop.hbase.security.access.AccessChecker.InputUser;</span> |
| <span class="source-line-no">110</span><span id="line-110">import org.apache.hadoop.hbase.security.access.AccessController;</span> |
| <span class="source-line-no">111</span><span id="line-111">import org.apache.hadoop.hbase.security.access.Permission;</span> |
| <span class="source-line-no">112</span><span id="line-112">import org.apache.hadoop.hbase.security.access.Permission.Action;</span> |
| <span class="source-line-no">113</span><span id="line-113">import org.apache.hadoop.hbase.security.access.PermissionStorage;</span> |
| <span class="source-line-no">114</span><span id="line-114">import org.apache.hadoop.hbase.security.access.ShadedAccessControlUtil;</span> |
| <span class="source-line-no">115</span><span id="line-115">import org.apache.hadoop.hbase.security.access.UserPermission;</span> |
| <span class="source-line-no">116</span><span id="line-116">import org.apache.hadoop.hbase.security.visibility.VisibilityController;</span> |
| <span class="source-line-no">117</span><span id="line-117">import org.apache.hadoop.hbase.snapshot.ClientSnapshotDescriptionUtils;</span> |
| <span class="source-line-no">118</span><span id="line-118">import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils;</span> |
| <span class="source-line-no">119</span><span id="line-119">import org.apache.hadoop.hbase.util.Bytes;</span> |
| <span class="source-line-no">120</span><span id="line-120">import org.apache.hadoop.hbase.util.DNS;</span> |
| <span class="source-line-no">121</span><span id="line-121">import org.apache.hadoop.hbase.util.DNS.ServerType;</span> |
| <span class="source-line-no">122</span><span id="line-122">import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;</span> |
| <span class="source-line-no">123</span><span id="line-123">import org.apache.hadoop.hbase.util.ForeignExceptionUtil;</span> |
| <span class="source-line-no">124</span><span id="line-124">import org.apache.hadoop.hbase.util.Pair;</span> |
| <span class="source-line-no">125</span><span id="line-125">import org.apache.hadoop.hbase.zookeeper.ZKWatcher;</span> |
| <span class="source-line-no">126</span><span id="line-126">import org.apache.yetus.audience.InterfaceAudience;</span> |
| <span class="source-line-no">127</span><span id="line-127">import org.slf4j.Logger;</span> |
| <span class="source-line-no">128</span><span id="line-128">import org.slf4j.LoggerFactory;</span> |
| <span class="source-line-no">129</span><span id="line-129"></span> |
| <span class="source-line-no">130</span><span id="line-130">import org.apache.hbase.thirdparty.com.google.common.collect.Sets;</span> |
| <span class="source-line-no">131</span><span id="line-131">import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;</span> |
| <span class="source-line-no">132</span><span id="line-132">import org.apache.hbase.thirdparty.com.google.protobuf.Descriptors.MethodDescriptor;</span> |
| <span class="source-line-no">133</span><span id="line-133">import org.apache.hbase.thirdparty.com.google.protobuf.Descriptors.ServiceDescriptor;</span> |
| <span class="source-line-no">134</span><span id="line-134">import org.apache.hbase.thirdparty.com.google.protobuf.Message;</span> |
| <span class="source-line-no">135</span><span id="line-135">import org.apache.hbase.thirdparty.com.google.protobuf.RpcController;</span> |
| <span class="source-line-no">136</span><span id="line-136">import org.apache.hbase.thirdparty.com.google.protobuf.Service;</span> |
| <span class="source-line-no">137</span><span id="line-137">import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;</span> |
| <span class="source-line-no">138</span><span id="line-138">import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;</span> |
| <span class="source-line-no">139</span><span id="line-139"></span> |
| <span class="source-line-no">140</span><span id="line-140">import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;</span> |
| <span class="source-line-no">141</span><span id="line-141">import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;</span> |
| <span class="source-line-no">142</span><span id="line-142">import org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos;</span> |
| <span class="source-line-no">143</span><span id="line-143">import org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.AccessControlService;</span> |
| <span class="source-line-no">144</span><span id="line-144">import org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.GetUserPermissionsRequest;</span> |
| <span class="source-line-no">145</span><span id="line-145">import org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.GetUserPermissionsResponse;</span> |
| <span class="source-line-no">146</span><span id="line-146">import org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.GrantRequest;</span> |
| <span class="source-line-no">147</span><span id="line-147">import org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.GrantResponse;</span> |
| <span class="source-line-no">148</span><span id="line-148">import org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.HasUserPermissionsRequest;</span> |
| <span class="source-line-no">149</span><span id="line-149">import org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.HasUserPermissionsResponse;</span> |
| <span class="source-line-no">150</span><span id="line-150">import org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission.Type;</span> |
| <span class="source-line-no">151</span><span id="line-151">import org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.RevokeRequest;</span> |
| <span class="source-line-no">152</span><span id="line-152">import org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.RevokeResponse;</span> |
| <span class="source-line-no">153</span><span id="line-153">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;</span> |
| <span class="source-line-no">154</span><span id="line-154">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;</span> |
| <span class="source-line-no">155</span><span id="line-155">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;</span> |
| <span class="source-line-no">156</span><span id="line-156">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheRequest;</span> |
| <span class="source-line-no">157</span><span id="line-157">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheResponse;</span> |
| <span class="source-line-no">158</span><span id="line-158">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;</span> |
| <span class="source-line-no">159</span><span id="line-159">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;</span> |
| <span class="source-line-no">160</span><span id="line-160">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;</span> |
| <span class="source-line-no">161</span><span id="line-161">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;</span> |
| <span class="source-line-no">162</span><span id="line-162">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactionSwitchRequest;</span> |
| <span class="source-line-no">163</span><span id="line-163">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactionSwitchResponse;</span> |
| <span class="source-line-no">164</span><span id="line-164">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;</span> |
| <span class="source-line-no">165</span><span id="line-165">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;</span> |
| <span class="source-line-no">166</span><span id="line-166">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;</span> |
| <span class="source-line-no">167</span><span id="line-167">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;</span> |
| <span class="source-line-no">168</span><span id="line-168">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetCachedFilesListRequest;</span> |
| <span class="source-line-no">169</span><span id="line-169">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetCachedFilesListResponse;</span> |
| <span class="source-line-no">170</span><span id="line-170">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;</span> |
| <span class="source-line-no">171</span><span id="line-171">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;</span> |
| <span class="source-line-no">172</span><span id="line-172">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;</span> |
| <span class="source-line-no">173</span><span id="line-173">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;</span> |
| <span class="source-line-no">174</span><span id="line-174">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;</span> |
| <span class="source-line-no">175</span><span id="line-175">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;</span> |
| <span class="source-line-no">176</span><span id="line-176">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;</span> |
| <span class="source-line-no">177</span><span id="line-177">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;</span> |
| <span class="source-line-no">178</span><span id="line-178">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest;</span> |
| <span class="source-line-no">179</span><span id="line-179">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse;</span> |
| <span class="source-line-no">180</span><span id="line-180">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;</span> |
| <span class="source-line-no">181</span><span id="line-181">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;</span> |
| <span class="source-line-no">182</span><span id="line-182">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;</span> |
| <span class="source-line-no">183</span><span id="line-183">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;</span> |
| <span class="source-line-no">184</span><span id="line-184">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest;</span> |
| <span class="source-line-no">185</span><span id="line-185">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse;</span> |
| <span class="source-line-no">186</span><span id="line-186">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest;</span> |
| <span class="source-line-no">187</span><span id="line-187">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse;</span> |
| <span class="source-line-no">188</span><span id="line-188">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;</span> |
| <span class="source-line-no">189</span><span id="line-189">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;</span> |
| <span class="source-line-no">190</span><span id="line-190">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest;</span> |
| <span class="source-line-no">191</span><span id="line-191">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse;</span> |
| <span class="source-line-no">192</span><span id="line-192">import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;</span> |
| <span class="source-line-no">193</span><span id="line-193">import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;</span> |
| <span class="source-line-no">194</span><span id="line-194">import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds;</span> |
| <span class="source-line-no">195</span><span id="line-195">import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;</span> |
| <span class="source-line-no">196</span><span id="line-196">import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameStringPair;</span> |
| <span class="source-line-no">197</span><span id="line-197">import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ProcedureDescription;</span> |
| <span class="source-line-no">198</span><span id="line-198">import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;</span> |
| <span class="source-line-no">199</span><span id="line-199">import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;</span> |
| <span class="source-line-no">200</span><span id="line-200">import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.VersionInfo;</span> |
| <span class="source-line-no">201</span><span id="line-201">import org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockHeartbeatRequest;</span> |
| <span class="source-line-no">202</span><span id="line-202">import org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockHeartbeatResponse;</span> |
| <span class="source-line-no">203</span><span id="line-203">import org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockRequest;</span> |
| <span class="source-line-no">204</span><span id="line-204">import org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockResponse;</span> |
| <span class="source-line-no">205</span><span id="line-205">import org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockService;</span> |
| <span class="source-line-no">206</span><span id="line-206">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos;</span> |
| <span class="source-line-no">207</span><span id="line-207">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AbortProcedureRequest;</span> |
| <span class="source-line-no">208</span><span id="line-208">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AbortProcedureResponse;</span> |
| <span class="source-line-no">209</span><span id="line-209">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AddColumnRequest;</span> |
| <span class="source-line-no">210</span><span id="line-210">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AddColumnResponse;</span> |
| <span class="source-line-no">211</span><span id="line-211">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AssignRegionRequest;</span> |
| <span class="source-line-no">212</span><span id="line-212">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AssignRegionResponse;</span> |
| <span class="source-line-no">213</span><span id="line-213">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ClearDeadServersRequest;</span> |
| <span class="source-line-no">214</span><span id="line-214">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ClearDeadServersResponse;</span> |
| <span class="source-line-no">215</span><span id="line-215">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateNamespaceRequest;</span> |
| <span class="source-line-no">216</span><span id="line-216">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateNamespaceResponse;</span> |
| <span class="source-line-no">217</span><span id="line-217">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateTableRequest;</span> |
| <span class="source-line-no">218</span><span id="line-218">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateTableResponse;</span> |
| <span class="source-line-no">219</span><span id="line-219">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersRequest;</span> |
| <span class="source-line-no">220</span><span id="line-220">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersResponse;</span> |
| <span class="source-line-no">221</span><span id="line-221">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteColumnRequest;</span> |
| <span class="source-line-no">222</span><span id="line-222">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteColumnResponse;</span> |
| <span class="source-line-no">223</span><span id="line-223">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteNamespaceRequest;</span> |
| <span class="source-line-no">224</span><span id="line-224">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteNamespaceResponse;</span> |
| <span class="source-line-no">225</span><span id="line-225">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteSnapshotRequest;</span> |
| <span class="source-line-no">226</span><span id="line-226">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteSnapshotResponse;</span> |
| <span class="source-line-no">227</span><span id="line-227">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteTableRequest;</span> |
| <span class="source-line-no">228</span><span id="line-228">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteTableResponse;</span> |
| <span class="source-line-no">229</span><span id="line-229">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DisableTableRequest;</span> |
| <span class="source-line-no">230</span><span id="line-230">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DisableTableResponse;</span> |
| <span class="source-line-no">231</span><span id="line-231">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.EnableCatalogJanitorRequest;</span> |
| <span class="source-line-no">232</span><span id="line-232">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.EnableCatalogJanitorResponse;</span> |
| <span class="source-line-no">233</span><span id="line-233">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.EnableTableRequest;</span> |
| <span class="source-line-no">234</span><span id="line-234">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.EnableTableResponse;</span> |
| <span class="source-line-no">235</span><span id="line-235">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ExecProcedureRequest;</span> |
| <span class="source-line-no">236</span><span id="line-236">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ExecProcedureResponse;</span> |
| <span class="source-line-no">237</span><span id="line-237">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.FixMetaRequest;</span> |
| <span class="source-line-no">238</span><span id="line-238">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.FixMetaResponse;</span> |
| <span class="source-line-no">239</span><span id="line-239">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.FlushMasterStoreRequest;</span> |
| <span class="source-line-no">240</span><span id="line-240">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.FlushMasterStoreResponse;</span> |
| <span class="source-line-no">241</span><span id="line-241">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.FlushTableRequest;</span> |
| <span class="source-line-no">242</span><span id="line-242">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.FlushTableResponse;</span> |
| <span class="source-line-no">243</span><span id="line-243">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetClusterStatusRequest;</span> |
| <span class="source-line-no">244</span><span id="line-244">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetClusterStatusResponse;</span> |
| <span class="source-line-no">245</span><span id="line-245">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetCompletedSnapshotsRequest;</span> |
| <span class="source-line-no">246</span><span id="line-246">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetCompletedSnapshotsResponse;</span> |
| <span class="source-line-no">247</span><span id="line-247">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetLocksRequest;</span> |
| <span class="source-line-no">248</span><span id="line-248">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetLocksResponse;</span> |
| <span class="source-line-no">249</span><span id="line-249">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetNamespaceDescriptorRequest;</span> |
| <span class="source-line-no">250</span><span id="line-250">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetNamespaceDescriptorResponse;</span> |
| <span class="source-line-no">251</span><span id="line-251">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProcedureResultRequest;</span> |
| <span class="source-line-no">252</span><span id="line-252">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProcedureResultResponse;</span> |
| <span class="source-line-no">253</span><span id="line-253">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProceduresRequest;</span> |
| <span class="source-line-no">254</span><span id="line-254">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProceduresResponse;</span> |
| <span class="source-line-no">255</span><span id="line-255">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetSchemaAlterStatusRequest;</span> |
| <span class="source-line-no">256</span><span id="line-256">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetSchemaAlterStatusResponse;</span> |
| <span class="source-line-no">257</span><span id="line-257">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableDescriptorsRequest;</span> |
| <span class="source-line-no">258</span><span id="line-258">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableDescriptorsResponse;</span> |
| <span class="source-line-no">259</span><span id="line-259">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableNamesRequest;</span> |
| <span class="source-line-no">260</span><span id="line-260">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableNamesResponse;</span> |
| <span class="source-line-no">261</span><span id="line-261">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableStateRequest;</span> |
| <span class="source-line-no">262</span><span id="line-262">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableStateResponse;</span> |
| <span class="source-line-no">263</span><span id="line-263">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.HbckService;</span> |
| <span class="source-line-no">264</span><span id="line-264">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledRequest;</span> |
| <span class="source-line-no">265</span><span id="line-265">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledResponse;</span> |
| <span class="source-line-no">266</span><span id="line-266">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsCatalogJanitorEnabledRequest;</span> |
| <span class="source-line-no">267</span><span id="line-267">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsCatalogJanitorEnabledResponse;</span> |
| <span class="source-line-no">268</span><span id="line-268">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsCleanerChoreEnabledRequest;</span> |
| <span class="source-line-no">269</span><span id="line-269">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsCleanerChoreEnabledResponse;</span> |
| <span class="source-line-no">270</span><span id="line-270">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsInMaintenanceModeRequest;</span> |
| <span class="source-line-no">271</span><span id="line-271">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsInMaintenanceModeResponse;</span> |
| <span class="source-line-no">272</span><span id="line-272">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsMasterRunningRequest;</span> |
| <span class="source-line-no">273</span><span id="line-273">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsMasterRunningResponse;</span> |
| <span class="source-line-no">274</span><span id="line-274">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledRequest;</span> |
| <span class="source-line-no">275</span><span id="line-275">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledResponse;</span> |
| <span class="source-line-no">276</span><span id="line-276">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsProcedureDoneRequest;</span> |
| <span class="source-line-no">277</span><span id="line-277">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsProcedureDoneResponse;</span> |
| <span class="source-line-no">278</span><span id="line-278">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsSnapshotCleanupEnabledRequest;</span> |
| <span class="source-line-no">279</span><span id="line-279">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsSnapshotCleanupEnabledResponse;</span> |
| <span class="source-line-no">280</span><span id="line-280">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsSnapshotDoneRequest;</span> |
| <span class="source-line-no">281</span><span id="line-281">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsSnapshotDoneResponse;</span> |
| <span class="source-line-no">282</span><span id="line-282">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsSplitOrMergeEnabledRequest;</span> |
| <span class="source-line-no">283</span><span id="line-283">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsSplitOrMergeEnabledResponse;</span> |
| <span class="source-line-no">284</span><span id="line-284">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersRequest;</span> |
| <span class="source-line-no">285</span><span id="line-285">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersResponse;</span> |
| <span class="source-line-no">286</span><span id="line-286">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListNamespaceDescriptorsRequest;</span> |
| <span class="source-line-no">287</span><span id="line-287">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListNamespaceDescriptorsResponse;</span> |
| <span class="source-line-no">288</span><span id="line-288">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListNamespacesRequest;</span> |
| <span class="source-line-no">289</span><span id="line-289">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListNamespacesResponse;</span> |
| <span class="source-line-no">290</span><span id="line-290">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListTableDescriptorsByNamespaceRequest;</span> |
| <span class="source-line-no">291</span><span id="line-291">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListTableDescriptorsByNamespaceResponse;</span> |
| <span class="source-line-no">292</span><span id="line-292">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListTableDescriptorsByStateRequest;</span> |
| <span class="source-line-no">293</span><span id="line-293">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListTableDescriptorsByStateResponse;</span> |
| <span class="source-line-no">294</span><span id="line-294">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListTableNamesByNamespaceRequest;</span> |
| <span class="source-line-no">295</span><span id="line-295">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListTableNamesByNamespaceResponse;</span> |
| <span class="source-line-no">296</span><span id="line-296">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListTableNamesByStateRequest;</span> |
| <span class="source-line-no">297</span><span id="line-297">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListTableNamesByStateResponse;</span> |
| <span class="source-line-no">298</span><span id="line-298">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MajorCompactionTimestampForRegionRequest;</span> |
| <span class="source-line-no">299</span><span id="line-299">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MajorCompactionTimestampRequest;</span> |
| <span class="source-line-no">300</span><span id="line-300">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MajorCompactionTimestampResponse;</span> |
| <span class="source-line-no">301</span><span id="line-301">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService;</span> |
| <span class="source-line-no">302</span><span id="line-302">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MergeTableRegionsRequest;</span> |
| <span class="source-line-no">303</span><span id="line-303">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MergeTableRegionsResponse;</span> |
| <span class="source-line-no">304</span><span id="line-304">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnRequest;</span> |
| <span class="source-line-no">305</span><span id="line-305">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnResponse;</span> |
| <span class="source-line-no">306</span><span id="line-306">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnStoreFileTrackerRequest;</span> |
| <span class="source-line-no">307</span><span id="line-307">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnStoreFileTrackerResponse;</span> |
| <span class="source-line-no">308</span><span id="line-308">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyNamespaceRequest;</span> |
| <span class="source-line-no">309</span><span id="line-309">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyNamespaceResponse;</span> |
| <span class="source-line-no">310</span><span id="line-310">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyTableRequest;</span> |
| <span class="source-line-no">311</span><span id="line-311">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyTableResponse;</span> |
| <span class="source-line-no">312</span><span id="line-312">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyTableStoreFileTrackerRequest;</span> |
| <span class="source-line-no">313</span><span id="line-313">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyTableStoreFileTrackerResponse;</span> |
| <span class="source-line-no">314</span><span id="line-314">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MoveRegionRequest;</span> |
| <span class="source-line-no">315</span><span id="line-315">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MoveRegionResponse;</span> |
| <span class="source-line-no">316</span><span id="line-316">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeRequest;</span> |
| <span class="source-line-no">317</span><span id="line-317">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeResponse;</span> |
| <span class="source-line-no">318</span><span id="line-318">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.OfflineRegionRequest;</span> |
| <span class="source-line-no">319</span><span id="line-319">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.OfflineRegionResponse;</span> |
| <span class="source-line-no">320</span><span id="line-320">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerRequest;</span> |
| <span class="source-line-no">321</span><span id="line-321">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerResponse;</span> |
| <span class="source-line-no">322</span><span id="line-322">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RegionSpecifierAndState;</span> |
| <span class="source-line-no">323</span><span id="line-323">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RestoreSnapshotRequest;</span> |
| <span class="source-line-no">324</span><span id="line-324">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RestoreSnapshotResponse;</span> |
| <span class="source-line-no">325</span><span id="line-325">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RollAllWALWritersRequest;</span> |
| <span class="source-line-no">326</span><span id="line-326">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RollAllWALWritersResponse;</span> |
| <span class="source-line-no">327</span><span id="line-327">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RunCatalogScanRequest;</span> |
| <span class="source-line-no">328</span><span id="line-328">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RunCatalogScanResponse;</span> |
| <span class="source-line-no">329</span><span id="line-329">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RunCleanerChoreRequest;</span> |
| <span class="source-line-no">330</span><span id="line-330">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RunCleanerChoreResponse;</span> |
| <span class="source-line-no">331</span><span id="line-331">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RunHbckChoreRequest;</span> |
| <span class="source-line-no">332</span><span id="line-332">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RunHbckChoreResponse;</span> |
| <span class="source-line-no">333</span><span id="line-333">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesRequest;</span> |
| <span class="source-line-no">334</span><span id="line-334">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesResponse;</span> |
| <span class="source-line-no">335</span><span id="line-335">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetBalancerRunningRequest;</span> |
| <span class="source-line-no">336</span><span id="line-336">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetBalancerRunningResponse;</span> |
| <span class="source-line-no">337</span><span id="line-337">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetCleanerChoreRunningRequest;</span> |
| <span class="source-line-no">338</span><span id="line-338">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetCleanerChoreRunningResponse;</span> |
| <span class="source-line-no">339</span><span id="line-339">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningRequest;</span> |
| <span class="source-line-no">340</span><span id="line-340">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningResponse;</span> |
| <span class="source-line-no">341</span><span id="line-341">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetQuotaRequest;</span> |
| <span class="source-line-no">342</span><span id="line-342">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetQuotaResponse;</span> |
| <span class="source-line-no">343</span><span id="line-343">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetRegionStateInMetaRequest;</span> |
| <span class="source-line-no">344</span><span id="line-344">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetRegionStateInMetaResponse;</span> |
| <span class="source-line-no">345</span><span id="line-345">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetSnapshotCleanupRequest;</span> |
| <span class="source-line-no">346</span><span id="line-346">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetSnapshotCleanupResponse;</span> |
| <span class="source-line-no">347</span><span id="line-347">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetSplitOrMergeEnabledRequest;</span> |
| <span class="source-line-no">348</span><span id="line-348">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetSplitOrMergeEnabledResponse;</span> |
| <span class="source-line-no">349</span><span id="line-349">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetTableStateInMetaRequest;</span> |
| <span class="source-line-no">350</span><span id="line-350">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ShutdownRequest;</span> |
| <span class="source-line-no">351</span><span id="line-351">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ShutdownResponse;</span> |
| <span class="source-line-no">352</span><span id="line-352">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SnapshotRequest;</span> |
| <span class="source-line-no">353</span><span id="line-353">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SnapshotResponse;</span> |
| <span class="source-line-no">354</span><span id="line-354">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SplitTableRegionRequest;</span> |
| <span class="source-line-no">355</span><span id="line-355">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SplitTableRegionResponse;</span> |
| <span class="source-line-no">356</span><span id="line-356">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.StopMasterRequest;</span> |
| <span class="source-line-no">357</span><span id="line-357">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.StopMasterResponse;</span> |
| <span class="source-line-no">358</span><span id="line-358">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SwitchExceedThrottleQuotaRequest;</span> |
| <span class="source-line-no">359</span><span id="line-359">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SwitchExceedThrottleQuotaResponse;</span> |
| <span class="source-line-no">360</span><span id="line-360">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SwitchRpcThrottleRequest;</span> |
| <span class="source-line-no">361</span><span id="line-361">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SwitchRpcThrottleResponse;</span> |
| <span class="source-line-no">362</span><span id="line-362">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.TruncateTableRequest;</span> |
| <span class="source-line-no">363</span><span id="line-363">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.TruncateTableResponse;</span> |
| <span class="source-line-no">364</span><span id="line-364">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.UnassignRegionRequest;</span> |
| <span class="source-line-no">365</span><span id="line-365">import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.UnassignRegionResponse;</span> |
| <span class="source-line-no">366</span><span id="line-366">import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesRequest;</span> |
| <span class="source-line-no">367</span><span id="line-367">import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesResponse;</span> |
| <span class="source-line-no">368</span><span id="line-368">import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesResponse.NamespaceQuotaSnapshot;</span> |
| <span class="source-line-no">369</span><span id="line-369">import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesResponse.TableQuotaSnapshot;</span> |
| <span class="source-line-no">370</span><span id="line-370">import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesRequest;</span> |
| <span class="source-line-no">371</span><span id="line-371">import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesResponse;</span> |
| <span class="source-line-no">372</span><span id="line-372">import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesResponse.RegionSizes;</span> |
| <span class="source-line-no">373</span><span id="line-373">import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest;</span> |
| <span class="source-line-no">374</span><span id="line-374">import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse;</span> |
| <span class="source-line-no">375</span><span id="line-375">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.AddRSGroupRequest;</span> |
| <span class="source-line-no">376</span><span id="line-376">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.AddRSGroupResponse;</span> |
| <span class="source-line-no">377</span><span id="line-377">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.BalanceRSGroupRequest;</span> |
| <span class="source-line-no">378</span><span id="line-378">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.BalanceRSGroupResponse;</span> |
| <span class="source-line-no">379</span><span id="line-379">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.GetConfiguredNamespacesAndTablesInRSGroupRequest;</span> |
| <span class="source-line-no">380</span><span id="line-380">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.GetConfiguredNamespacesAndTablesInRSGroupResponse;</span> |
| <span class="source-line-no">381</span><span id="line-381">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfServerRequest;</span> |
| <span class="source-line-no">382</span><span id="line-382">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfServerResponse;</span> |
| <span class="source-line-no">383</span><span id="line-383">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfTableRequest;</span> |
| <span class="source-line-no">384</span><span id="line-384">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfTableResponse;</span> |
| <span class="source-line-no">385</span><span id="line-385">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoRequest;</span> |
| <span class="source-line-no">386</span><span id="line-386">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoResponse;</span> |
| <span class="source-line-no">387</span><span id="line-387">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.ListRSGroupInfosRequest;</span> |
| <span class="source-line-no">388</span><span id="line-388">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.ListRSGroupInfosResponse;</span> |
| <span class="source-line-no">389</span><span id="line-389">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.ListTablesInRSGroupRequest;</span> |
| <span class="source-line-no">390</span><span id="line-390">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.ListTablesInRSGroupResponse;</span> |
| <span class="source-line-no">391</span><span id="line-391">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.MoveServersRequest;</span> |
| <span class="source-line-no">392</span><span id="line-392">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.MoveServersResponse;</span> |
| <span class="source-line-no">393</span><span id="line-393">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.RemoveRSGroupRequest;</span> |
| <span class="source-line-no">394</span><span id="line-394">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.RemoveRSGroupResponse;</span> |
| <span class="source-line-no">395</span><span id="line-395">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.RemoveServersRequest;</span> |
| <span class="source-line-no">396</span><span id="line-396">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.RemoveServersResponse;</span> |
| <span class="source-line-no">397</span><span id="line-397">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.RenameRSGroupRequest;</span> |
| <span class="source-line-no">398</span><span id="line-398">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.RenameRSGroupResponse;</span> |
| <span class="source-line-no">399</span><span id="line-399">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.UpdateRSGroupConfigRequest;</span> |
| <span class="source-line-no">400</span><span id="line-400">import org.apache.hadoop.hbase.shaded.protobuf.generated.RSGroupAdminProtos.UpdateRSGroupConfigResponse;</span> |
| <span class="source-line-no">401</span><span id="line-401">import org.apache.hadoop.hbase.shaded.protobuf.generated.RecentLogs;</span> |
| <span class="source-line-no">402</span><span id="line-402">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos;</span> |
| <span class="source-line-no">403</span><span id="line-403">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.FileArchiveNotificationRequest;</span> |
| <span class="source-line-no">404</span><span id="line-404">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.FileArchiveNotificationResponse;</span> |
| <span class="source-line-no">405</span><span id="line-405">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.GetLastFlushedSequenceIdRequest;</span> |
| <span class="source-line-no">406</span><span id="line-406">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.GetLastFlushedSequenceIdResponse;</span> |
| <span class="source-line-no">407</span><span id="line-407">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.GetLiveRegionServersRequest;</span> |
| <span class="source-line-no">408</span><span id="line-408">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.GetLiveRegionServersResponse;</span> |
| <span class="source-line-no">409</span><span id="line-409">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerReportRequest;</span> |
| <span class="source-line-no">410</span><span id="line-410">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerReportResponse;</span> |
| <span class="source-line-no">411</span><span id="line-411">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupRequest;</span> |
| <span class="source-line-no">412</span><span id="line-412">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse;</span> |
| <span class="source-line-no">413</span><span id="line-413">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService;</span> |
| <span class="source-line-no">414</span><span id="line-414">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUse;</span> |
| <span class="source-line-no">415</span><span id="line-415">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUseReportRequest;</span> |
| <span class="source-line-no">416</span><span id="line-416">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUseReportResponse;</span> |
| <span class="source-line-no">417</span><span id="line-417">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RemoteProcedureResult;</span> |
| <span class="source-line-no">418</span><span id="line-418">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneRequest;</span> |
| <span class="source-line-no">419</span><span id="line-419">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneResponse;</span> |
| <span class="source-line-no">420</span><span id="line-420">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRSFatalErrorRequest;</span> |
| <span class="source-line-no">421</span><span id="line-421">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRSFatalErrorResponse;</span> |
| <span class="source-line-no">422</span><span id="line-422">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;</span> |
| <span class="source-line-no">423</span><span id="line-423">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;</span> |
| <span class="source-line-no">424</span><span id="line-424">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.ClientMetaService;</span> |
| <span class="source-line-no">425</span><span id="line-425">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerRequest;</span> |
| <span class="source-line-no">426</span><span id="line-426">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerResponse;</span> |
| <span class="source-line-no">427</span><span id="line-427">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerRequest;</span> |
| <span class="source-line-no">428</span><span id="line-428">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerResponse;</span> |
| <span class="source-line-no">429</span><span id="line-429">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerRequest;</span> |
| <span class="source-line-no">430</span><span id="line-430">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerResponse;</span> |
| <span class="source-line-no">431</span><span id="line-431">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigRequest;</span> |
| <span class="source-line-no">432</span><span id="line-432">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse;</span> |
| <span class="source-line-no">433</span><span id="line-433">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerModificationProceduresRequest;</span> |
| <span class="source-line-no">434</span><span id="line-434">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerModificationProceduresResponse;</span> |
| <span class="source-line-no">435</span><span id="line-435">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerStateRequest;</span> |
| <span class="source-line-no">436</span><span id="line-436">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerStateResponse;</span> |
| <span class="source-line-no">437</span><span id="line-437">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.IsReplicationPeerModificationEnabledRequest;</span> |
| <span class="source-line-no">438</span><span id="line-438">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.IsReplicationPeerModificationEnabledResponse;</span> |
| <span class="source-line-no">439</span><span id="line-439">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersRequest;</span> |
| <span class="source-line-no">440</span><span id="line-440">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersResponse;</span> |
| <span class="source-line-no">441</span><span id="line-441">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerRequest;</span> |
| <span class="source-line-no">442</span><span id="line-442">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerResponse;</span> |
| <span class="source-line-no">443</span><span id="line-443">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ReplicationPeerModificationSwitchRequest;</span> |
| <span class="source-line-no">444</span><span id="line-444">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ReplicationPeerModificationSwitchResponse;</span> |
| <span class="source-line-no">445</span><span id="line-445">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ReplicationState;</span> |
| <span class="source-line-no">446</span><span id="line-446">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateRequest;</span> |
| <span class="source-line-no">447</span><span id="line-447">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateResponse;</span> |
| <span class="source-line-no">448</span><span id="line-448">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigRequest;</span> |
| <span class="source-line-no">449</span><span id="line-449">import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigResponse;</span> |
| <span class="source-line-no">450</span><span id="line-450">import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;</span> |
| <span class="source-line-no">451</span><span id="line-451">import org.apache.hadoop.hbase.shaded.protobuf.generated.VisibilityLabelsProtos.VisibilityLabelsService;</span> |
| <span class="source-line-no">452</span><span id="line-452"></span> |
| <span class="source-line-no">453</span><span id="line-453">/**</span> |
| <span class="source-line-no">454</span><span id="line-454"> * Implements the master RPC services.</span> |
| <span class="source-line-no">455</span><span id="line-455"> */</span> |
| <span class="source-line-no">456</span><span id="line-456">@InterfaceAudience.Private</span> |
| <span class="source-line-no">457</span><span id="line-457">public class MasterRpcServices extends HBaseRpcServicesBase<HMaster></span> |
| <span class="source-line-no">458</span><span id="line-458"> implements MasterService.BlockingInterface, RegionServerStatusService.BlockingInterface,</span> |
| <span class="source-line-no">459</span><span id="line-459"> LockService.BlockingInterface, HbckService.BlockingInterface {</span> |
| <span class="source-line-no">460</span><span id="line-460"></span> |
| <span class="source-line-no">461</span><span id="line-461"> private static final Logger LOG = LoggerFactory.getLogger(MasterRpcServices.class.getName());</span> |
| <span class="source-line-no">462</span><span id="line-462"> private static final Logger AUDITLOG =</span> |
| <span class="source-line-no">463</span><span id="line-463"> LoggerFactory.getLogger("SecurityLogger." + MasterRpcServices.class.getName());</span> |
| <span class="source-line-no">464</span><span id="line-464"></span> |
| <span class="source-line-no">465</span><span id="line-465"> /** RPC scheduler to use for the master. */</span> |
| <span class="source-line-no">466</span><span id="line-466"> public static final String MASTER_RPC_SCHEDULER_FACTORY_CLASS =</span> |
| <span class="source-line-no">467</span><span id="line-467"> "hbase.master.rpc.scheduler.factory.class";</span> |
| <span class="source-line-no">468</span><span id="line-468"></span> |
| <span class="source-line-no">469</span><span id="line-469"> /**</span> |
| <span class="source-line-no">470</span><span id="line-470"> * @return Subset of configuration to pass initializing regionservers: e.g. the filesystem to use</span> |
| <span class="source-line-no">471</span><span id="line-471"> * and root directory to use.</span> |
| <span class="source-line-no">472</span><span id="line-472"> */</span> |
| <span class="source-line-no">473</span><span id="line-473"> private RegionServerStartupResponse.Builder createConfigurationSubset() {</span> |
| <span class="source-line-no">474</span><span id="line-474"> RegionServerStartupResponse.Builder resp =</span> |
| <span class="source-line-no">475</span><span id="line-475"> addConfig(RegionServerStartupResponse.newBuilder(), HConstants.HBASE_DIR);</span> |
| <span class="source-line-no">476</span><span id="line-476"> resp = addConfig(resp, "fs.defaultFS");</span> |
| <span class="source-line-no">477</span><span id="line-477"> return addConfig(resp, "hbase.master.info.port");</span> |
| <span class="source-line-no">478</span><span id="line-478"> }</span> |
| <span class="source-line-no">479</span><span id="line-479"></span> |
| <span class="source-line-no">480</span><span id="line-480"> private RegionServerStartupResponse.Builder</span> |
| <span class="source-line-no">481</span><span id="line-481"> addConfig(final RegionServerStartupResponse.Builder resp, final String key) {</span> |
| <span class="source-line-no">482</span><span id="line-482"> NameStringPair.Builder entry =</span> |
| <span class="source-line-no">483</span><span id="line-483"> NameStringPair.newBuilder().setName(key).setValue(server.getConfiguration().get(key));</span> |
| <span class="source-line-no">484</span><span id="line-484"> resp.addMapEntries(entry.build());</span> |
| <span class="source-line-no">485</span><span id="line-485"> return resp;</span> |
| <span class="source-line-no">486</span><span id="line-486"> }</span> |
| <span class="source-line-no">487</span><span id="line-487"></span> |
| <span class="source-line-no">488</span><span id="line-488"> public MasterRpcServices(HMaster m) throws IOException {</span> |
| <span class="source-line-no">489</span><span id="line-489"> super(m, m.getProcessName());</span> |
| <span class="source-line-no">490</span><span id="line-490"> }</span> |
| <span class="source-line-no">491</span><span id="line-491"></span> |
| <span class="source-line-no">492</span><span id="line-492"> @Override</span> |
| <span class="source-line-no">493</span><span id="line-493"> protected boolean defaultReservoirEnabled() {</span> |
| <span class="source-line-no">494</span><span id="line-494"> return false;</span> |
| <span class="source-line-no">495</span><span id="line-495"> }</span> |
| <span class="source-line-no">496</span><span id="line-496"></span> |
| <span class="source-line-no">497</span><span id="line-497"> @Override</span> |
| <span class="source-line-no">498</span><span id="line-498"> protected ServerType getDNSServerType() {</span> |
| <span class="source-line-no">499</span><span id="line-499"> return DNS.ServerType.MASTER;</span> |
| <span class="source-line-no">500</span><span id="line-500"> }</span> |
| <span class="source-line-no">501</span><span id="line-501"></span> |
| <span class="source-line-no">502</span><span id="line-502"> @Override</span> |
| <span class="source-line-no">503</span><span id="line-503"> protected String getHostname(Configuration conf, String defaultHostname) {</span> |
| <span class="source-line-no">504</span><span id="line-504"> return conf.get("hbase.master.ipc.address", defaultHostname);</span> |
| <span class="source-line-no">505</span><span id="line-505"> }</span> |
| <span class="source-line-no">506</span><span id="line-506"></span> |
| <span class="source-line-no">507</span><span id="line-507"> @Override</span> |
| <span class="source-line-no">508</span><span id="line-508"> protected String getPortConfigName() {</span> |
| <span class="source-line-no">509</span><span id="line-509"> return HConstants.MASTER_PORT;</span> |
| <span class="source-line-no">510</span><span id="line-510"> }</span> |
| <span class="source-line-no">511</span><span id="line-511"></span> |
| <span class="source-line-no">512</span><span id="line-512"> @Override</span> |
| <span class="source-line-no">513</span><span id="line-513"> protected int getDefaultPort() {</span> |
| <span class="source-line-no">514</span><span id="line-514"> return HConstants.DEFAULT_MASTER_PORT;</span> |
| <span class="source-line-no">515</span><span id="line-515"> }</span> |
| <span class="source-line-no">516</span><span id="line-516"></span> |
| <span class="source-line-no">517</span><span id="line-517"> @Override</span> |
| <span class="source-line-no">518</span><span id="line-518"> protected Class<?> getRpcSchedulerFactoryClass(Configuration conf) {</span> |
| <span class="source-line-no">519</span><span id="line-519"> return conf.getClass(MASTER_RPC_SCHEDULER_FACTORY_CLASS, SimpleRpcSchedulerFactory.class);</span> |
| <span class="source-line-no">520</span><span id="line-520"> }</span> |
| <span class="source-line-no">521</span><span id="line-521"></span> |
| <span class="source-line-no">522</span><span id="line-522"> @Override</span> |
| <span class="source-line-no">523</span><span id="line-523"> protected PriorityFunction createPriority() {</span> |
| <span class="source-line-no">524</span><span id="line-524"> return new MasterAnnotationReadingPriorityFunction(this);</span> |
| <span class="source-line-no">525</span><span id="line-525"> }</span> |
| <span class="source-line-no">526</span><span id="line-526"></span> |
| <span class="source-line-no">527</span><span id="line-527"> /**</span> |
| <span class="source-line-no">528</span><span id="line-528"> * Checks for the following pre-checks in order:</span> |
| <span class="source-line-no">529</span><span id="line-529"> * <ol></span> |
| <span class="source-line-no">530</span><span id="line-530"> * <li>Master is initialized</li></span> |
| <span class="source-line-no">531</span><span id="line-531"> * <li>Rpc caller has admin permissions</li></span> |
| <span class="source-line-no">532</span><span id="line-532"> * </ol></span> |
| <span class="source-line-no">533</span><span id="line-533"> * @param requestName name of rpc request. Used in reporting failures to provide context.</span> |
| <span class="source-line-no">534</span><span id="line-534"> * @throws ServiceException If any of the above listed pre-check fails.</span> |
| <span class="source-line-no">535</span><span id="line-535"> */</span> |
| <span class="source-line-no">536</span><span id="line-536"> private void rpcPreCheck(String requestName) throws ServiceException {</span> |
| <span class="source-line-no">537</span><span id="line-537"> try {</span> |
| <span class="source-line-no">538</span><span id="line-538"> server.checkInitialized();</span> |
| <span class="source-line-no">539</span><span id="line-539"> requirePermission(requestName, Permission.Action.ADMIN);</span> |
| <span class="source-line-no">540</span><span id="line-540"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">541</span><span id="line-541"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">542</span><span id="line-542"> }</span> |
| <span class="source-line-no">543</span><span id="line-543"> }</span> |
| <span class="source-line-no">544</span><span id="line-544"></span> |
| <span class="source-line-no">545</span><span id="line-545"> enum BalanceSwitchMode {</span> |
| <span class="source-line-no">546</span><span id="line-546"> SYNC,</span> |
| <span class="source-line-no">547</span><span id="line-547"> ASYNC</span> |
| <span class="source-line-no">548</span><span id="line-548"> }</span> |
| <span class="source-line-no">549</span><span id="line-549"></span> |
| <span class="source-line-no">550</span><span id="line-550"> /**</span> |
| <span class="source-line-no">551</span><span id="line-551"> * Assigns balancer switch according to BalanceSwitchMode</span> |
| <span class="source-line-no">552</span><span id="line-552"> * @param b new balancer switch</span> |
| <span class="source-line-no">553</span><span id="line-553"> * @param mode BalanceSwitchMode</span> |
| <span class="source-line-no">554</span><span id="line-554"> * @return old balancer switch</span> |
| <span class="source-line-no">555</span><span id="line-555"> */</span> |
| <span class="source-line-no">556</span><span id="line-556"> boolean switchBalancer(final boolean b, BalanceSwitchMode mode) throws IOException {</span> |
| <span class="source-line-no">557</span><span id="line-557"> boolean oldValue = server.loadBalancerStateStore.get();</span> |
| <span class="source-line-no">558</span><span id="line-558"> boolean newValue = b;</span> |
| <span class="source-line-no">559</span><span id="line-559"> try {</span> |
| <span class="source-line-no">560</span><span id="line-560"> if (server.cpHost != null) {</span> |
| <span class="source-line-no">561</span><span id="line-561"> server.cpHost.preBalanceSwitch(newValue);</span> |
| <span class="source-line-no">562</span><span id="line-562"> }</span> |
| <span class="source-line-no">563</span><span id="line-563"> if (mode == BalanceSwitchMode.SYNC) {</span> |
| <span class="source-line-no">564</span><span id="line-564"> synchronized (server.getLoadBalancer()) {</span> |
| <span class="source-line-no">565</span><span id="line-565"> server.loadBalancerStateStore.set(newValue);</span> |
| <span class="source-line-no">566</span><span id="line-566"> }</span> |
| <span class="source-line-no">567</span><span id="line-567"> } else {</span> |
| <span class="source-line-no">568</span><span id="line-568"> server.loadBalancerStateStore.set(newValue);</span> |
| <span class="source-line-no">569</span><span id="line-569"> }</span> |
| <span class="source-line-no">570</span><span id="line-570"> LOG.info(server.getClientIdAuditPrefix() + " set balanceSwitch=" + newValue);</span> |
| <span class="source-line-no">571</span><span id="line-571"> if (server.cpHost != null) {</span> |
| <span class="source-line-no">572</span><span id="line-572"> server.cpHost.postBalanceSwitch(oldValue, newValue);</span> |
| <span class="source-line-no">573</span><span id="line-573"> }</span> |
| <span class="source-line-no">574</span><span id="line-574"> server.getLoadBalancer().updateBalancerStatus(newValue);</span> |
| <span class="source-line-no">575</span><span id="line-575"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">576</span><span id="line-576"> LOG.warn("Error flipping balance switch", ioe);</span> |
| <span class="source-line-no">577</span><span id="line-577"> }</span> |
| <span class="source-line-no">578</span><span id="line-578"> return oldValue;</span> |
| <span class="source-line-no">579</span><span id="line-579"> }</span> |
| <span class="source-line-no">580</span><span id="line-580"></span> |
| <span class="source-line-no">581</span><span id="line-581"> boolean synchronousBalanceSwitch(final boolean b) throws IOException {</span> |
| <span class="source-line-no">582</span><span id="line-582"> return switchBalancer(b, BalanceSwitchMode.SYNC);</span> |
| <span class="source-line-no">583</span><span id="line-583"> }</span> |
| <span class="source-line-no">584</span><span id="line-584"></span> |
| <span class="source-line-no">585</span><span id="line-585"> /** Returns list of blocking services and their security info classes that this server supports */</span> |
| <span class="source-line-no">586</span><span id="line-586"> @Override</span> |
| <span class="source-line-no">587</span><span id="line-587"> protected List<BlockingServiceAndInterface> getServices() {</span> |
| <span class="source-line-no">588</span><span id="line-588"> List<BlockingServiceAndInterface> bssi = new ArrayList<>(5);</span> |
| <span class="source-line-no">589</span><span id="line-589"> bssi.add(new BlockingServiceAndInterface(MasterService.newReflectiveBlockingService(this),</span> |
| <span class="source-line-no">590</span><span id="line-590"> MasterService.BlockingInterface.class));</span> |
| <span class="source-line-no">591</span><span id="line-591"> bssi.add(</span> |
| <span class="source-line-no">592</span><span id="line-592"> new BlockingServiceAndInterface(RegionServerStatusService.newReflectiveBlockingService(this),</span> |
| <span class="source-line-no">593</span><span id="line-593"> RegionServerStatusService.BlockingInterface.class));</span> |
| <span class="source-line-no">594</span><span id="line-594"> bssi.add(new BlockingServiceAndInterface(LockService.newReflectiveBlockingService(this),</span> |
| <span class="source-line-no">595</span><span id="line-595"> LockService.BlockingInterface.class));</span> |
| <span class="source-line-no">596</span><span id="line-596"> bssi.add(new BlockingServiceAndInterface(HbckService.newReflectiveBlockingService(this),</span> |
| <span class="source-line-no">597</span><span id="line-597"> HbckService.BlockingInterface.class));</span> |
| <span class="source-line-no">598</span><span id="line-598"> bssi.add(new BlockingServiceAndInterface(ClientMetaService.newReflectiveBlockingService(this),</span> |
| <span class="source-line-no">599</span><span id="line-599"> ClientMetaService.BlockingInterface.class));</span> |
| <span class="source-line-no">600</span><span id="line-600"> bssi.add(new BlockingServiceAndInterface(AdminService.newReflectiveBlockingService(this),</span> |
| <span class="source-line-no">601</span><span id="line-601"> AdminService.BlockingInterface.class));</span> |
| <span class="source-line-no">602</span><span id="line-602"> return bssi;</span> |
| <span class="source-line-no">603</span><span id="line-603"> }</span> |
| <span class="source-line-no">604</span><span id="line-604"></span> |
| <span class="source-line-no">605</span><span id="line-605"> void start(ZKWatcher zkWatcher) {</span> |
| <span class="source-line-no">606</span><span id="line-606"> internalStart(zkWatcher);</span> |
| <span class="source-line-no">607</span><span id="line-607"> }</span> |
| <span class="source-line-no">608</span><span id="line-608"></span> |
| <span class="source-line-no">609</span><span id="line-609"> void stop() {</span> |
| <span class="source-line-no">610</span><span id="line-610"> internalStop();</span> |
| <span class="source-line-no">611</span><span id="line-611"> }</span> |
| <span class="source-line-no">612</span><span id="line-612"></span> |
| <span class="source-line-no">613</span><span id="line-613"> @Override</span> |
| <span class="source-line-no">614</span><span id="line-614"> // priority for all RegionServerStatusProtos rpc's are set HIGH_QOS in</span> |
| <span class="source-line-no">615</span><span id="line-615"> // MasterAnnotationReadingPriorityFunction itself</span> |
| <span class="source-line-no">616</span><span id="line-616"> public GetLastFlushedSequenceIdResponse getLastFlushedSequenceId(RpcController controller,</span> |
| <span class="source-line-no">617</span><span id="line-617"> GetLastFlushedSequenceIdRequest request) throws ServiceException {</span> |
| <span class="source-line-no">618</span><span id="line-618"> try {</span> |
| <span class="source-line-no">619</span><span id="line-619"> server.checkServiceStarted();</span> |
| <span class="source-line-no">620</span><span id="line-620"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">621</span><span id="line-621"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">622</span><span id="line-622"> }</span> |
| <span class="source-line-no">623</span><span id="line-623"> byte[] encodedRegionName = request.getRegionName().toByteArray();</span> |
| <span class="source-line-no">624</span><span id="line-624"> RegionStoreSequenceIds ids =</span> |
| <span class="source-line-no">625</span><span id="line-625"> server.getServerManager().getLastFlushedSequenceId(encodedRegionName);</span> |
| <span class="source-line-no">626</span><span id="line-626"> return ResponseConverter.buildGetLastFlushedSequenceIdResponse(ids);</span> |
| <span class="source-line-no">627</span><span id="line-627"> }</span> |
| <span class="source-line-no">628</span><span id="line-628"></span> |
| <span class="source-line-no">629</span><span id="line-629"> @Override</span> |
| <span class="source-line-no">630</span><span id="line-630"> public RegionServerReportResponse regionServerReport(RpcController controller,</span> |
| <span class="source-line-no">631</span><span id="line-631"> RegionServerReportRequest request) throws ServiceException {</span> |
| <span class="source-line-no">632</span><span id="line-632"> try {</span> |
| <span class="source-line-no">633</span><span id="line-633"> server.checkServiceStarted();</span> |
| <span class="source-line-no">634</span><span id="line-634"> int versionNumber = 0;</span> |
| <span class="source-line-no">635</span><span id="line-635"> String version = "0.0.0";</span> |
| <span class="source-line-no">636</span><span id="line-636"> VersionInfo versionInfo = VersionInfoUtil.getCurrentClientVersionInfo();</span> |
| <span class="source-line-no">637</span><span id="line-637"> if (versionInfo != null) {</span> |
| <span class="source-line-no">638</span><span id="line-638"> version = versionInfo.getVersion();</span> |
| <span class="source-line-no">639</span><span id="line-639"> versionNumber = VersionInfoUtil.getVersionNumber(versionInfo);</span> |
| <span class="source-line-no">640</span><span id="line-640"> }</span> |
| <span class="source-line-no">641</span><span id="line-641"> ClusterStatusProtos.ServerLoad sl = request.getLoad();</span> |
| <span class="source-line-no">642</span><span id="line-642"> ServerName serverName = ProtobufUtil.toServerName(request.getServer());</span> |
| <span class="source-line-no">643</span><span id="line-643"> ServerMetrics oldLoad = server.getServerManager().getLoad(serverName);</span> |
| <span class="source-line-no">644</span><span id="line-644"> ServerMetrics newLoad =</span> |
| <span class="source-line-no">645</span><span id="line-645"> ServerMetricsBuilder.toServerMetrics(serverName, versionNumber, version, sl);</span> |
| <span class="source-line-no">646</span><span id="line-646"> server.getServerManager().regionServerReport(serverName, newLoad);</span> |
| <span class="source-line-no">647</span><span id="line-647"> server.getAssignmentManager().reportOnlineRegions(serverName,</span> |
| <span class="source-line-no">648</span><span id="line-648"> newLoad.getRegionMetrics().keySet());</span> |
| <span class="source-line-no">649</span><span id="line-649"> if (sl != null && server.metricsMaster != null) {</span> |
| <span class="source-line-no">650</span><span id="line-650"> // Up our metrics.</span> |
| <span class="source-line-no">651</span><span id="line-651"> server.metricsMaster.incrementRequests(</span> |
| <span class="source-line-no">652</span><span id="line-652"> sl.getTotalNumberOfRequests() - (oldLoad != null ? oldLoad.getRequestCount() : 0));</span> |
| <span class="source-line-no">653</span><span id="line-653"> server.metricsMaster.incrementReadRequests(</span> |
| <span class="source-line-no">654</span><span id="line-654"> sl.getReadRequestsCount() - (oldLoad != null ? oldLoad.getReadRequestsCount() : 0));</span> |
| <span class="source-line-no">655</span><span id="line-655"> server.metricsMaster.incrementWriteRequests(</span> |
| <span class="source-line-no">656</span><span id="line-656"> sl.getWriteRequestsCount() - (oldLoad != null ? oldLoad.getWriteRequestsCount() : 0));</span> |
| <span class="source-line-no">657</span><span id="line-657"> }</span> |
| <span class="source-line-no">658</span><span id="line-658"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">659</span><span id="line-659"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">660</span><span id="line-660"> }</span> |
| <span class="source-line-no">661</span><span id="line-661"> return RegionServerReportResponse.newBuilder().build();</span> |
| <span class="source-line-no">662</span><span id="line-662"> }</span> |
| <span class="source-line-no">663</span><span id="line-663"></span> |
| <span class="source-line-no">664</span><span id="line-664"> @Override</span> |
| <span class="source-line-no">665</span><span id="line-665"> public RegionServerStartupResponse regionServerStartup(RpcController controller,</span> |
| <span class="source-line-no">666</span><span id="line-666"> RegionServerStartupRequest request) throws ServiceException {</span> |
| <span class="source-line-no">667</span><span id="line-667"> // Register with server manager</span> |
| <span class="source-line-no">668</span><span id="line-668"> try {</span> |
| <span class="source-line-no">669</span><span id="line-669"> server.checkServiceStarted();</span> |
| <span class="source-line-no">670</span><span id="line-670"> int versionNumber = 0;</span> |
| <span class="source-line-no">671</span><span id="line-671"> String version = "0.0.0";</span> |
| <span class="source-line-no">672</span><span id="line-672"> VersionInfo versionInfo = VersionInfoUtil.getCurrentClientVersionInfo();</span> |
| <span class="source-line-no">673</span><span id="line-673"> if (versionInfo != null) {</span> |
| <span class="source-line-no">674</span><span id="line-674"> version = versionInfo.getVersion();</span> |
| <span class="source-line-no">675</span><span id="line-675"> versionNumber = VersionInfoUtil.getVersionNumber(versionInfo);</span> |
| <span class="source-line-no">676</span><span id="line-676"> }</span> |
| <span class="source-line-no">677</span><span id="line-677"> InetAddress ia = server.getRemoteInetAddress(request.getPort(), request.getServerStartCode());</span> |
| <span class="source-line-no">678</span><span id="line-678"> // if regionserver passed hostname to use,</span> |
| <span class="source-line-no">679</span><span id="line-679"> // then use it instead of doing a reverse DNS lookup</span> |
| <span class="source-line-no">680</span><span id="line-680"> ServerName rs =</span> |
| <span class="source-line-no">681</span><span id="line-681"> server.getServerManager().regionServerStartup(request, versionNumber, version, ia);</span> |
| <span class="source-line-no">682</span><span id="line-682"></span> |
| <span class="source-line-no">683</span><span id="line-683"> // Send back some config info</span> |
| <span class="source-line-no">684</span><span id="line-684"> RegionServerStartupResponse.Builder resp = createConfigurationSubset();</span> |
| <span class="source-line-no">685</span><span id="line-685"> NameStringPair.Builder entry = NameStringPair.newBuilder()</span> |
| <span class="source-line-no">686</span><span id="line-686"> .setName(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER).setValue(rs.getHostname());</span> |
| <span class="source-line-no">687</span><span id="line-687"> resp.addMapEntries(entry.build());</span> |
| <span class="source-line-no">688</span><span id="line-688"></span> |
| <span class="source-line-no">689</span><span id="line-689"> return resp.build();</span> |
| <span class="source-line-no">690</span><span id="line-690"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">691</span><span id="line-691"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">692</span><span id="line-692"> }</span> |
| <span class="source-line-no">693</span><span id="line-693"> }</span> |
| <span class="source-line-no">694</span><span id="line-694"></span> |
| <span class="source-line-no">695</span><span id="line-695"> @Override</span> |
| <span class="source-line-no">696</span><span id="line-696"> public ReportRSFatalErrorResponse reportRSFatalError(RpcController controller,</span> |
| <span class="source-line-no">697</span><span id="line-697"> ReportRSFatalErrorRequest request) throws ServiceException {</span> |
| <span class="source-line-no">698</span><span id="line-698"> String errorText = request.getErrorMessage();</span> |
| <span class="source-line-no">699</span><span id="line-699"> ServerName sn = ProtobufUtil.toServerName(request.getServer());</span> |
| <span class="source-line-no">700</span><span id="line-700"> String msg = sn + " reported a fatal error:\n" + errorText;</span> |
| <span class="source-line-no">701</span><span id="line-701"> LOG.warn(msg);</span> |
| <span class="source-line-no">702</span><span id="line-702"> server.rsFatals.add(msg);</span> |
| <span class="source-line-no">703</span><span id="line-703"> return ReportRSFatalErrorResponse.newBuilder().build();</span> |
| <span class="source-line-no">704</span><span id="line-704"> }</span> |
| <span class="source-line-no">705</span><span id="line-705"></span> |
| <span class="source-line-no">706</span><span id="line-706"> @Override</span> |
| <span class="source-line-no">707</span><span id="line-707"> public AddColumnResponse addColumn(RpcController controller, AddColumnRequest req)</span> |
| <span class="source-line-no">708</span><span id="line-708"> throws ServiceException {</span> |
| <span class="source-line-no">709</span><span id="line-709"> try {</span> |
| <span class="source-line-no">710</span><span id="line-710"> long procId = server.addColumn(ProtobufUtil.toTableName(req.getTableName()),</span> |
| <span class="source-line-no">711</span><span id="line-711"> ProtobufUtil.toColumnFamilyDescriptor(req.getColumnFamilies()), req.getNonceGroup(),</span> |
| <span class="source-line-no">712</span><span id="line-712"> req.getNonce());</span> |
| <span class="source-line-no">713</span><span id="line-713"> if (procId == -1) {</span> |
| <span class="source-line-no">714</span><span id="line-714"> // This mean operation was not performed in server, so do not set any procId</span> |
| <span class="source-line-no">715</span><span id="line-715"> return AddColumnResponse.newBuilder().build();</span> |
| <span class="source-line-no">716</span><span id="line-716"> } else {</span> |
| <span class="source-line-no">717</span><span id="line-717"> return AddColumnResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">718</span><span id="line-718"> }</span> |
| <span class="source-line-no">719</span><span id="line-719"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">720</span><span id="line-720"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">721</span><span id="line-721"> }</span> |
| <span class="source-line-no">722</span><span id="line-722"> }</span> |
| <span class="source-line-no">723</span><span id="line-723"></span> |
| <span class="source-line-no">724</span><span id="line-724"> @Override</span> |
| <span class="source-line-no">725</span><span id="line-725"> public AssignRegionResponse assignRegion(RpcController controller, AssignRegionRequest req)</span> |
| <span class="source-line-no">726</span><span id="line-726"> throws ServiceException {</span> |
| <span class="source-line-no">727</span><span id="line-727"> try {</span> |
| <span class="source-line-no">728</span><span id="line-728"> server.checkInitialized();</span> |
| <span class="source-line-no">729</span><span id="line-729"></span> |
| <span class="source-line-no">730</span><span id="line-730"> final RegionSpecifierType type = req.getRegion().getType();</span> |
| <span class="source-line-no">731</span><span id="line-731"> if (type != RegionSpecifierType.REGION_NAME) {</span> |
| <span class="source-line-no">732</span><span id="line-732"> LOG.warn("assignRegion specifier type: expected: " + RegionSpecifierType.REGION_NAME</span> |
| <span class="source-line-no">733</span><span id="line-733"> + " actual: " + type);</span> |
| <span class="source-line-no">734</span><span id="line-734"> }</span> |
| <span class="source-line-no">735</span><span id="line-735"></span> |
| <span class="source-line-no">736</span><span id="line-736"> final byte[] regionName = req.getRegion().getValue().toByteArray();</span> |
| <span class="source-line-no">737</span><span id="line-737"> final RegionInfo regionInfo = server.getAssignmentManager().getRegionInfo(regionName);</span> |
| <span class="source-line-no">738</span><span id="line-738"> if (regionInfo == null) {</span> |
| <span class="source-line-no">739</span><span id="line-739"> throw new UnknownRegionException(Bytes.toStringBinary(regionName));</span> |
| <span class="source-line-no">740</span><span id="line-740"> }</span> |
| <span class="source-line-no">741</span><span id="line-741"></span> |
| <span class="source-line-no">742</span><span id="line-742"> final AssignRegionResponse arr = AssignRegionResponse.newBuilder().build();</span> |
| <span class="source-line-no">743</span><span id="line-743"> if (server.cpHost != null) {</span> |
| <span class="source-line-no">744</span><span id="line-744"> server.cpHost.preAssign(regionInfo);</span> |
| <span class="source-line-no">745</span><span id="line-745"> }</span> |
| <span class="source-line-no">746</span><span id="line-746"> LOG.info(server.getClientIdAuditPrefix() + " assign " + regionInfo.getRegionNameAsString());</span> |
| <span class="source-line-no">747</span><span id="line-747"> server.getAssignmentManager().assign(regionInfo);</span> |
| <span class="source-line-no">748</span><span id="line-748"> if (server.cpHost != null) {</span> |
| <span class="source-line-no">749</span><span id="line-749"> server.cpHost.postAssign(regionInfo);</span> |
| <span class="source-line-no">750</span><span id="line-750"> }</span> |
| <span class="source-line-no">751</span><span id="line-751"> return arr;</span> |
| <span class="source-line-no">752</span><span id="line-752"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">753</span><span id="line-753"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">754</span><span id="line-754"> }</span> |
| <span class="source-line-no">755</span><span id="line-755"> }</span> |
| <span class="source-line-no">756</span><span id="line-756"></span> |
| <span class="source-line-no">757</span><span id="line-757"> @Override</span> |
| <span class="source-line-no">758</span><span id="line-758"> public MasterProtos.BalanceResponse balance(RpcController controller,</span> |
| <span class="source-line-no">759</span><span id="line-759"> MasterProtos.BalanceRequest request) throws ServiceException {</span> |
| <span class="source-line-no">760</span><span id="line-760"> try {</span> |
| <span class="source-line-no">761</span><span id="line-761"> return ProtobufUtil.toBalanceResponse(server.balance(ProtobufUtil.toBalanceRequest(request)));</span> |
| <span class="source-line-no">762</span><span id="line-762"> } catch (IOException ex) {</span> |
| <span class="source-line-no">763</span><span id="line-763"> throw new ServiceException(ex);</span> |
| <span class="source-line-no">764</span><span id="line-764"> }</span> |
| <span class="source-line-no">765</span><span id="line-765"> }</span> |
| <span class="source-line-no">766</span><span id="line-766"></span> |
| <span class="source-line-no">767</span><span id="line-767"> @Override</span> |
| <span class="source-line-no">768</span><span id="line-768"> public CreateNamespaceResponse createNamespace(RpcController controller,</span> |
| <span class="source-line-no">769</span><span id="line-769"> CreateNamespaceRequest request) throws ServiceException {</span> |
| <span class="source-line-no">770</span><span id="line-770"> try {</span> |
| <span class="source-line-no">771</span><span id="line-771"> long procId =</span> |
| <span class="source-line-no">772</span><span id="line-772"> server.createNamespace(ProtobufUtil.toNamespaceDescriptor(request.getNamespaceDescriptor()),</span> |
| <span class="source-line-no">773</span><span id="line-773"> request.getNonceGroup(), request.getNonce());</span> |
| <span class="source-line-no">774</span><span id="line-774"> return CreateNamespaceResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">775</span><span id="line-775"> } catch (IOException e) {</span> |
| <span class="source-line-no">776</span><span id="line-776"> throw new ServiceException(e);</span> |
| <span class="source-line-no">777</span><span id="line-777"> }</span> |
| <span class="source-line-no">778</span><span id="line-778"> }</span> |
| <span class="source-line-no">779</span><span id="line-779"></span> |
| <span class="source-line-no">780</span><span id="line-780"> @Override</span> |
| <span class="source-line-no">781</span><span id="line-781"> public CreateTableResponse createTable(RpcController controller, CreateTableRequest req)</span> |
| <span class="source-line-no">782</span><span id="line-782"> throws ServiceException {</span> |
| <span class="source-line-no">783</span><span id="line-783"> TableDescriptor tableDescriptor = ProtobufUtil.toTableDescriptor(req.getTableSchema());</span> |
| <span class="source-line-no">784</span><span id="line-784"> byte[][] splitKeys = ProtobufUtil.getSplitKeysArray(req);</span> |
| <span class="source-line-no">785</span><span id="line-785"> try {</span> |
| <span class="source-line-no">786</span><span id="line-786"> long procId =</span> |
| <span class="source-line-no">787</span><span id="line-787"> server.createTable(tableDescriptor, splitKeys, req.getNonceGroup(), req.getNonce());</span> |
| <span class="source-line-no">788</span><span id="line-788"> LOG.info(server.getClientIdAuditPrefix() + " procedure request for creating table: "</span> |
| <span class="source-line-no">789</span><span id="line-789"> + req.getTableSchema().getTableName() + " procId is: " + procId);</span> |
| <span class="source-line-no">790</span><span id="line-790"> return CreateTableResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">791</span><span id="line-791"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">792</span><span id="line-792"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">793</span><span id="line-793"> }</span> |
| <span class="source-line-no">794</span><span id="line-794"> }</span> |
| <span class="source-line-no">795</span><span id="line-795"></span> |
| <span class="source-line-no">796</span><span id="line-796"> @Override</span> |
| <span class="source-line-no">797</span><span id="line-797"> public DeleteColumnResponse deleteColumn(RpcController controller, DeleteColumnRequest req)</span> |
| <span class="source-line-no">798</span><span id="line-798"> throws ServiceException {</span> |
| <span class="source-line-no">799</span><span id="line-799"> try {</span> |
| <span class="source-line-no">800</span><span id="line-800"> long procId = server.deleteColumn(ProtobufUtil.toTableName(req.getTableName()),</span> |
| <span class="source-line-no">801</span><span id="line-801"> req.getColumnName().toByteArray(), req.getNonceGroup(), req.getNonce());</span> |
| <span class="source-line-no">802</span><span id="line-802"> if (procId == -1) {</span> |
| <span class="source-line-no">803</span><span id="line-803"> // This mean operation was not performed in server, so do not set any procId</span> |
| <span class="source-line-no">804</span><span id="line-804"> return DeleteColumnResponse.newBuilder().build();</span> |
| <span class="source-line-no">805</span><span id="line-805"> } else {</span> |
| <span class="source-line-no">806</span><span id="line-806"> return DeleteColumnResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">807</span><span id="line-807"> }</span> |
| <span class="source-line-no">808</span><span id="line-808"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">809</span><span id="line-809"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">810</span><span id="line-810"> }</span> |
| <span class="source-line-no">811</span><span id="line-811"> }</span> |
| <span class="source-line-no">812</span><span id="line-812"></span> |
| <span class="source-line-no">813</span><span id="line-813"> @Override</span> |
| <span class="source-line-no">814</span><span id="line-814"> public DeleteNamespaceResponse deleteNamespace(RpcController controller,</span> |
| <span class="source-line-no">815</span><span id="line-815"> DeleteNamespaceRequest request) throws ServiceException {</span> |
| <span class="source-line-no">816</span><span id="line-816"> try {</span> |
| <span class="source-line-no">817</span><span id="line-817"> long procId = server.deleteNamespace(request.getNamespaceName(), request.getNonceGroup(),</span> |
| <span class="source-line-no">818</span><span id="line-818"> request.getNonce());</span> |
| <span class="source-line-no">819</span><span id="line-819"> return DeleteNamespaceResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">820</span><span id="line-820"> } catch (IOException e) {</span> |
| <span class="source-line-no">821</span><span id="line-821"> throw new ServiceException(e);</span> |
| <span class="source-line-no">822</span><span id="line-822"> }</span> |
| <span class="source-line-no">823</span><span id="line-823"> }</span> |
| <span class="source-line-no">824</span><span id="line-824"></span> |
| <span class="source-line-no">825</span><span id="line-825"> /**</span> |
| <span class="source-line-no">826</span><span id="line-826"> * Execute Delete Snapshot operation.</span> |
| <span class="source-line-no">827</span><span id="line-827"> * @return DeleteSnapshotResponse (a protobuf wrapped void) if the snapshot existed and was</span> |
| <span class="source-line-no">828</span><span id="line-828"> * deleted properly.</span> |
| <span class="source-line-no">829</span><span id="line-829"> * @throws ServiceException wrapping SnapshotDoesNotExistException if specified snapshot did not</span> |
| <span class="source-line-no">830</span><span id="line-830"> * exist.</span> |
| <span class="source-line-no">831</span><span id="line-831"> */</span> |
| <span class="source-line-no">832</span><span id="line-832"> @Override</span> |
| <span class="source-line-no">833</span><span id="line-833"> public DeleteSnapshotResponse deleteSnapshot(RpcController controller,</span> |
| <span class="source-line-no">834</span><span id="line-834"> DeleteSnapshotRequest request) throws ServiceException {</span> |
| <span class="source-line-no">835</span><span id="line-835"> try {</span> |
| <span class="source-line-no">836</span><span id="line-836"> server.checkInitialized();</span> |
| <span class="source-line-no">837</span><span id="line-837"> server.snapshotManager.checkSnapshotSupport();</span> |
| <span class="source-line-no">838</span><span id="line-838"></span> |
| <span class="source-line-no">839</span><span id="line-839"> LOG.info(server.getClientIdAuditPrefix() + " delete " + request.getSnapshot());</span> |
| <span class="source-line-no">840</span><span id="line-840"> server.snapshotManager.deleteSnapshot(request.getSnapshot());</span> |
| <span class="source-line-no">841</span><span id="line-841"> return DeleteSnapshotResponse.newBuilder().build();</span> |
| <span class="source-line-no">842</span><span id="line-842"> } catch (IOException e) {</span> |
| <span class="source-line-no">843</span><span id="line-843"> throw new ServiceException(e);</span> |
| <span class="source-line-no">844</span><span id="line-844"> }</span> |
| <span class="source-line-no">845</span><span id="line-845"> }</span> |
| <span class="source-line-no">846</span><span id="line-846"></span> |
| <span class="source-line-no">847</span><span id="line-847"> @Override</span> |
| <span class="source-line-no">848</span><span id="line-848"> public DeleteTableResponse deleteTable(RpcController controller, DeleteTableRequest request)</span> |
| <span class="source-line-no">849</span><span id="line-849"> throws ServiceException {</span> |
| <span class="source-line-no">850</span><span id="line-850"> try {</span> |
| <span class="source-line-no">851</span><span id="line-851"> long procId = server.deleteTable(ProtobufUtil.toTableName(request.getTableName()),</span> |
| <span class="source-line-no">852</span><span id="line-852"> request.getNonceGroup(), request.getNonce());</span> |
| <span class="source-line-no">853</span><span id="line-853"> return DeleteTableResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">854</span><span id="line-854"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">855</span><span id="line-855"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">856</span><span id="line-856"> }</span> |
| <span class="source-line-no">857</span><span id="line-857"> }</span> |
| <span class="source-line-no">858</span><span id="line-858"></span> |
| <span class="source-line-no">859</span><span id="line-859"> @Override</span> |
| <span class="source-line-no">860</span><span id="line-860"> public TruncateTableResponse truncateTable(RpcController controller, TruncateTableRequest request)</span> |
| <span class="source-line-no">861</span><span id="line-861"> throws ServiceException {</span> |
| <span class="source-line-no">862</span><span id="line-862"> try {</span> |
| <span class="source-line-no">863</span><span id="line-863"> long procId = server.truncateTable(ProtobufUtil.toTableName(request.getTableName()),</span> |
| <span class="source-line-no">864</span><span id="line-864"> request.getPreserveSplits(), request.getNonceGroup(), request.getNonce());</span> |
| <span class="source-line-no">865</span><span id="line-865"> return TruncateTableResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">866</span><span id="line-866"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">867</span><span id="line-867"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">868</span><span id="line-868"> }</span> |
| <span class="source-line-no">869</span><span id="line-869"> }</span> |
| <span class="source-line-no">870</span><span id="line-870"></span> |
| <span class="source-line-no">871</span><span id="line-871"> @Override</span> |
| <span class="source-line-no">872</span><span id="line-872"> public DisableTableResponse disableTable(RpcController controller, DisableTableRequest request)</span> |
| <span class="source-line-no">873</span><span id="line-873"> throws ServiceException {</span> |
| <span class="source-line-no">874</span><span id="line-874"> try {</span> |
| <span class="source-line-no">875</span><span id="line-875"> long procId = server.disableTable(ProtobufUtil.toTableName(request.getTableName()),</span> |
| <span class="source-line-no">876</span><span id="line-876"> request.getNonceGroup(), request.getNonce());</span> |
| <span class="source-line-no">877</span><span id="line-877"> return DisableTableResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">878</span><span id="line-878"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">879</span><span id="line-879"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">880</span><span id="line-880"> }</span> |
| <span class="source-line-no">881</span><span id="line-881"> }</span> |
| <span class="source-line-no">882</span><span id="line-882"></span> |
| <span class="source-line-no">883</span><span id="line-883"> @Override</span> |
| <span class="source-line-no">884</span><span id="line-884"> public EnableCatalogJanitorResponse enableCatalogJanitor(RpcController c,</span> |
| <span class="source-line-no">885</span><span id="line-885"> EnableCatalogJanitorRequest req) throws ServiceException {</span> |
| <span class="source-line-no">886</span><span id="line-886"> rpcPreCheck("enableCatalogJanitor");</span> |
| <span class="source-line-no">887</span><span id="line-887"> return EnableCatalogJanitorResponse.newBuilder()</span> |
| <span class="source-line-no">888</span><span id="line-888"> .setPrevValue(server.catalogJanitorChore.setEnabled(req.getEnable())).build();</span> |
| <span class="source-line-no">889</span><span id="line-889"> }</span> |
| <span class="source-line-no">890</span><span id="line-890"></span> |
| <span class="source-line-no">891</span><span id="line-891"> @Override</span> |
| <span class="source-line-no">892</span><span id="line-892"> public SetCleanerChoreRunningResponse setCleanerChoreRunning(RpcController c,</span> |
| <span class="source-line-no">893</span><span id="line-893"> SetCleanerChoreRunningRequest req) throws ServiceException {</span> |
| <span class="source-line-no">894</span><span id="line-894"> rpcPreCheck("setCleanerChoreRunning");</span> |
| <span class="source-line-no">895</span><span id="line-895"></span> |
| <span class="source-line-no">896</span><span id="line-896"> boolean prevValue =</span> |
| <span class="source-line-no">897</span><span id="line-897"> server.getLogCleaner().getEnabled() && server.getHFileCleaner().getEnabled();</span> |
| <span class="source-line-no">898</span><span id="line-898"> server.getLogCleaner().setEnabled(req.getOn());</span> |
| <span class="source-line-no">899</span><span id="line-899"> for (HFileCleaner hFileCleaner : server.getHFileCleaners()) {</span> |
| <span class="source-line-no">900</span><span id="line-900"> hFileCleaner.setEnabled(req.getOn());</span> |
| <span class="source-line-no">901</span><span id="line-901"> }</span> |
| <span class="source-line-no">902</span><span id="line-902"> return SetCleanerChoreRunningResponse.newBuilder().setPrevValue(prevValue).build();</span> |
| <span class="source-line-no">903</span><span id="line-903"> }</span> |
| <span class="source-line-no">904</span><span id="line-904"></span> |
| <span class="source-line-no">905</span><span id="line-905"> @Override</span> |
| <span class="source-line-no">906</span><span id="line-906"> public EnableTableResponse enableTable(RpcController controller, EnableTableRequest request)</span> |
| <span class="source-line-no">907</span><span id="line-907"> throws ServiceException {</span> |
| <span class="source-line-no">908</span><span id="line-908"> try {</span> |
| <span class="source-line-no">909</span><span id="line-909"> long procId = server.enableTable(ProtobufUtil.toTableName(request.getTableName()),</span> |
| <span class="source-line-no">910</span><span id="line-910"> request.getNonceGroup(), request.getNonce());</span> |
| <span class="source-line-no">911</span><span id="line-911"> return EnableTableResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">912</span><span id="line-912"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">913</span><span id="line-913"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">914</span><span id="line-914"> }</span> |
| <span class="source-line-no">915</span><span id="line-915"> }</span> |
| <span class="source-line-no">916</span><span id="line-916"></span> |
| <span class="source-line-no">917</span><span id="line-917"> @Override</span> |
| <span class="source-line-no">918</span><span id="line-918"> public MergeTableRegionsResponse mergeTableRegions(RpcController c,</span> |
| <span class="source-line-no">919</span><span id="line-919"> MergeTableRegionsRequest request) throws ServiceException {</span> |
| <span class="source-line-no">920</span><span id="line-920"> try {</span> |
| <span class="source-line-no">921</span><span id="line-921"> server.checkInitialized();</span> |
| <span class="source-line-no">922</span><span id="line-922"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">923</span><span id="line-923"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">924</span><span id="line-924"> }</span> |
| <span class="source-line-no">925</span><span id="line-925"></span> |
| <span class="source-line-no">926</span><span id="line-926"> RegionStates regionStates = server.getAssignmentManager().getRegionStates();</span> |
| <span class="source-line-no">927</span><span id="line-927"></span> |
| <span class="source-line-no">928</span><span id="line-928"> RegionInfo[] regionsToMerge = new RegionInfo[request.getRegionCount()];</span> |
| <span class="source-line-no">929</span><span id="line-929"> for (int i = 0; i < request.getRegionCount(); i++) {</span> |
| <span class="source-line-no">930</span><span id="line-930"> final byte[] encodedNameOfRegion = request.getRegion(i).getValue().toByteArray();</span> |
| <span class="source-line-no">931</span><span id="line-931"> if (request.getRegion(i).getType() != RegionSpecifierType.ENCODED_REGION_NAME) {</span> |
| <span class="source-line-no">932</span><span id="line-932"> LOG.warn("MergeRegions specifier type: expected: " + RegionSpecifierType.ENCODED_REGION_NAME</span> |
| <span class="source-line-no">933</span><span id="line-933"> + " actual: region " + i + " =" + request.getRegion(i).getType());</span> |
| <span class="source-line-no">934</span><span id="line-934"> }</span> |
| <span class="source-line-no">935</span><span id="line-935"> RegionState regionState = regionStates.getRegionState(Bytes.toString(encodedNameOfRegion));</span> |
| <span class="source-line-no">936</span><span id="line-936"> if (regionState == null) {</span> |
| <span class="source-line-no">937</span><span id="line-937"> throw new ServiceException(</span> |
| <span class="source-line-no">938</span><span id="line-938"> new UnknownRegionException(Bytes.toStringBinary(encodedNameOfRegion)));</span> |
| <span class="source-line-no">939</span><span id="line-939"> }</span> |
| <span class="source-line-no">940</span><span id="line-940"> regionsToMerge[i] = regionState.getRegion();</span> |
| <span class="source-line-no">941</span><span id="line-941"> }</span> |
| <span class="source-line-no">942</span><span id="line-942"></span> |
| <span class="source-line-no">943</span><span id="line-943"> try {</span> |
| <span class="source-line-no">944</span><span id="line-944"> long procId = server.mergeRegions(regionsToMerge, request.getForcible(),</span> |
| <span class="source-line-no">945</span><span id="line-945"> request.getNonceGroup(), request.getNonce());</span> |
| <span class="source-line-no">946</span><span id="line-946"> return MergeTableRegionsResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">947</span><span id="line-947"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">948</span><span id="line-948"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">949</span><span id="line-949"> }</span> |
| <span class="source-line-no">950</span><span id="line-950"> }</span> |
| <span class="source-line-no">951</span><span id="line-951"></span> |
| <span class="source-line-no">952</span><span id="line-952"> @Override</span> |
| <span class="source-line-no">953</span><span id="line-953"> public SplitTableRegionResponse splitRegion(final RpcController controller,</span> |
| <span class="source-line-no">954</span><span id="line-954"> final SplitTableRegionRequest request) throws ServiceException {</span> |
| <span class="source-line-no">955</span><span id="line-955"> try {</span> |
| <span class="source-line-no">956</span><span id="line-956"> long procId = server.splitRegion(ProtobufUtil.toRegionInfo(request.getRegionInfo()),</span> |
| <span class="source-line-no">957</span><span id="line-957"> request.hasSplitRow() ? request.getSplitRow().toByteArray() : null, request.getNonceGroup(),</span> |
| <span class="source-line-no">958</span><span id="line-958"> request.getNonce());</span> |
| <span class="source-line-no">959</span><span id="line-959"> return SplitTableRegionResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">960</span><span id="line-960"> } catch (IOException ie) {</span> |
| <span class="source-line-no">961</span><span id="line-961"> throw new ServiceException(ie);</span> |
| <span class="source-line-no">962</span><span id="line-962"> }</span> |
| <span class="source-line-no">963</span><span id="line-963"> }</span> |
| <span class="source-line-no">964</span><span id="line-964"></span> |
| <span class="source-line-no">965</span><span id="line-965"> @Override</span> |
| <span class="source-line-no">966</span><span id="line-966"> public MasterProtos.TruncateRegionResponse truncateRegion(RpcController controller,</span> |
| <span class="source-line-no">967</span><span id="line-967"> final MasterProtos.TruncateRegionRequest request) throws ServiceException {</span> |
| <span class="source-line-no">968</span><span id="line-968"> try {</span> |
| <span class="source-line-no">969</span><span id="line-969"> long procId = server.truncateRegion(ProtobufUtil.toRegionInfo(request.getRegionInfo()),</span> |
| <span class="source-line-no">970</span><span id="line-970"> request.getNonceGroup(), request.getNonce());</span> |
| <span class="source-line-no">971</span><span id="line-971"> return MasterProtos.TruncateRegionResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">972</span><span id="line-972"> } catch (IOException ie) {</span> |
| <span class="source-line-no">973</span><span id="line-973"> throw new ServiceException(ie);</span> |
| <span class="source-line-no">974</span><span id="line-974"> }</span> |
| <span class="source-line-no">975</span><span id="line-975"> }</span> |
| <span class="source-line-no">976</span><span id="line-976"></span> |
| <span class="source-line-no">977</span><span id="line-977"> @Override</span> |
| <span class="source-line-no">978</span><span id="line-978"> public ClientProtos.CoprocessorServiceResponse execMasterService(final RpcController controller,</span> |
| <span class="source-line-no">979</span><span id="line-979"> final ClientProtos.CoprocessorServiceRequest request) throws ServiceException {</span> |
| <span class="source-line-no">980</span><span id="line-980"> rpcPreCheck("execMasterService");</span> |
| <span class="source-line-no">981</span><span id="line-981"> try {</span> |
| <span class="source-line-no">982</span><span id="line-982"> ServerRpcController execController = new ServerRpcController();</span> |
| <span class="source-line-no">983</span><span id="line-983"> ClientProtos.CoprocessorServiceCall call = request.getCall();</span> |
| <span class="source-line-no">984</span><span id="line-984"> String serviceName = call.getServiceName();</span> |
| <span class="source-line-no">985</span><span id="line-985"> String methodName = call.getMethodName();</span> |
| <span class="source-line-no">986</span><span id="line-986"> if (!server.coprocessorServiceHandlers.containsKey(serviceName)) {</span> |
| <span class="source-line-no">987</span><span id="line-987"> throw new UnknownProtocolException(null,</span> |
| <span class="source-line-no">988</span><span id="line-988"> "No registered Master Coprocessor Endpoint found for " + serviceName</span> |
| <span class="source-line-no">989</span><span id="line-989"> + ". Has it been enabled?");</span> |
| <span class="source-line-no">990</span><span id="line-990"> }</span> |
| <span class="source-line-no">991</span><span id="line-991"></span> |
| <span class="source-line-no">992</span><span id="line-992"> Service service = server.coprocessorServiceHandlers.get(serviceName);</span> |
| <span class="source-line-no">993</span><span id="line-993"> ServiceDescriptor serviceDesc = service.getDescriptorForType();</span> |
| <span class="source-line-no">994</span><span id="line-994"> MethodDescriptor methodDesc =</span> |
| <span class="source-line-no">995</span><span id="line-995"> CoprocessorRpcUtils.getMethodDescriptor(methodName, serviceDesc);</span> |
| <span class="source-line-no">996</span><span id="line-996"></span> |
| <span class="source-line-no">997</span><span id="line-997"> Message execRequest = CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());</span> |
| <span class="source-line-no">998</span><span id="line-998"> final Message.Builder responseBuilder =</span> |
| <span class="source-line-no">999</span><span id="line-999"> service.getResponsePrototype(methodDesc).newBuilderForType();</span> |
| <span class="source-line-no">1000</span><span id="line-1000"> service.callMethod(methodDesc, execController, execRequest, (message) -> {</span> |
| <span class="source-line-no">1001</span><span id="line-1001"> if (message != null) {</span> |
| <span class="source-line-no">1002</span><span id="line-1002"> responseBuilder.mergeFrom(message);</span> |
| <span class="source-line-no">1003</span><span id="line-1003"> }</span> |
| <span class="source-line-no">1004</span><span id="line-1004"> });</span> |
| <span class="source-line-no">1005</span><span id="line-1005"> Message execResult = responseBuilder.build();</span> |
| <span class="source-line-no">1006</span><span id="line-1006"> if (execController.getFailedOn() != null) {</span> |
| <span class="source-line-no">1007</span><span id="line-1007"> throw execController.getFailedOn();</span> |
| <span class="source-line-no">1008</span><span id="line-1008"> }</span> |
| <span class="source-line-no">1009</span><span id="line-1009"></span> |
| <span class="source-line-no">1010</span><span id="line-1010"> String remoteAddress = RpcServer.getRemoteAddress().map(InetAddress::toString).orElse("");</span> |
| <span class="source-line-no">1011</span><span id="line-1011"> User caller = RpcServer.getRequestUser().orElse(null);</span> |
| <span class="source-line-no">1012</span><span id="line-1012"> AUDITLOG.info("User {} (remote address: {}) master service request for {}.{}", caller,</span> |
| <span class="source-line-no">1013</span><span id="line-1013"> remoteAddress, serviceName, methodName);</span> |
| <span class="source-line-no">1014</span><span id="line-1014"></span> |
| <span class="source-line-no">1015</span><span id="line-1015"> return CoprocessorRpcUtils.getResponse(execResult, HConstants.EMPTY_BYTE_ARRAY);</span> |
| <span class="source-line-no">1016</span><span id="line-1016"> } catch (IOException ie) {</span> |
| <span class="source-line-no">1017</span><span id="line-1017"> throw new ServiceException(ie);</span> |
| <span class="source-line-no">1018</span><span id="line-1018"> }</span> |
| <span class="source-line-no">1019</span><span id="line-1019"> }</span> |
| <span class="source-line-no">1020</span><span id="line-1020"></span> |
| <span class="source-line-no">1021</span><span id="line-1021"> /**</span> |
| <span class="source-line-no">1022</span><span id="line-1022"> * Triggers an asynchronous attempt to run a distributed procedure. {@inheritDoc}</span> |
| <span class="source-line-no">1023</span><span id="line-1023"> */</span> |
| <span class="source-line-no">1024</span><span id="line-1024"> @Override</span> |
| <span class="source-line-no">1025</span><span id="line-1025"> public ExecProcedureResponse execProcedure(RpcController controller, ExecProcedureRequest request)</span> |
| <span class="source-line-no">1026</span><span id="line-1026"> throws ServiceException {</span> |
| <span class="source-line-no">1027</span><span id="line-1027"> try {</span> |
| <span class="source-line-no">1028</span><span id="line-1028"> server.checkInitialized();</span> |
| <span class="source-line-no">1029</span><span id="line-1029"> ProcedureDescription desc = request.getProcedure();</span> |
| <span class="source-line-no">1030</span><span id="line-1030"> MasterProcedureManager mpm =</span> |
| <span class="source-line-no">1031</span><span id="line-1031"> server.getMasterProcedureManagerHost().getProcedureManager(desc.getSignature());</span> |
| <span class="source-line-no">1032</span><span id="line-1032"> if (mpm == null) {</span> |
| <span class="source-line-no">1033</span><span id="line-1033"> throw new ServiceException(</span> |
| <span class="source-line-no">1034</span><span id="line-1034"> new DoNotRetryIOException("The procedure is not registered: " + desc.getSignature()));</span> |
| <span class="source-line-no">1035</span><span id="line-1035"> }</span> |
| <span class="source-line-no">1036</span><span id="line-1036"> LOG.info(server.getClientIdAuditPrefix() + " procedure request for: " + desc.getSignature());</span> |
| <span class="source-line-no">1037</span><span id="line-1037"> mpm.checkPermissions(desc, getAccessChecker(), RpcServer.getRequestUser().orElse(null));</span> |
| <span class="source-line-no">1038</span><span id="line-1038"> mpm.execProcedure(desc);</span> |
| <span class="source-line-no">1039</span><span id="line-1039"> // send back the max amount of time the client should wait for the procedure</span> |
| <span class="source-line-no">1040</span><span id="line-1040"> // to complete</span> |
| <span class="source-line-no">1041</span><span id="line-1041"> long waitTime = SnapshotDescriptionUtils.DEFAULT_MAX_WAIT_TIME;</span> |
| <span class="source-line-no">1042</span><span id="line-1042"> return ExecProcedureResponse.newBuilder().setExpectedTimeout(waitTime).build();</span> |
| <span class="source-line-no">1043</span><span id="line-1043"> } catch (ForeignException e) {</span> |
| <span class="source-line-no">1044</span><span id="line-1044"> throw new ServiceException(e.getCause());</span> |
| <span class="source-line-no">1045</span><span id="line-1045"> } catch (IOException e) {</span> |
| <span class="source-line-no">1046</span><span id="line-1046"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1047</span><span id="line-1047"> }</span> |
| <span class="source-line-no">1048</span><span id="line-1048"> }</span> |
| <span class="source-line-no">1049</span><span id="line-1049"></span> |
| <span class="source-line-no">1050</span><span id="line-1050"> /**</span> |
| <span class="source-line-no">1051</span><span id="line-1051"> * Triggers a synchronous attempt to run a distributed procedure and sets return data in response.</span> |
| <span class="source-line-no">1052</span><span id="line-1052"> * {@inheritDoc}</span> |
| <span class="source-line-no">1053</span><span id="line-1053"> */</span> |
| <span class="source-line-no">1054</span><span id="line-1054"> @Override</span> |
| <span class="source-line-no">1055</span><span id="line-1055"> public ExecProcedureResponse execProcedureWithRet(RpcController controller,</span> |
| <span class="source-line-no">1056</span><span id="line-1056"> ExecProcedureRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1057</span><span id="line-1057"> rpcPreCheck("execProcedureWithRet");</span> |
| <span class="source-line-no">1058</span><span id="line-1058"> try {</span> |
| <span class="source-line-no">1059</span><span id="line-1059"> ProcedureDescription desc = request.getProcedure();</span> |
| <span class="source-line-no">1060</span><span id="line-1060"> MasterProcedureManager mpm =</span> |
| <span class="source-line-no">1061</span><span id="line-1061"> server.getMasterProcedureManagerHost().getProcedureManager(desc.getSignature());</span> |
| <span class="source-line-no">1062</span><span id="line-1062"> if (mpm == null) {</span> |
| <span class="source-line-no">1063</span><span id="line-1063"> throw new ServiceException("The procedure is not registered: " + desc.getSignature());</span> |
| <span class="source-line-no">1064</span><span id="line-1064"> }</span> |
| <span class="source-line-no">1065</span><span id="line-1065"> LOG.info(server.getClientIdAuditPrefix() + " procedure request for: " + desc.getSignature());</span> |
| <span class="source-line-no">1066</span><span id="line-1066"> byte[] data = mpm.execProcedureWithRet(desc);</span> |
| <span class="source-line-no">1067</span><span id="line-1067"> ExecProcedureResponse.Builder builder = ExecProcedureResponse.newBuilder();</span> |
| <span class="source-line-no">1068</span><span id="line-1068"> // set return data if available</span> |
| <span class="source-line-no">1069</span><span id="line-1069"> if (data != null) {</span> |
| <span class="source-line-no">1070</span><span id="line-1070"> builder.setReturnData(UnsafeByteOperations.unsafeWrap(data));</span> |
| <span class="source-line-no">1071</span><span id="line-1071"> }</span> |
| <span class="source-line-no">1072</span><span id="line-1072"> return builder.build();</span> |
| <span class="source-line-no">1073</span><span id="line-1073"> } catch (IOException e) {</span> |
| <span class="source-line-no">1074</span><span id="line-1074"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1075</span><span id="line-1075"> }</span> |
| <span class="source-line-no">1076</span><span id="line-1076"> }</span> |
| <span class="source-line-no">1077</span><span id="line-1077"></span> |
| <span class="source-line-no">1078</span><span id="line-1078"> @Override</span> |
| <span class="source-line-no">1079</span><span id="line-1079"> public GetClusterStatusResponse getClusterStatus(RpcController controller,</span> |
| <span class="source-line-no">1080</span><span id="line-1080"> GetClusterStatusRequest req) throws ServiceException {</span> |
| <span class="source-line-no">1081</span><span id="line-1081"> GetClusterStatusResponse.Builder response = GetClusterStatusResponse.newBuilder();</span> |
| <span class="source-line-no">1082</span><span id="line-1082"> try {</span> |
| <span class="source-line-no">1083</span><span id="line-1083"> // We used to check if Master was up at this point but let this call proceed even if</span> |
| <span class="source-line-no">1084</span><span id="line-1084"> // Master is initializing... else we shut out stuff like hbck2 tool from making progress</span> |
| <span class="source-line-no">1085</span><span id="line-1085"> // since it queries this method to figure cluster version. hbck2 wants to be able to work</span> |
| <span class="source-line-no">1086</span><span id="line-1086"> // against Master even if it is 'initializing' so it can do fixup.</span> |
| <span class="source-line-no">1087</span><span id="line-1087"> response.setClusterStatus(ClusterMetricsBuilder.toClusterStatus(</span> |
| <span class="source-line-no">1088</span><span id="line-1088"> server.getClusterMetrics(ClusterMetricsBuilder.toOptions(req.getOptionsList()))));</span> |
| <span class="source-line-no">1089</span><span id="line-1089"> } catch (IOException e) {</span> |
| <span class="source-line-no">1090</span><span id="line-1090"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1091</span><span id="line-1091"> }</span> |
| <span class="source-line-no">1092</span><span id="line-1092"> return response.build();</span> |
| <span class="source-line-no">1093</span><span id="line-1093"> }</span> |
| <span class="source-line-no">1094</span><span id="line-1094"></span> |
| <span class="source-line-no">1095</span><span id="line-1095"> /**</span> |
| <span class="source-line-no">1096</span><span id="line-1096"> * List the currently available/stored snapshots. Any in-progress snapshots are ignored</span> |
| <span class="source-line-no">1097</span><span id="line-1097"> */</span> |
| <span class="source-line-no">1098</span><span id="line-1098"> @Override</span> |
| <span class="source-line-no">1099</span><span id="line-1099"> public GetCompletedSnapshotsResponse getCompletedSnapshots(RpcController controller,</span> |
| <span class="source-line-no">1100</span><span id="line-1100"> GetCompletedSnapshotsRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1101</span><span id="line-1101"> try {</span> |
| <span class="source-line-no">1102</span><span id="line-1102"> server.checkInitialized();</span> |
| <span class="source-line-no">1103</span><span id="line-1103"> GetCompletedSnapshotsResponse.Builder builder = GetCompletedSnapshotsResponse.newBuilder();</span> |
| <span class="source-line-no">1104</span><span id="line-1104"> List<SnapshotDescription> snapshots = server.snapshotManager.getCompletedSnapshots();</span> |
| <span class="source-line-no">1105</span><span id="line-1105"></span> |
| <span class="source-line-no">1106</span><span id="line-1106"> // convert to protobuf</span> |
| <span class="source-line-no">1107</span><span id="line-1107"> for (SnapshotDescription snapshot : snapshots) {</span> |
| <span class="source-line-no">1108</span><span id="line-1108"> builder.addSnapshots(snapshot);</span> |
| <span class="source-line-no">1109</span><span id="line-1109"> }</span> |
| <span class="source-line-no">1110</span><span id="line-1110"> return builder.build();</span> |
| <span class="source-line-no">1111</span><span id="line-1111"> } catch (IOException e) {</span> |
| <span class="source-line-no">1112</span><span id="line-1112"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1113</span><span id="line-1113"> }</span> |
| <span class="source-line-no">1114</span><span id="line-1114"> }</span> |
| <span class="source-line-no">1115</span><span id="line-1115"></span> |
| <span class="source-line-no">1116</span><span id="line-1116"> @Override</span> |
| <span class="source-line-no">1117</span><span id="line-1117"> public ListNamespacesResponse listNamespaces(RpcController controller,</span> |
| <span class="source-line-no">1118</span><span id="line-1118"> ListNamespacesRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1119</span><span id="line-1119"> try {</span> |
| <span class="source-line-no">1120</span><span id="line-1120"> return ListNamespacesResponse.newBuilder().addAllNamespaceName(server.listNamespaces())</span> |
| <span class="source-line-no">1121</span><span id="line-1121"> .build();</span> |
| <span class="source-line-no">1122</span><span id="line-1122"> } catch (IOException e) {</span> |
| <span class="source-line-no">1123</span><span id="line-1123"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1124</span><span id="line-1124"> }</span> |
| <span class="source-line-no">1125</span><span id="line-1125"> }</span> |
| <span class="source-line-no">1126</span><span id="line-1126"></span> |
| <span class="source-line-no">1127</span><span id="line-1127"> @Override</span> |
| <span class="source-line-no">1128</span><span id="line-1128"> public GetNamespaceDescriptorResponse getNamespaceDescriptor(RpcController controller,</span> |
| <span class="source-line-no">1129</span><span id="line-1129"> GetNamespaceDescriptorRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1130</span><span id="line-1130"> try {</span> |
| <span class="source-line-no">1131</span><span id="line-1131"> return GetNamespaceDescriptorResponse.newBuilder()</span> |
| <span class="source-line-no">1132</span><span id="line-1132"> .setNamespaceDescriptor(</span> |
| <span class="source-line-no">1133</span><span id="line-1133"> ProtobufUtil.toProtoNamespaceDescriptor(server.getNamespace(request.getNamespaceName())))</span> |
| <span class="source-line-no">1134</span><span id="line-1134"> .build();</span> |
| <span class="source-line-no">1135</span><span id="line-1135"> } catch (IOException e) {</span> |
| <span class="source-line-no">1136</span><span id="line-1136"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1137</span><span id="line-1137"> }</span> |
| <span class="source-line-no">1138</span><span id="line-1138"> }</span> |
| <span class="source-line-no">1139</span><span id="line-1139"></span> |
| <span class="source-line-no">1140</span><span id="line-1140"> /**</span> |
| <span class="source-line-no">1141</span><span id="line-1141"> * Get the number of regions of the table that have been updated by the alter.</span> |
| <span class="source-line-no">1142</span><span id="line-1142"> * @return Pair indicating the number of regions updated Pair.getFirst is the regions that are yet</span> |
| <span class="source-line-no">1143</span><span id="line-1143"> * to be updated Pair.getSecond is the total number of regions of the table</span> |
| <span class="source-line-no">1144</span><span id="line-1144"> */</span> |
| <span class="source-line-no">1145</span><span id="line-1145"> @Override</span> |
| <span class="source-line-no">1146</span><span id="line-1146"> public GetSchemaAlterStatusResponse getSchemaAlterStatus(RpcController controller,</span> |
| <span class="source-line-no">1147</span><span id="line-1147"> GetSchemaAlterStatusRequest req) throws ServiceException {</span> |
| <span class="source-line-no">1148</span><span id="line-1148"> // TODO: currently, we query using the table name on the client side. this</span> |
| <span class="source-line-no">1149</span><span id="line-1149"> // may overlap with other table operations or the table operation may</span> |
| <span class="source-line-no">1150</span><span id="line-1150"> // have completed before querying this API. We need to refactor to a</span> |
| <span class="source-line-no">1151</span><span id="line-1151"> // transaction system in the future to avoid these ambiguities.</span> |
| <span class="source-line-no">1152</span><span id="line-1152"> TableName tableName = ProtobufUtil.toTableName(req.getTableName());</span> |
| <span class="source-line-no">1153</span><span id="line-1153"></span> |
| <span class="source-line-no">1154</span><span id="line-1154"> try {</span> |
| <span class="source-line-no">1155</span><span id="line-1155"> server.checkInitialized();</span> |
| <span class="source-line-no">1156</span><span id="line-1156"> Pair<Integer, Integer> pair = server.getAssignmentManager().getReopenStatus(tableName);</span> |
| <span class="source-line-no">1157</span><span id="line-1157"> GetSchemaAlterStatusResponse.Builder ret = GetSchemaAlterStatusResponse.newBuilder();</span> |
| <span class="source-line-no">1158</span><span id="line-1158"> ret.setYetToUpdateRegions(pair.getFirst());</span> |
| <span class="source-line-no">1159</span><span id="line-1159"> ret.setTotalRegions(pair.getSecond());</span> |
| <span class="source-line-no">1160</span><span id="line-1160"> return ret.build();</span> |
| <span class="source-line-no">1161</span><span id="line-1161"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">1162</span><span id="line-1162"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">1163</span><span id="line-1163"> }</span> |
| <span class="source-line-no">1164</span><span id="line-1164"> }</span> |
| <span class="source-line-no">1165</span><span id="line-1165"></span> |
| <span class="source-line-no">1166</span><span id="line-1166"> /**</span> |
| <span class="source-line-no">1167</span><span id="line-1167"> * Get list of TableDescriptors for requested tables.</span> |
| <span class="source-line-no">1168</span><span id="line-1168"> * @param c Unused (set to null).</span> |
| <span class="source-line-no">1169</span><span id="line-1169"> * @param req GetTableDescriptorsRequest that contains: - tableNames: requested tables, or if</span> |
| <span class="source-line-no">1170</span><span id="line-1170"> * empty, all are requested.</span> |
| <span class="source-line-no">1171</span><span id="line-1171"> */</span> |
| <span class="source-line-no">1172</span><span id="line-1172"> @Override</span> |
| <span class="source-line-no">1173</span><span id="line-1173"> public GetTableDescriptorsResponse getTableDescriptors(RpcController c,</span> |
| <span class="source-line-no">1174</span><span id="line-1174"> GetTableDescriptorsRequest req) throws ServiceException {</span> |
| <span class="source-line-no">1175</span><span id="line-1175"> try {</span> |
| <span class="source-line-no">1176</span><span id="line-1176"> server.checkInitialized();</span> |
| <span class="source-line-no">1177</span><span id="line-1177"></span> |
| <span class="source-line-no">1178</span><span id="line-1178"> final String regex = req.hasRegex() ? req.getRegex() : null;</span> |
| <span class="source-line-no">1179</span><span id="line-1179"> final String namespace = req.hasNamespace() ? req.getNamespace() : null;</span> |
| <span class="source-line-no">1180</span><span id="line-1180"> List<TableName> tableNameList = null;</span> |
| <span class="source-line-no">1181</span><span id="line-1181"> if (req.getTableNamesCount() > 0) {</span> |
| <span class="source-line-no">1182</span><span id="line-1182"> tableNameList = new ArrayList<TableName>(req.getTableNamesCount());</span> |
| <span class="source-line-no">1183</span><span id="line-1183"> for (HBaseProtos.TableName tableNamePB : req.getTableNamesList()) {</span> |
| <span class="source-line-no">1184</span><span id="line-1184"> tableNameList.add(ProtobufUtil.toTableName(tableNamePB));</span> |
| <span class="source-line-no">1185</span><span id="line-1185"> }</span> |
| <span class="source-line-no">1186</span><span id="line-1186"> }</span> |
| <span class="source-line-no">1187</span><span id="line-1187"></span> |
| <span class="source-line-no">1188</span><span id="line-1188"> List<TableDescriptor> descriptors =</span> |
| <span class="source-line-no">1189</span><span id="line-1189"> server.listTableDescriptors(namespace, regex, tableNameList, req.getIncludeSysTables());</span> |
| <span class="source-line-no">1190</span><span id="line-1190"></span> |
| <span class="source-line-no">1191</span><span id="line-1191"> GetTableDescriptorsResponse.Builder builder = GetTableDescriptorsResponse.newBuilder();</span> |
| <span class="source-line-no">1192</span><span id="line-1192"> if (descriptors != null && descriptors.size() > 0) {</span> |
| <span class="source-line-no">1193</span><span id="line-1193"> // Add the table descriptors to the response</span> |
| <span class="source-line-no">1194</span><span id="line-1194"> for (TableDescriptor htd : descriptors) {</span> |
| <span class="source-line-no">1195</span><span id="line-1195"> builder.addTableSchema(ProtobufUtil.toTableSchema(htd));</span> |
| <span class="source-line-no">1196</span><span id="line-1196"> }</span> |
| <span class="source-line-no">1197</span><span id="line-1197"> }</span> |
| <span class="source-line-no">1198</span><span id="line-1198"> return builder.build();</span> |
| <span class="source-line-no">1199</span><span id="line-1199"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">1200</span><span id="line-1200"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">1201</span><span id="line-1201"> }</span> |
| <span class="source-line-no">1202</span><span id="line-1202"> }</span> |
| <span class="source-line-no">1203</span><span id="line-1203"></span> |
| <span class="source-line-no">1204</span><span id="line-1204"> @Override</span> |
| <span class="source-line-no">1205</span><span id="line-1205"> public ListTableDescriptorsByStateResponse listTableDescriptorsByState(RpcController controller,</span> |
| <span class="source-line-no">1206</span><span id="line-1206"> ListTableDescriptorsByStateRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1207</span><span id="line-1207"> try {</span> |
| <span class="source-line-no">1208</span><span id="line-1208"> server.checkInitialized();</span> |
| <span class="source-line-no">1209</span><span id="line-1209"> List<TableDescriptor> descriptors = server.listTableDescriptors(null, null, null, false);</span> |
| <span class="source-line-no">1210</span><span id="line-1210"></span> |
| <span class="source-line-no">1211</span><span id="line-1211"> ListTableDescriptorsByStateResponse.Builder builder =</span> |
| <span class="source-line-no">1212</span><span id="line-1212"> ListTableDescriptorsByStateResponse.newBuilder();</span> |
| <span class="source-line-no">1213</span><span id="line-1213"> if (descriptors != null && descriptors.size() > 0) {</span> |
| <span class="source-line-no">1214</span><span id="line-1214"> // Add the table descriptors to the response</span> |
| <span class="source-line-no">1215</span><span id="line-1215"> TableState.State state =</span> |
| <span class="source-line-no">1216</span><span id="line-1216"> request.getIsEnabled() ? TableState.State.ENABLED : TableState.State.DISABLED;</span> |
| <span class="source-line-no">1217</span><span id="line-1217"> for (TableDescriptor htd : descriptors) {</span> |
| <span class="source-line-no">1218</span><span id="line-1218"> if (server.getTableStateManager().isTableState(htd.getTableName(), state)) {</span> |
| <span class="source-line-no">1219</span><span id="line-1219"> builder.addTableSchema(ProtobufUtil.toTableSchema(htd));</span> |
| <span class="source-line-no">1220</span><span id="line-1220"> }</span> |
| <span class="source-line-no">1221</span><span id="line-1221"> }</span> |
| <span class="source-line-no">1222</span><span id="line-1222"> }</span> |
| <span class="source-line-no">1223</span><span id="line-1223"> return builder.build();</span> |
| <span class="source-line-no">1224</span><span id="line-1224"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">1225</span><span id="line-1225"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">1226</span><span id="line-1226"> }</span> |
| <span class="source-line-no">1227</span><span id="line-1227"> }</span> |
| <span class="source-line-no">1228</span><span id="line-1228"></span> |
| <span class="source-line-no">1229</span><span id="line-1229"> /**</span> |
| <span class="source-line-no">1230</span><span id="line-1230"> * Get list of userspace table names</span> |
| <span class="source-line-no">1231</span><span id="line-1231"> * @param controller Unused (set to null).</span> |
| <span class="source-line-no">1232</span><span id="line-1232"> * @param req GetTableNamesRequest</span> |
| <span class="source-line-no">1233</span><span id="line-1233"> */</span> |
| <span class="source-line-no">1234</span><span id="line-1234"> @Override</span> |
| <span class="source-line-no">1235</span><span id="line-1235"> public GetTableNamesResponse getTableNames(RpcController controller, GetTableNamesRequest req)</span> |
| <span class="source-line-no">1236</span><span id="line-1236"> throws ServiceException {</span> |
| <span class="source-line-no">1237</span><span id="line-1237"> try {</span> |
| <span class="source-line-no">1238</span><span id="line-1238"> server.checkServiceStarted();</span> |
| <span class="source-line-no">1239</span><span id="line-1239"></span> |
| <span class="source-line-no">1240</span><span id="line-1240"> final String regex = req.hasRegex() ? req.getRegex() : null;</span> |
| <span class="source-line-no">1241</span><span id="line-1241"> final String namespace = req.hasNamespace() ? req.getNamespace() : null;</span> |
| <span class="source-line-no">1242</span><span id="line-1242"> List<TableName> tableNames =</span> |
| <span class="source-line-no">1243</span><span id="line-1243"> server.listTableNames(namespace, regex, req.getIncludeSysTables());</span> |
| <span class="source-line-no">1244</span><span id="line-1244"></span> |
| <span class="source-line-no">1245</span><span id="line-1245"> GetTableNamesResponse.Builder builder = GetTableNamesResponse.newBuilder();</span> |
| <span class="source-line-no">1246</span><span id="line-1246"> if (tableNames != null && tableNames.size() > 0) {</span> |
| <span class="source-line-no">1247</span><span id="line-1247"> // Add the table names to the response</span> |
| <span class="source-line-no">1248</span><span id="line-1248"> for (TableName table : tableNames) {</span> |
| <span class="source-line-no">1249</span><span id="line-1249"> builder.addTableNames(ProtobufUtil.toProtoTableName(table));</span> |
| <span class="source-line-no">1250</span><span id="line-1250"> }</span> |
| <span class="source-line-no">1251</span><span id="line-1251"> }</span> |
| <span class="source-line-no">1252</span><span id="line-1252"> return builder.build();</span> |
| <span class="source-line-no">1253</span><span id="line-1253"> } catch (IOException e) {</span> |
| <span class="source-line-no">1254</span><span id="line-1254"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1255</span><span id="line-1255"> }</span> |
| <span class="source-line-no">1256</span><span id="line-1256"> }</span> |
| <span class="source-line-no">1257</span><span id="line-1257"></span> |
| <span class="source-line-no">1258</span><span id="line-1258"> @Override</span> |
| <span class="source-line-no">1259</span><span id="line-1259"> public ListTableNamesByStateResponse listTableNamesByState(RpcController controller,</span> |
| <span class="source-line-no">1260</span><span id="line-1260"> ListTableNamesByStateRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1261</span><span id="line-1261"> try {</span> |
| <span class="source-line-no">1262</span><span id="line-1262"> server.checkServiceStarted();</span> |
| <span class="source-line-no">1263</span><span id="line-1263"> List<TableName> tableNames = server.listTableNames(null, null, false);</span> |
| <span class="source-line-no">1264</span><span id="line-1264"> ListTableNamesByStateResponse.Builder builder = ListTableNamesByStateResponse.newBuilder();</span> |
| <span class="source-line-no">1265</span><span id="line-1265"> if (tableNames != null && tableNames.size() > 0) {</span> |
| <span class="source-line-no">1266</span><span id="line-1266"> // Add the disabled table names to the response</span> |
| <span class="source-line-no">1267</span><span id="line-1267"> TableState.State state =</span> |
| <span class="source-line-no">1268</span><span id="line-1268"> request.getIsEnabled() ? TableState.State.ENABLED : TableState.State.DISABLED;</span> |
| <span class="source-line-no">1269</span><span id="line-1269"> for (TableName table : tableNames) {</span> |
| <span class="source-line-no">1270</span><span id="line-1270"> if (server.getTableStateManager().isTableState(table, state)) {</span> |
| <span class="source-line-no">1271</span><span id="line-1271"> builder.addTableNames(ProtobufUtil.toProtoTableName(table));</span> |
| <span class="source-line-no">1272</span><span id="line-1272"> }</span> |
| <span class="source-line-no">1273</span><span id="line-1273"> }</span> |
| <span class="source-line-no">1274</span><span id="line-1274"> }</span> |
| <span class="source-line-no">1275</span><span id="line-1275"> return builder.build();</span> |
| <span class="source-line-no">1276</span><span id="line-1276"> } catch (IOException e) {</span> |
| <span class="source-line-no">1277</span><span id="line-1277"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1278</span><span id="line-1278"> }</span> |
| <span class="source-line-no">1279</span><span id="line-1279"> }</span> |
| <span class="source-line-no">1280</span><span id="line-1280"></span> |
| <span class="source-line-no">1281</span><span id="line-1281"> @Override</span> |
| <span class="source-line-no">1282</span><span id="line-1282"> public GetTableStateResponse getTableState(RpcController controller, GetTableStateRequest request)</span> |
| <span class="source-line-no">1283</span><span id="line-1283"> throws ServiceException {</span> |
| <span class="source-line-no">1284</span><span id="line-1284"> try {</span> |
| <span class="source-line-no">1285</span><span id="line-1285"> server.checkServiceStarted();</span> |
| <span class="source-line-no">1286</span><span id="line-1286"> TableName tableName = ProtobufUtil.toTableName(request.getTableName());</span> |
| <span class="source-line-no">1287</span><span id="line-1287"> TableState ts = server.getTableStateManager().getTableState(tableName);</span> |
| <span class="source-line-no">1288</span><span id="line-1288"> GetTableStateResponse.Builder builder = GetTableStateResponse.newBuilder();</span> |
| <span class="source-line-no">1289</span><span id="line-1289"> builder.setTableState(ts.convert());</span> |
| <span class="source-line-no">1290</span><span id="line-1290"> return builder.build();</span> |
| <span class="source-line-no">1291</span><span id="line-1291"> } catch (IOException e) {</span> |
| <span class="source-line-no">1292</span><span id="line-1292"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1293</span><span id="line-1293"> }</span> |
| <span class="source-line-no">1294</span><span id="line-1294"> }</span> |
| <span class="source-line-no">1295</span><span id="line-1295"></span> |
| <span class="source-line-no">1296</span><span id="line-1296"> @Override</span> |
| <span class="source-line-no">1297</span><span id="line-1297"> public IsCatalogJanitorEnabledResponse isCatalogJanitorEnabled(RpcController c,</span> |
| <span class="source-line-no">1298</span><span id="line-1298"> IsCatalogJanitorEnabledRequest req) throws ServiceException {</span> |
| <span class="source-line-no">1299</span><span id="line-1299"> return IsCatalogJanitorEnabledResponse.newBuilder().setValue(server.isCatalogJanitorEnabled())</span> |
| <span class="source-line-no">1300</span><span id="line-1300"> .build();</span> |
| <span class="source-line-no">1301</span><span id="line-1301"> }</span> |
| <span class="source-line-no">1302</span><span id="line-1302"></span> |
| <span class="source-line-no">1303</span><span id="line-1303"> @Override</span> |
| <span class="source-line-no">1304</span><span id="line-1304"> public IsCleanerChoreEnabledResponse isCleanerChoreEnabled(RpcController c,</span> |
| <span class="source-line-no">1305</span><span id="line-1305"> IsCleanerChoreEnabledRequest req) throws ServiceException {</span> |
| <span class="source-line-no">1306</span><span id="line-1306"> return IsCleanerChoreEnabledResponse.newBuilder().setValue(server.isCleanerChoreEnabled())</span> |
| <span class="source-line-no">1307</span><span id="line-1307"> .build();</span> |
| <span class="source-line-no">1308</span><span id="line-1308"> }</span> |
| <span class="source-line-no">1309</span><span id="line-1309"></span> |
| <span class="source-line-no">1310</span><span id="line-1310"> @Override</span> |
| <span class="source-line-no">1311</span><span id="line-1311"> public IsMasterRunningResponse isMasterRunning(RpcController c, IsMasterRunningRequest req)</span> |
| <span class="source-line-no">1312</span><span id="line-1312"> throws ServiceException {</span> |
| <span class="source-line-no">1313</span><span id="line-1313"> try {</span> |
| <span class="source-line-no">1314</span><span id="line-1314"> server.checkServiceStarted();</span> |
| <span class="source-line-no">1315</span><span id="line-1315"> return IsMasterRunningResponse.newBuilder().setIsMasterRunning(!server.isStopped()).build();</span> |
| <span class="source-line-no">1316</span><span id="line-1316"> } catch (IOException e) {</span> |
| <span class="source-line-no">1317</span><span id="line-1317"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1318</span><span id="line-1318"> }</span> |
| <span class="source-line-no">1319</span><span id="line-1319"> }</span> |
| <span class="source-line-no">1320</span><span id="line-1320"></span> |
| <span class="source-line-no">1321</span><span id="line-1321"> /**</span> |
| <span class="source-line-no">1322</span><span id="line-1322"> * Checks if the specified procedure is done.</span> |
| <span class="source-line-no">1323</span><span id="line-1323"> * @return true if the procedure is done, false if the procedure is in the process of completing</span> |
| <span class="source-line-no">1324</span><span id="line-1324"> * @throws ServiceException if invalid procedure or failed procedure with progress failure reason.</span> |
| <span class="source-line-no">1325</span><span id="line-1325"> */</span> |
| <span class="source-line-no">1326</span><span id="line-1326"> @Override</span> |
| <span class="source-line-no">1327</span><span id="line-1327"> public IsProcedureDoneResponse isProcedureDone(RpcController controller,</span> |
| <span class="source-line-no">1328</span><span id="line-1328"> IsProcedureDoneRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1329</span><span id="line-1329"> try {</span> |
| <span class="source-line-no">1330</span><span id="line-1330"> server.checkInitialized();</span> |
| <span class="source-line-no">1331</span><span id="line-1331"> ProcedureDescription desc = request.getProcedure();</span> |
| <span class="source-line-no">1332</span><span id="line-1332"> MasterProcedureManager mpm =</span> |
| <span class="source-line-no">1333</span><span id="line-1333"> server.getMasterProcedureManagerHost().getProcedureManager(desc.getSignature());</span> |
| <span class="source-line-no">1334</span><span id="line-1334"> if (mpm == null) {</span> |
| <span class="source-line-no">1335</span><span id="line-1335"> throw new ServiceException("The procedure is not registered: " + desc.getSignature());</span> |
| <span class="source-line-no">1336</span><span id="line-1336"> }</span> |
| <span class="source-line-no">1337</span><span id="line-1337"> LOG.debug("Checking to see if procedure from request:" + desc.getSignature() + " is done");</span> |
| <span class="source-line-no">1338</span><span id="line-1338"></span> |
| <span class="source-line-no">1339</span><span id="line-1339"> IsProcedureDoneResponse.Builder builder = IsProcedureDoneResponse.newBuilder();</span> |
| <span class="source-line-no">1340</span><span id="line-1340"> boolean done = mpm.isProcedureDone(desc);</span> |
| <span class="source-line-no">1341</span><span id="line-1341"> builder.setDone(done);</span> |
| <span class="source-line-no">1342</span><span id="line-1342"> return builder.build();</span> |
| <span class="source-line-no">1343</span><span id="line-1343"> } catch (ForeignException e) {</span> |
| <span class="source-line-no">1344</span><span id="line-1344"> throw new ServiceException(e.getCause());</span> |
| <span class="source-line-no">1345</span><span id="line-1345"> } catch (IOException e) {</span> |
| <span class="source-line-no">1346</span><span id="line-1346"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1347</span><span id="line-1347"> }</span> |
| <span class="source-line-no">1348</span><span id="line-1348"> }</span> |
| <span class="source-line-no">1349</span><span id="line-1349"></span> |
| <span class="source-line-no">1350</span><span id="line-1350"> /**</span> |
| <span class="source-line-no">1351</span><span id="line-1351"> * Checks if the specified snapshot is done.</span> |
| <span class="source-line-no">1352</span><span id="line-1352"> * @return true if the snapshot is in file system ready to use, false if the snapshot is in the</span> |
| <span class="source-line-no">1353</span><span id="line-1353"> * process of completing</span> |
| <span class="source-line-no">1354</span><span id="line-1354"> * @throws ServiceException wrapping UnknownSnapshotException if invalid snapshot, or a wrapped</span> |
| <span class="source-line-no">1355</span><span id="line-1355"> * HBaseSnapshotException with progress failure reason.</span> |
| <span class="source-line-no">1356</span><span id="line-1356"> */</span> |
| <span class="source-line-no">1357</span><span id="line-1357"> @Override</span> |
| <span class="source-line-no">1358</span><span id="line-1358"> public IsSnapshotDoneResponse isSnapshotDone(RpcController controller,</span> |
| <span class="source-line-no">1359</span><span id="line-1359"> IsSnapshotDoneRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1360</span><span id="line-1360"> LOG.debug("Checking to see if snapshot from request:"</span> |
| <span class="source-line-no">1361</span><span id="line-1361"> + ClientSnapshotDescriptionUtils.toString(request.getSnapshot()) + " is done");</span> |
| <span class="source-line-no">1362</span><span id="line-1362"> try {</span> |
| <span class="source-line-no">1363</span><span id="line-1363"> server.checkInitialized();</span> |
| <span class="source-line-no">1364</span><span id="line-1364"> IsSnapshotDoneResponse.Builder builder = IsSnapshotDoneResponse.newBuilder();</span> |
| <span class="source-line-no">1365</span><span id="line-1365"> boolean done = server.snapshotManager.isSnapshotDone(request.getSnapshot());</span> |
| <span class="source-line-no">1366</span><span id="line-1366"> builder.setDone(done);</span> |
| <span class="source-line-no">1367</span><span id="line-1367"> return builder.build();</span> |
| <span class="source-line-no">1368</span><span id="line-1368"> } catch (ForeignException e) {</span> |
| <span class="source-line-no">1369</span><span id="line-1369"> throw new ServiceException(e.getCause());</span> |
| <span class="source-line-no">1370</span><span id="line-1370"> } catch (IOException e) {</span> |
| <span class="source-line-no">1371</span><span id="line-1371"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1372</span><span id="line-1372"> }</span> |
| <span class="source-line-no">1373</span><span id="line-1373"> }</span> |
| <span class="source-line-no">1374</span><span id="line-1374"></span> |
| <span class="source-line-no">1375</span><span id="line-1375"> @Override</span> |
| <span class="source-line-no">1376</span><span id="line-1376"> public GetProcedureResultResponse getProcedureResult(RpcController controller,</span> |
| <span class="source-line-no">1377</span><span id="line-1377"> GetProcedureResultRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1378</span><span id="line-1378"> LOG.debug("Checking to see if procedure is done pid={}", request.getProcId());</span> |
| <span class="source-line-no">1379</span><span id="line-1379"> try {</span> |
| <span class="source-line-no">1380</span><span id="line-1380"> server.checkInitialized();</span> |
| <span class="source-line-no">1381</span><span id="line-1381"> GetProcedureResultResponse.Builder builder = GetProcedureResultResponse.newBuilder();</span> |
| <span class="source-line-no">1382</span><span id="line-1382"> long procId = request.getProcId();</span> |
| <span class="source-line-no">1383</span><span id="line-1383"> ProcedureExecutor<?> executor = server.getMasterProcedureExecutor();</span> |
| <span class="source-line-no">1384</span><span id="line-1384"> Procedure<?> result = executor.getResultOrProcedure(procId);</span> |
| <span class="source-line-no">1385</span><span id="line-1385"> if (result != null) {</span> |
| <span class="source-line-no">1386</span><span id="line-1386"> builder.setSubmittedTime(result.getSubmittedTime());</span> |
| <span class="source-line-no">1387</span><span id="line-1387"> builder.setLastUpdate(result.getLastUpdate());</span> |
| <span class="source-line-no">1388</span><span id="line-1388"> if (executor.isFinished(procId)) {</span> |
| <span class="source-line-no">1389</span><span id="line-1389"> builder.setState(GetProcedureResultResponse.State.FINISHED);</span> |
| <span class="source-line-no">1390</span><span id="line-1390"> if (result.isFailed()) {</span> |
| <span class="source-line-no">1391</span><span id="line-1391"> IOException exception = MasterProcedureUtil.unwrapRemoteIOException(result);</span> |
| <span class="source-line-no">1392</span><span id="line-1392"> builder.setException(ForeignExceptionUtil.toProtoForeignException(exception));</span> |
| <span class="source-line-no">1393</span><span id="line-1393"> }</span> |
| <span class="source-line-no">1394</span><span id="line-1394"> byte[] resultData = result.getResult();</span> |
| <span class="source-line-no">1395</span><span id="line-1395"> if (resultData != null) {</span> |
| <span class="source-line-no">1396</span><span id="line-1396"> builder.setResult(UnsafeByteOperations.unsafeWrap(resultData));</span> |
| <span class="source-line-no">1397</span><span id="line-1397"> }</span> |
| <span class="source-line-no">1398</span><span id="line-1398"> server.getMasterProcedureExecutor().removeResult(request.getProcId());</span> |
| <span class="source-line-no">1399</span><span id="line-1399"> } else {</span> |
| <span class="source-line-no">1400</span><span id="line-1400"> builder.setState(GetProcedureResultResponse.State.RUNNING);</span> |
| <span class="source-line-no">1401</span><span id="line-1401"> }</span> |
| <span class="source-line-no">1402</span><span id="line-1402"> } else {</span> |
| <span class="source-line-no">1403</span><span id="line-1403"> builder.setState(GetProcedureResultResponse.State.NOT_FOUND);</span> |
| <span class="source-line-no">1404</span><span id="line-1404"> }</span> |
| <span class="source-line-no">1405</span><span id="line-1405"> return builder.build();</span> |
| <span class="source-line-no">1406</span><span id="line-1406"> } catch (IOException e) {</span> |
| <span class="source-line-no">1407</span><span id="line-1407"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1408</span><span id="line-1408"> }</span> |
| <span class="source-line-no">1409</span><span id="line-1409"> }</span> |
| <span class="source-line-no">1410</span><span id="line-1410"></span> |
| <span class="source-line-no">1411</span><span id="line-1411"> @Override</span> |
| <span class="source-line-no">1412</span><span id="line-1412"> public AbortProcedureResponse abortProcedure(RpcController rpcController,</span> |
| <span class="source-line-no">1413</span><span id="line-1413"> AbortProcedureRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1414</span><span id="line-1414"> try {</span> |
| <span class="source-line-no">1415</span><span id="line-1415"> AbortProcedureResponse.Builder response = AbortProcedureResponse.newBuilder();</span> |
| <span class="source-line-no">1416</span><span id="line-1416"> boolean abortResult =</span> |
| <span class="source-line-no">1417</span><span id="line-1417"> server.abortProcedure(request.getProcId(), request.getMayInterruptIfRunning());</span> |
| <span class="source-line-no">1418</span><span id="line-1418"> response.setIsProcedureAborted(abortResult);</span> |
| <span class="source-line-no">1419</span><span id="line-1419"> return response.build();</span> |
| <span class="source-line-no">1420</span><span id="line-1420"> } catch (IOException e) {</span> |
| <span class="source-line-no">1421</span><span id="line-1421"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1422</span><span id="line-1422"> }</span> |
| <span class="source-line-no">1423</span><span id="line-1423"> }</span> |
| <span class="source-line-no">1424</span><span id="line-1424"></span> |
| <span class="source-line-no">1425</span><span id="line-1425"> @Override</span> |
| <span class="source-line-no">1426</span><span id="line-1426"> public ListNamespaceDescriptorsResponse listNamespaceDescriptors(RpcController c,</span> |
| <span class="source-line-no">1427</span><span id="line-1427"> ListNamespaceDescriptorsRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1428</span><span id="line-1428"> try {</span> |
| <span class="source-line-no">1429</span><span id="line-1429"> ListNamespaceDescriptorsResponse.Builder response =</span> |
| <span class="source-line-no">1430</span><span id="line-1430"> ListNamespaceDescriptorsResponse.newBuilder();</span> |
| <span class="source-line-no">1431</span><span id="line-1431"> for (NamespaceDescriptor ns : server.getNamespaces()) {</span> |
| <span class="source-line-no">1432</span><span id="line-1432"> response.addNamespaceDescriptor(ProtobufUtil.toProtoNamespaceDescriptor(ns));</span> |
| <span class="source-line-no">1433</span><span id="line-1433"> }</span> |
| <span class="source-line-no">1434</span><span id="line-1434"> return response.build();</span> |
| <span class="source-line-no">1435</span><span id="line-1435"> } catch (IOException e) {</span> |
| <span class="source-line-no">1436</span><span id="line-1436"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1437</span><span id="line-1437"> }</span> |
| <span class="source-line-no">1438</span><span id="line-1438"> }</span> |
| <span class="source-line-no">1439</span><span id="line-1439"></span> |
| <span class="source-line-no">1440</span><span id="line-1440"> @Override</span> |
| <span class="source-line-no">1441</span><span id="line-1441"> public GetProceduresResponse getProcedures(RpcController rpcController,</span> |
| <span class="source-line-no">1442</span><span id="line-1442"> GetProceduresRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1443</span><span id="line-1443"> try {</span> |
| <span class="source-line-no">1444</span><span id="line-1444"> final GetProceduresResponse.Builder response = GetProceduresResponse.newBuilder();</span> |
| <span class="source-line-no">1445</span><span id="line-1445"> for (Procedure<?> p : server.getProcedures()) {</span> |
| <span class="source-line-no">1446</span><span id="line-1446"> response.addProcedure(ProcedureUtil.convertToProtoProcedure(p));</span> |
| <span class="source-line-no">1447</span><span id="line-1447"> }</span> |
| <span class="source-line-no">1448</span><span id="line-1448"> return response.build();</span> |
| <span class="source-line-no">1449</span><span id="line-1449"> } catch (IOException e) {</span> |
| <span class="source-line-no">1450</span><span id="line-1450"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1451</span><span id="line-1451"> }</span> |
| <span class="source-line-no">1452</span><span id="line-1452"> }</span> |
| <span class="source-line-no">1453</span><span id="line-1453"></span> |
| <span class="source-line-no">1454</span><span id="line-1454"> @Override</span> |
| <span class="source-line-no">1455</span><span id="line-1455"> public GetLocksResponse getLocks(RpcController controller, GetLocksRequest request)</span> |
| <span class="source-line-no">1456</span><span id="line-1456"> throws ServiceException {</span> |
| <span class="source-line-no">1457</span><span id="line-1457"> try {</span> |
| <span class="source-line-no">1458</span><span id="line-1458"> final GetLocksResponse.Builder builder = GetLocksResponse.newBuilder();</span> |
| <span class="source-line-no">1459</span><span id="line-1459"></span> |
| <span class="source-line-no">1460</span><span id="line-1460"> for (LockedResource lockedResource : server.getLocks()) {</span> |
| <span class="source-line-no">1461</span><span id="line-1461"> builder.addLock(ProcedureUtil.convertToProtoLockedResource(lockedResource));</span> |
| <span class="source-line-no">1462</span><span id="line-1462"> }</span> |
| <span class="source-line-no">1463</span><span id="line-1463"></span> |
| <span class="source-line-no">1464</span><span id="line-1464"> return builder.build();</span> |
| <span class="source-line-no">1465</span><span id="line-1465"> } catch (IOException e) {</span> |
| <span class="source-line-no">1466</span><span id="line-1466"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1467</span><span id="line-1467"> }</span> |
| <span class="source-line-no">1468</span><span id="line-1468"> }</span> |
| <span class="source-line-no">1469</span><span id="line-1469"></span> |
| <span class="source-line-no">1470</span><span id="line-1470"> @Override</span> |
| <span class="source-line-no">1471</span><span id="line-1471"> public ListTableDescriptorsByNamespaceResponse listTableDescriptorsByNamespace(RpcController c,</span> |
| <span class="source-line-no">1472</span><span id="line-1472"> ListTableDescriptorsByNamespaceRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1473</span><span id="line-1473"> try {</span> |
| <span class="source-line-no">1474</span><span id="line-1474"> ListTableDescriptorsByNamespaceResponse.Builder b =</span> |
| <span class="source-line-no">1475</span><span id="line-1475"> ListTableDescriptorsByNamespaceResponse.newBuilder();</span> |
| <span class="source-line-no">1476</span><span id="line-1476"> for (TableDescriptor htd : server</span> |
| <span class="source-line-no">1477</span><span id="line-1477"> .listTableDescriptorsByNamespace(request.getNamespaceName())) {</span> |
| <span class="source-line-no">1478</span><span id="line-1478"> b.addTableSchema(ProtobufUtil.toTableSchema(htd));</span> |
| <span class="source-line-no">1479</span><span id="line-1479"> }</span> |
| <span class="source-line-no">1480</span><span id="line-1480"> return b.build();</span> |
| <span class="source-line-no">1481</span><span id="line-1481"> } catch (IOException e) {</span> |
| <span class="source-line-no">1482</span><span id="line-1482"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1483</span><span id="line-1483"> }</span> |
| <span class="source-line-no">1484</span><span id="line-1484"> }</span> |
| <span class="source-line-no">1485</span><span id="line-1485"></span> |
| <span class="source-line-no">1486</span><span id="line-1486"> @Override</span> |
| <span class="source-line-no">1487</span><span id="line-1487"> public ListTableNamesByNamespaceResponse listTableNamesByNamespace(RpcController c,</span> |
| <span class="source-line-no">1488</span><span id="line-1488"> ListTableNamesByNamespaceRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1489</span><span id="line-1489"> try {</span> |
| <span class="source-line-no">1490</span><span id="line-1490"> ListTableNamesByNamespaceResponse.Builder b = ListTableNamesByNamespaceResponse.newBuilder();</span> |
| <span class="source-line-no">1491</span><span id="line-1491"> for (TableName tableName : server.listTableNamesByNamespace(request.getNamespaceName())) {</span> |
| <span class="source-line-no">1492</span><span id="line-1492"> b.addTableName(ProtobufUtil.toProtoTableName(tableName));</span> |
| <span class="source-line-no">1493</span><span id="line-1493"> }</span> |
| <span class="source-line-no">1494</span><span id="line-1494"> return b.build();</span> |
| <span class="source-line-no">1495</span><span id="line-1495"> } catch (IOException e) {</span> |
| <span class="source-line-no">1496</span><span id="line-1496"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1497</span><span id="line-1497"> }</span> |
| <span class="source-line-no">1498</span><span id="line-1498"> }</span> |
| <span class="source-line-no">1499</span><span id="line-1499"></span> |
| <span class="source-line-no">1500</span><span id="line-1500"> @Override</span> |
| <span class="source-line-no">1501</span><span id="line-1501"> public ModifyColumnResponse modifyColumn(RpcController controller, ModifyColumnRequest req)</span> |
| <span class="source-line-no">1502</span><span id="line-1502"> throws ServiceException {</span> |
| <span class="source-line-no">1503</span><span id="line-1503"> try {</span> |
| <span class="source-line-no">1504</span><span id="line-1504"> long procId = server.modifyColumn(ProtobufUtil.toTableName(req.getTableName()),</span> |
| <span class="source-line-no">1505</span><span id="line-1505"> ProtobufUtil.toColumnFamilyDescriptor(req.getColumnFamilies()), req.getNonceGroup(),</span> |
| <span class="source-line-no">1506</span><span id="line-1506"> req.getNonce());</span> |
| <span class="source-line-no">1507</span><span id="line-1507"> if (procId == -1) {</span> |
| <span class="source-line-no">1508</span><span id="line-1508"> // This mean operation was not performed in server, so do not set any procId</span> |
| <span class="source-line-no">1509</span><span id="line-1509"> return ModifyColumnResponse.newBuilder().build();</span> |
| <span class="source-line-no">1510</span><span id="line-1510"> } else {</span> |
| <span class="source-line-no">1511</span><span id="line-1511"> return ModifyColumnResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">1512</span><span id="line-1512"> }</span> |
| <span class="source-line-no">1513</span><span id="line-1513"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">1514</span><span id="line-1514"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">1515</span><span id="line-1515"> }</span> |
| <span class="source-line-no">1516</span><span id="line-1516"> }</span> |
| <span class="source-line-no">1517</span><span id="line-1517"></span> |
| <span class="source-line-no">1518</span><span id="line-1518"> @Override</span> |
| <span class="source-line-no">1519</span><span id="line-1519"> public ModifyColumnStoreFileTrackerResponse modifyColumnStoreFileTracker(RpcController controller,</span> |
| <span class="source-line-no">1520</span><span id="line-1520"> ModifyColumnStoreFileTrackerRequest req) throws ServiceException {</span> |
| <span class="source-line-no">1521</span><span id="line-1521"> try {</span> |
| <span class="source-line-no">1522</span><span id="line-1522"> long procId =</span> |
| <span class="source-line-no">1523</span><span id="line-1523"> server.modifyColumnStoreFileTracker(ProtobufUtil.toTableName(req.getTableName()),</span> |
| <span class="source-line-no">1524</span><span id="line-1524"> req.getFamily().toByteArray(), req.getDstSft(), req.getNonceGroup(), req.getNonce());</span> |
| <span class="source-line-no">1525</span><span id="line-1525"> return ModifyColumnStoreFileTrackerResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">1526</span><span id="line-1526"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">1527</span><span id="line-1527"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">1528</span><span id="line-1528"> }</span> |
| <span class="source-line-no">1529</span><span id="line-1529"> }</span> |
| <span class="source-line-no">1530</span><span id="line-1530"></span> |
| <span class="source-line-no">1531</span><span id="line-1531"> @Override</span> |
| <span class="source-line-no">1532</span><span id="line-1532"> public ModifyNamespaceResponse modifyNamespace(RpcController controller,</span> |
| <span class="source-line-no">1533</span><span id="line-1533"> ModifyNamespaceRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1534</span><span id="line-1534"> try {</span> |
| <span class="source-line-no">1535</span><span id="line-1535"> long procId =</span> |
| <span class="source-line-no">1536</span><span id="line-1536"> server.modifyNamespace(ProtobufUtil.toNamespaceDescriptor(request.getNamespaceDescriptor()),</span> |
| <span class="source-line-no">1537</span><span id="line-1537"> request.getNonceGroup(), request.getNonce());</span> |
| <span class="source-line-no">1538</span><span id="line-1538"> return ModifyNamespaceResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">1539</span><span id="line-1539"> } catch (IOException e) {</span> |
| <span class="source-line-no">1540</span><span id="line-1540"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1541</span><span id="line-1541"> }</span> |
| <span class="source-line-no">1542</span><span id="line-1542"> }</span> |
| <span class="source-line-no">1543</span><span id="line-1543"></span> |
| <span class="source-line-no">1544</span><span id="line-1544"> @Override</span> |
| <span class="source-line-no">1545</span><span id="line-1545"> public ModifyTableResponse modifyTable(RpcController controller, ModifyTableRequest req)</span> |
| <span class="source-line-no">1546</span><span id="line-1546"> throws ServiceException {</span> |
| <span class="source-line-no">1547</span><span id="line-1547"> try {</span> |
| <span class="source-line-no">1548</span><span id="line-1548"> long procId = server.modifyTable(ProtobufUtil.toTableName(req.getTableName()),</span> |
| <span class="source-line-no">1549</span><span id="line-1549"> ProtobufUtil.toTableDescriptor(req.getTableSchema()), req.getNonceGroup(), req.getNonce(),</span> |
| <span class="source-line-no">1550</span><span id="line-1550"> req.getReopenRegions());</span> |
| <span class="source-line-no">1551</span><span id="line-1551"> return ModifyTableResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">1552</span><span id="line-1552"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">1553</span><span id="line-1553"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">1554</span><span id="line-1554"> }</span> |
| <span class="source-line-no">1555</span><span id="line-1555"> }</span> |
| <span class="source-line-no">1556</span><span id="line-1556"></span> |
| <span class="source-line-no">1557</span><span id="line-1557"> @Override</span> |
| <span class="source-line-no">1558</span><span id="line-1558"> public ModifyTableStoreFileTrackerResponse modifyTableStoreFileTracker(RpcController controller,</span> |
| <span class="source-line-no">1559</span><span id="line-1559"> ModifyTableStoreFileTrackerRequest req) throws ServiceException {</span> |
| <span class="source-line-no">1560</span><span id="line-1560"> try {</span> |
| <span class="source-line-no">1561</span><span id="line-1561"> long procId = server.modifyTableStoreFileTracker(ProtobufUtil.toTableName(req.getTableName()),</span> |
| <span class="source-line-no">1562</span><span id="line-1562"> req.getDstSft(), req.getNonceGroup(), req.getNonce());</span> |
| <span class="source-line-no">1563</span><span id="line-1563"> return ModifyTableStoreFileTrackerResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">1564</span><span id="line-1564"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">1565</span><span id="line-1565"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">1566</span><span id="line-1566"> }</span> |
| <span class="source-line-no">1567</span><span id="line-1567"> }</span> |
| <span class="source-line-no">1568</span><span id="line-1568"></span> |
| <span class="source-line-no">1569</span><span id="line-1569"> @Override</span> |
| <span class="source-line-no">1570</span><span id="line-1570"> public MoveRegionResponse moveRegion(RpcController controller, MoveRegionRequest req)</span> |
| <span class="source-line-no">1571</span><span id="line-1571"> throws ServiceException {</span> |
| <span class="source-line-no">1572</span><span id="line-1572"> final byte[] encodedRegionName = req.getRegion().getValue().toByteArray();</span> |
| <span class="source-line-no">1573</span><span id="line-1573"> RegionSpecifierType type = req.getRegion().getType();</span> |
| <span class="source-line-no">1574</span><span id="line-1574"> final byte[] destServerName = (req.hasDestServerName())</span> |
| <span class="source-line-no">1575</span><span id="line-1575"> ? Bytes.toBytes(ProtobufUtil.toServerName(req.getDestServerName()).getServerName())</span> |
| <span class="source-line-no">1576</span><span id="line-1576"> : null;</span> |
| <span class="source-line-no">1577</span><span id="line-1577"> MoveRegionResponse mrr = MoveRegionResponse.newBuilder().build();</span> |
| <span class="source-line-no">1578</span><span id="line-1578"></span> |
| <span class="source-line-no">1579</span><span id="line-1579"> if (type != RegionSpecifierType.ENCODED_REGION_NAME) {</span> |
| <span class="source-line-no">1580</span><span id="line-1580"> LOG.warn("moveRegion specifier type: expected: " + RegionSpecifierType.ENCODED_REGION_NAME</span> |
| <span class="source-line-no">1581</span><span id="line-1581"> + " actual: " + type);</span> |
| <span class="source-line-no">1582</span><span id="line-1582"> }</span> |
| <span class="source-line-no">1583</span><span id="line-1583"></span> |
| <span class="source-line-no">1584</span><span id="line-1584"> try {</span> |
| <span class="source-line-no">1585</span><span id="line-1585"> server.checkInitialized();</span> |
| <span class="source-line-no">1586</span><span id="line-1586"> server.move(encodedRegionName, destServerName);</span> |
| <span class="source-line-no">1587</span><span id="line-1587"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">1588</span><span id="line-1588"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">1589</span><span id="line-1589"> }</span> |
| <span class="source-line-no">1590</span><span id="line-1590"> return mrr;</span> |
| <span class="source-line-no">1591</span><span id="line-1591"> }</span> |
| <span class="source-line-no">1592</span><span id="line-1592"></span> |
| <span class="source-line-no">1593</span><span id="line-1593"> /**</span> |
| <span class="source-line-no">1594</span><span id="line-1594"> * Offline specified region from master's in-memory state. It will not attempt to reassign the</span> |
| <span class="source-line-no">1595</span><span id="line-1595"> * region as in unassign. This is a special method that should be used by experts or hbck.</span> |
| <span class="source-line-no">1596</span><span id="line-1596"> */</span> |
| <span class="source-line-no">1597</span><span id="line-1597"> @Override</span> |
| <span class="source-line-no">1598</span><span id="line-1598"> public OfflineRegionResponse offlineRegion(RpcController controller, OfflineRegionRequest request)</span> |
| <span class="source-line-no">1599</span><span id="line-1599"> throws ServiceException {</span> |
| <span class="source-line-no">1600</span><span id="line-1600"> try {</span> |
| <span class="source-line-no">1601</span><span id="line-1601"> server.checkInitialized();</span> |
| <span class="source-line-no">1602</span><span id="line-1602"></span> |
| <span class="source-line-no">1603</span><span id="line-1603"> final RegionSpecifierType type = request.getRegion().getType();</span> |
| <span class="source-line-no">1604</span><span id="line-1604"> if (type != RegionSpecifierType.REGION_NAME) {</span> |
| <span class="source-line-no">1605</span><span id="line-1605"> LOG.warn("moveRegion specifier type: expected: " + RegionSpecifierType.REGION_NAME</span> |
| <span class="source-line-no">1606</span><span id="line-1606"> + " actual: " + type);</span> |
| <span class="source-line-no">1607</span><span id="line-1607"> }</span> |
| <span class="source-line-no">1608</span><span id="line-1608"></span> |
| <span class="source-line-no">1609</span><span id="line-1609"> final byte[] regionName = request.getRegion().getValue().toByteArray();</span> |
| <span class="source-line-no">1610</span><span id="line-1610"> final RegionInfo hri = server.getAssignmentManager().getRegionInfo(regionName);</span> |
| <span class="source-line-no">1611</span><span id="line-1611"> if (hri == null) {</span> |
| <span class="source-line-no">1612</span><span id="line-1612"> throw new UnknownRegionException(Bytes.toStringBinary(regionName));</span> |
| <span class="source-line-no">1613</span><span id="line-1613"> }</span> |
| <span class="source-line-no">1614</span><span id="line-1614"></span> |
| <span class="source-line-no">1615</span><span id="line-1615"> if (server.cpHost != null) {</span> |
| <span class="source-line-no">1616</span><span id="line-1616"> server.cpHost.preRegionOffline(hri);</span> |
| <span class="source-line-no">1617</span><span id="line-1617"> }</span> |
| <span class="source-line-no">1618</span><span id="line-1618"> LOG.info(server.getClientIdAuditPrefix() + " offline " + hri.getRegionNameAsString());</span> |
| <span class="source-line-no">1619</span><span id="line-1619"> server.getAssignmentManager().offlineRegion(hri);</span> |
| <span class="source-line-no">1620</span><span id="line-1620"> if (server.cpHost != null) {</span> |
| <span class="source-line-no">1621</span><span id="line-1621"> server.cpHost.postRegionOffline(hri);</span> |
| <span class="source-line-no">1622</span><span id="line-1622"> }</span> |
| <span class="source-line-no">1623</span><span id="line-1623"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">1624</span><span id="line-1624"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">1625</span><span id="line-1625"> }</span> |
| <span class="source-line-no">1626</span><span id="line-1626"> return OfflineRegionResponse.newBuilder().build();</span> |
| <span class="source-line-no">1627</span><span id="line-1627"> }</span> |
| <span class="source-line-no">1628</span><span id="line-1628"></span> |
| <span class="source-line-no">1629</span><span id="line-1629"> /**</span> |
| <span class="source-line-no">1630</span><span id="line-1630"> * Execute Restore/Clone snapshot operation.</span> |
| <span class="source-line-no">1631</span><span id="line-1631"> * <p></span> |
| <span class="source-line-no">1632</span><span id="line-1632"> * If the specified table exists a "Restore" is executed, replacing the table schema and directory</span> |
| <span class="source-line-no">1633</span><span id="line-1633"> * data with the content of the snapshot. The table must be disabled, or a</span> |
| <span class="source-line-no">1634</span><span id="line-1634"> * UnsupportedOperationException will be thrown.</span> |
| <span class="source-line-no">1635</span><span id="line-1635"> * <p></span> |
| <span class="source-line-no">1636</span><span id="line-1636"> * If the table doesn't exist a "Clone" is executed, a new table is created using the schema at</span> |
| <span class="source-line-no">1637</span><span id="line-1637"> * the time of the snapshot, and the content of the snapshot.</span> |
| <span class="source-line-no">1638</span><span id="line-1638"> * <p></span> |
| <span class="source-line-no">1639</span><span id="line-1639"> * The restore/clone operation does not require copying HFiles. Since HFiles are immutable the</span> |
| <span class="source-line-no">1640</span><span id="line-1640"> * table can point to and use the same files as the original one.</span> |
| <span class="source-line-no">1641</span><span id="line-1641"> */</span> |
| <span class="source-line-no">1642</span><span id="line-1642"> @Override</span> |
| <span class="source-line-no">1643</span><span id="line-1643"> public RestoreSnapshotResponse restoreSnapshot(RpcController controller,</span> |
| <span class="source-line-no">1644</span><span id="line-1644"> RestoreSnapshotRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1645</span><span id="line-1645"> try {</span> |
| <span class="source-line-no">1646</span><span id="line-1646"> long procId = server.restoreSnapshot(request.getSnapshot(), request.getNonceGroup(),</span> |
| <span class="source-line-no">1647</span><span id="line-1647"> request.getNonce(), request.getRestoreACL(), request.getCustomSFT());</span> |
| <span class="source-line-no">1648</span><span id="line-1648"> return RestoreSnapshotResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">1649</span><span id="line-1649"> } catch (ForeignException e) {</span> |
| <span class="source-line-no">1650</span><span id="line-1650"> throw new ServiceException(e.getCause());</span> |
| <span class="source-line-no">1651</span><span id="line-1651"> } catch (IOException e) {</span> |
| <span class="source-line-no">1652</span><span id="line-1652"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1653</span><span id="line-1653"> }</span> |
| <span class="source-line-no">1654</span><span id="line-1654"> }</span> |
| <span class="source-line-no">1655</span><span id="line-1655"></span> |
| <span class="source-line-no">1656</span><span id="line-1656"> @Override</span> |
| <span class="source-line-no">1657</span><span id="line-1657"> public SetSnapshotCleanupResponse switchSnapshotCleanup(RpcController controller,</span> |
| <span class="source-line-no">1658</span><span id="line-1658"> SetSnapshotCleanupRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1659</span><span id="line-1659"> try {</span> |
| <span class="source-line-no">1660</span><span id="line-1660"> server.checkInitialized();</span> |
| <span class="source-line-no">1661</span><span id="line-1661"> final boolean enabled = request.getEnabled();</span> |
| <span class="source-line-no">1662</span><span id="line-1662"> final boolean isSynchronous = request.hasSynchronous() && request.getSynchronous();</span> |
| <span class="source-line-no">1663</span><span id="line-1663"> final boolean prevSnapshotCleanupRunning = this.switchSnapshotCleanup(enabled, isSynchronous);</span> |
| <span class="source-line-no">1664</span><span id="line-1664"> return SetSnapshotCleanupResponse.newBuilder()</span> |
| <span class="source-line-no">1665</span><span id="line-1665"> .setPrevSnapshotCleanup(prevSnapshotCleanupRunning).build();</span> |
| <span class="source-line-no">1666</span><span id="line-1666"> } catch (IOException e) {</span> |
| <span class="source-line-no">1667</span><span id="line-1667"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1668</span><span id="line-1668"> }</span> |
| <span class="source-line-no">1669</span><span id="line-1669"> }</span> |
| <span class="source-line-no">1670</span><span id="line-1670"></span> |
| <span class="source-line-no">1671</span><span id="line-1671"> @Override</span> |
| <span class="source-line-no">1672</span><span id="line-1672"> public IsSnapshotCleanupEnabledResponse isSnapshotCleanupEnabled(RpcController controller,</span> |
| <span class="source-line-no">1673</span><span id="line-1673"> IsSnapshotCleanupEnabledRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1674</span><span id="line-1674"> try {</span> |
| <span class="source-line-no">1675</span><span id="line-1675"> server.checkInitialized();</span> |
| <span class="source-line-no">1676</span><span id="line-1676"> final boolean isSnapshotCleanupEnabled = server.snapshotCleanupStateStore.get();</span> |
| <span class="source-line-no">1677</span><span id="line-1677"> return IsSnapshotCleanupEnabledResponse.newBuilder().setEnabled(isSnapshotCleanupEnabled)</span> |
| <span class="source-line-no">1678</span><span id="line-1678"> .build();</span> |
| <span class="source-line-no">1679</span><span id="line-1679"> } catch (IOException e) {</span> |
| <span class="source-line-no">1680</span><span id="line-1680"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1681</span><span id="line-1681"> }</span> |
| <span class="source-line-no">1682</span><span id="line-1682"> }</span> |
| <span class="source-line-no">1683</span><span id="line-1683"></span> |
| <span class="source-line-no">1684</span><span id="line-1684"> /**</span> |
| <span class="source-line-no">1685</span><span id="line-1685"> * Turn on/off snapshot auto-cleanup based on TTL</span> |
| <span class="source-line-no">1686</span><span id="line-1686"> * @param enabledNewVal Set to <code>true</code> to enable, <code>false</code> to disable</span> |
| <span class="source-line-no">1687</span><span id="line-1687"> * @param synchronous If <code>true</code>, it waits until current snapshot cleanup is</span> |
| <span class="source-line-no">1688</span><span id="line-1688"> * completed, if outstanding</span> |
| <span class="source-line-no">1689</span><span id="line-1689"> * @return previous snapshot auto-cleanup mode</span> |
| <span class="source-line-no">1690</span><span id="line-1690"> */</span> |
| <span class="source-line-no">1691</span><span id="line-1691"> private synchronized boolean switchSnapshotCleanup(final boolean enabledNewVal,</span> |
| <span class="source-line-no">1692</span><span id="line-1692"> final boolean synchronous) throws IOException {</span> |
| <span class="source-line-no">1693</span><span id="line-1693"> final boolean oldValue = server.snapshotCleanupStateStore.get();</span> |
| <span class="source-line-no">1694</span><span id="line-1694"> server.switchSnapshotCleanup(enabledNewVal, synchronous);</span> |
| <span class="source-line-no">1695</span><span id="line-1695"> LOG.info("{} Successfully set snapshot cleanup to {}", server.getClientIdAuditPrefix(),</span> |
| <span class="source-line-no">1696</span><span id="line-1696"> enabledNewVal);</span> |
| <span class="source-line-no">1697</span><span id="line-1697"> return oldValue;</span> |
| <span class="source-line-no">1698</span><span id="line-1698"> }</span> |
| <span class="source-line-no">1699</span><span id="line-1699"></span> |
| <span class="source-line-no">1700</span><span id="line-1700"> @Override</span> |
| <span class="source-line-no">1701</span><span id="line-1701"> public RunCatalogScanResponse runCatalogScan(RpcController c, RunCatalogScanRequest req)</span> |
| <span class="source-line-no">1702</span><span id="line-1702"> throws ServiceException {</span> |
| <span class="source-line-no">1703</span><span id="line-1703"> rpcPreCheck("runCatalogScan");</span> |
| <span class="source-line-no">1704</span><span id="line-1704"> try {</span> |
| <span class="source-line-no">1705</span><span id="line-1705"> return ResponseConverter.buildRunCatalogScanResponse(this.server.catalogJanitorChore.scan());</span> |
| <span class="source-line-no">1706</span><span id="line-1706"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">1707</span><span id="line-1707"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">1708</span><span id="line-1708"> }</span> |
| <span class="source-line-no">1709</span><span id="line-1709"> }</span> |
| <span class="source-line-no">1710</span><span id="line-1710"></span> |
| <span class="source-line-no">1711</span><span id="line-1711"> @Override</span> |
| <span class="source-line-no">1712</span><span id="line-1712"> public RunCleanerChoreResponse runCleanerChore(RpcController c, RunCleanerChoreRequest req)</span> |
| <span class="source-line-no">1713</span><span id="line-1713"> throws ServiceException {</span> |
| <span class="source-line-no">1714</span><span id="line-1714"> rpcPreCheck("runCleanerChore");</span> |
| <span class="source-line-no">1715</span><span id="line-1715"> try {</span> |
| <span class="source-line-no">1716</span><span id="line-1716"> CompletableFuture<Boolean> fileCleanerFuture = server.getHFileCleaner().triggerCleanerNow();</span> |
| <span class="source-line-no">1717</span><span id="line-1717"> CompletableFuture<Boolean> logCleanerFuture = server.getLogCleaner().triggerCleanerNow();</span> |
| <span class="source-line-no">1718</span><span id="line-1718"> boolean result = fileCleanerFuture.get() && logCleanerFuture.get();</span> |
| <span class="source-line-no">1719</span><span id="line-1719"> return ResponseConverter.buildRunCleanerChoreResponse(result);</span> |
| <span class="source-line-no">1720</span><span id="line-1720"> } catch (InterruptedException e) {</span> |
| <span class="source-line-no">1721</span><span id="line-1721"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1722</span><span id="line-1722"> } catch (ExecutionException e) {</span> |
| <span class="source-line-no">1723</span><span id="line-1723"> throw new ServiceException(e.getCause());</span> |
| <span class="source-line-no">1724</span><span id="line-1724"> }</span> |
| <span class="source-line-no">1725</span><span id="line-1725"> }</span> |
| <span class="source-line-no">1726</span><span id="line-1726"></span> |
| <span class="source-line-no">1727</span><span id="line-1727"> @Override</span> |
| <span class="source-line-no">1728</span><span id="line-1728"> public SetBalancerRunningResponse setBalancerRunning(RpcController c,</span> |
| <span class="source-line-no">1729</span><span id="line-1729"> SetBalancerRunningRequest req) throws ServiceException {</span> |
| <span class="source-line-no">1730</span><span id="line-1730"> try {</span> |
| <span class="source-line-no">1731</span><span id="line-1731"> server.checkInitialized();</span> |
| <span class="source-line-no">1732</span><span id="line-1732"> boolean prevValue = (req.getSynchronous())</span> |
| <span class="source-line-no">1733</span><span id="line-1733"> ? synchronousBalanceSwitch(req.getOn())</span> |
| <span class="source-line-no">1734</span><span id="line-1734"> : server.balanceSwitch(req.getOn());</span> |
| <span class="source-line-no">1735</span><span id="line-1735"> return SetBalancerRunningResponse.newBuilder().setPrevBalanceValue(prevValue).build();</span> |
| <span class="source-line-no">1736</span><span id="line-1736"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">1737</span><span id="line-1737"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">1738</span><span id="line-1738"> }</span> |
| <span class="source-line-no">1739</span><span id="line-1739"> }</span> |
| <span class="source-line-no">1740</span><span id="line-1740"></span> |
| <span class="source-line-no">1741</span><span id="line-1741"> @Override</span> |
| <span class="source-line-no">1742</span><span id="line-1742"> public ShutdownResponse shutdown(RpcController controller, ShutdownRequest request)</span> |
| <span class="source-line-no">1743</span><span id="line-1743"> throws ServiceException {</span> |
| <span class="source-line-no">1744</span><span id="line-1744"> LOG.info(server.getClientIdAuditPrefix() + " shutdown");</span> |
| <span class="source-line-no">1745</span><span id="line-1745"> try {</span> |
| <span class="source-line-no">1746</span><span id="line-1746"> server.shutdown();</span> |
| <span class="source-line-no">1747</span><span id="line-1747"> } catch (IOException e) {</span> |
| <span class="source-line-no">1748</span><span id="line-1748"> LOG.error("Exception occurred in HMaster.shutdown()", e);</span> |
| <span class="source-line-no">1749</span><span id="line-1749"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1750</span><span id="line-1750"> }</span> |
| <span class="source-line-no">1751</span><span id="line-1751"> return ShutdownResponse.newBuilder().build();</span> |
| <span class="source-line-no">1752</span><span id="line-1752"> }</span> |
| <span class="source-line-no">1753</span><span id="line-1753"></span> |
| <span class="source-line-no">1754</span><span id="line-1754"> /**</span> |
| <span class="source-line-no">1755</span><span id="line-1755"> * Triggers an asynchronous attempt to take a snapshot. {@inheritDoc}</span> |
| <span class="source-line-no">1756</span><span id="line-1756"> */</span> |
| <span class="source-line-no">1757</span><span id="line-1757"> @Override</span> |
| <span class="source-line-no">1758</span><span id="line-1758"> public SnapshotResponse snapshot(RpcController controller, SnapshotRequest request)</span> |
| <span class="source-line-no">1759</span><span id="line-1759"> throws ServiceException {</span> |
| <span class="source-line-no">1760</span><span id="line-1760"> try {</span> |
| <span class="source-line-no">1761</span><span id="line-1761"> server.checkInitialized();</span> |
| <span class="source-line-no">1762</span><span id="line-1762"> server.snapshotManager.checkSnapshotSupport();</span> |
| <span class="source-line-no">1763</span><span id="line-1763"></span> |
| <span class="source-line-no">1764</span><span id="line-1764"> LOG.info(server.getClientIdAuditPrefix() + " snapshot request for:"</span> |
| <span class="source-line-no">1765</span><span id="line-1765"> + ClientSnapshotDescriptionUtils.toString(request.getSnapshot()));</span> |
| <span class="source-line-no">1766</span><span id="line-1766"> // get the snapshot information</span> |
| <span class="source-line-no">1767</span><span id="line-1767"> SnapshotDescription snapshot =</span> |
| <span class="source-line-no">1768</span><span id="line-1768"> SnapshotDescriptionUtils.validate(request.getSnapshot(), server.getConfiguration());</span> |
| <span class="source-line-no">1769</span><span id="line-1769"> // send back the max amount of time the client should wait for the snapshot to complete</span> |
| <span class="source-line-no">1770</span><span id="line-1770"> long waitTime = SnapshotDescriptionUtils.getMaxMasterTimeout(server.getConfiguration(),</span> |
| <span class="source-line-no">1771</span><span id="line-1771"> snapshot.getType(), SnapshotDescriptionUtils.DEFAULT_MAX_WAIT_TIME);</span> |
| <span class="source-line-no">1772</span><span id="line-1772"></span> |
| <span class="source-line-no">1773</span><span id="line-1773"> SnapshotResponse.Builder builder = SnapshotResponse.newBuilder().setExpectedTimeout(waitTime);</span> |
| <span class="source-line-no">1774</span><span id="line-1774"></span> |
| <span class="source-line-no">1775</span><span id="line-1775"> // If there is nonce group and nonce in the snapshot request, then the client can</span> |
| <span class="source-line-no">1776</span><span id="line-1776"> // handle snapshot procedure procId. And if enable the snapshot procedure, we</span> |
| <span class="source-line-no">1777</span><span id="line-1777"> // will do the snapshot work with proc-v2, otherwise we will fall back to zk proc.</span> |
| <span class="source-line-no">1778</span><span id="line-1778"> if (</span> |
| <span class="source-line-no">1779</span><span id="line-1779"> request.hasNonceGroup() && request.hasNonce()</span> |
| <span class="source-line-no">1780</span><span id="line-1780"> && server.snapshotManager.snapshotProcedureEnabled()</span> |
| <span class="source-line-no">1781</span><span id="line-1781"> ) {</span> |
| <span class="source-line-no">1782</span><span id="line-1782"> long nonceGroup = request.getNonceGroup();</span> |
| <span class="source-line-no">1783</span><span id="line-1783"> long nonce = request.getNonce();</span> |
| <span class="source-line-no">1784</span><span id="line-1784"> long procId = server.snapshotManager.takeSnapshot(snapshot, nonceGroup, nonce);</span> |
| <span class="source-line-no">1785</span><span id="line-1785"> return builder.setProcId(procId).build();</span> |
| <span class="source-line-no">1786</span><span id="line-1786"> } else {</span> |
| <span class="source-line-no">1787</span><span id="line-1787"> server.snapshotManager.takeSnapshot(snapshot);</span> |
| <span class="source-line-no">1788</span><span id="line-1788"> return builder.build();</span> |
| <span class="source-line-no">1789</span><span id="line-1789"> }</span> |
| <span class="source-line-no">1790</span><span id="line-1790"> } catch (ForeignException e) {</span> |
| <span class="source-line-no">1791</span><span id="line-1791"> throw new ServiceException(e.getCause());</span> |
| <span class="source-line-no">1792</span><span id="line-1792"> } catch (IOException e) {</span> |
| <span class="source-line-no">1793</span><span id="line-1793"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1794</span><span id="line-1794"> }</span> |
| <span class="source-line-no">1795</span><span id="line-1795"> }</span> |
| <span class="source-line-no">1796</span><span id="line-1796"></span> |
| <span class="source-line-no">1797</span><span id="line-1797"> @Override</span> |
| <span class="source-line-no">1798</span><span id="line-1798"> public StopMasterResponse stopMaster(RpcController controller, StopMasterRequest request)</span> |
| <span class="source-line-no">1799</span><span id="line-1799"> throws ServiceException {</span> |
| <span class="source-line-no">1800</span><span id="line-1800"> LOG.info(server.getClientIdAuditPrefix() + " stop");</span> |
| <span class="source-line-no">1801</span><span id="line-1801"> try {</span> |
| <span class="source-line-no">1802</span><span id="line-1802"> server.stopMaster();</span> |
| <span class="source-line-no">1803</span><span id="line-1803"> } catch (IOException e) {</span> |
| <span class="source-line-no">1804</span><span id="line-1804"> LOG.error("Exception occurred while stopping master", e);</span> |
| <span class="source-line-no">1805</span><span id="line-1805"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1806</span><span id="line-1806"> }</span> |
| <span class="source-line-no">1807</span><span id="line-1807"> return StopMasterResponse.newBuilder().build();</span> |
| <span class="source-line-no">1808</span><span id="line-1808"> }</span> |
| <span class="source-line-no">1809</span><span id="line-1809"></span> |
| <span class="source-line-no">1810</span><span id="line-1810"> @Override</span> |
| <span class="source-line-no">1811</span><span id="line-1811"> public IsInMaintenanceModeResponse isMasterInMaintenanceMode(final RpcController controller,</span> |
| <span class="source-line-no">1812</span><span id="line-1812"> final IsInMaintenanceModeRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1813</span><span id="line-1813"> IsInMaintenanceModeResponse.Builder response = IsInMaintenanceModeResponse.newBuilder();</span> |
| <span class="source-line-no">1814</span><span id="line-1814"> response.setInMaintenanceMode(server.isInMaintenanceMode());</span> |
| <span class="source-line-no">1815</span><span id="line-1815"> return response.build();</span> |
| <span class="source-line-no">1816</span><span id="line-1816"> }</span> |
| <span class="source-line-no">1817</span><span id="line-1817"></span> |
| <span class="source-line-no">1818</span><span id="line-1818"> @Override</span> |
| <span class="source-line-no">1819</span><span id="line-1819"> public UnassignRegionResponse unassignRegion(RpcController controller, UnassignRegionRequest req)</span> |
| <span class="source-line-no">1820</span><span id="line-1820"> throws ServiceException {</span> |
| <span class="source-line-no">1821</span><span id="line-1821"> try {</span> |
| <span class="source-line-no">1822</span><span id="line-1822"> final byte[] regionName = req.getRegion().getValue().toByteArray();</span> |
| <span class="source-line-no">1823</span><span id="line-1823"> RegionSpecifierType type = req.getRegion().getType();</span> |
| <span class="source-line-no">1824</span><span id="line-1824"> UnassignRegionResponse urr = UnassignRegionResponse.newBuilder().build();</span> |
| <span class="source-line-no">1825</span><span id="line-1825"></span> |
| <span class="source-line-no">1826</span><span id="line-1826"> server.checkInitialized();</span> |
| <span class="source-line-no">1827</span><span id="line-1827"> if (type != RegionSpecifierType.REGION_NAME) {</span> |
| <span class="source-line-no">1828</span><span id="line-1828"> LOG.warn("unassignRegion specifier type: expected: " + RegionSpecifierType.REGION_NAME</span> |
| <span class="source-line-no">1829</span><span id="line-1829"> + " actual: " + type);</span> |
| <span class="source-line-no">1830</span><span id="line-1830"> }</span> |
| <span class="source-line-no">1831</span><span id="line-1831"> RegionStateNode rsn =</span> |
| <span class="source-line-no">1832</span><span id="line-1832"> server.getAssignmentManager().getRegionStates().getRegionStateNodeFromName(regionName);</span> |
| <span class="source-line-no">1833</span><span id="line-1833"> if (rsn == null) {</span> |
| <span class="source-line-no">1834</span><span id="line-1834"> throw new UnknownRegionException(Bytes.toString(regionName));</span> |
| <span class="source-line-no">1835</span><span id="line-1835"> }</span> |
| <span class="source-line-no">1836</span><span id="line-1836"></span> |
| <span class="source-line-no">1837</span><span id="line-1837"> RegionInfo hri = rsn.getRegionInfo();</span> |
| <span class="source-line-no">1838</span><span id="line-1838"> if (server.cpHost != null) {</span> |
| <span class="source-line-no">1839</span><span id="line-1839"> server.cpHost.preUnassign(hri);</span> |
| <span class="source-line-no">1840</span><span id="line-1840"> }</span> |
| <span class="source-line-no">1841</span><span id="line-1841"> LOG.debug(server.getClientIdAuditPrefix() + " unassign " + hri.getRegionNameAsString()</span> |
| <span class="source-line-no">1842</span><span id="line-1842"> + " in current location if it is online");</span> |
| <span class="source-line-no">1843</span><span id="line-1843"> server.getAssignmentManager().unassign(hri);</span> |
| <span class="source-line-no">1844</span><span id="line-1844"> if (server.cpHost != null) {</span> |
| <span class="source-line-no">1845</span><span id="line-1845"> server.cpHost.postUnassign(hri);</span> |
| <span class="source-line-no">1846</span><span id="line-1846"> }</span> |
| <span class="source-line-no">1847</span><span id="line-1847"></span> |
| <span class="source-line-no">1848</span><span id="line-1848"> return urr;</span> |
| <span class="source-line-no">1849</span><span id="line-1849"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">1850</span><span id="line-1850"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">1851</span><span id="line-1851"> }</span> |
| <span class="source-line-no">1852</span><span id="line-1852"> }</span> |
| <span class="source-line-no">1853</span><span id="line-1853"></span> |
| <span class="source-line-no">1854</span><span id="line-1854"> @Override</span> |
| <span class="source-line-no">1855</span><span id="line-1855"> public ReportRegionStateTransitionResponse reportRegionStateTransition(RpcController c,</span> |
| <span class="source-line-no">1856</span><span id="line-1856"> ReportRegionStateTransitionRequest req) throws ServiceException {</span> |
| <span class="source-line-no">1857</span><span id="line-1857"> try {</span> |
| <span class="source-line-no">1858</span><span id="line-1858"> server.checkServiceStarted();</span> |
| <span class="source-line-no">1859</span><span id="line-1859"> for (RegionServerStatusProtos.RegionStateTransition transition : req.getTransitionList()) {</span> |
| <span class="source-line-no">1860</span><span id="line-1860"> long procId =</span> |
| <span class="source-line-no">1861</span><span id="line-1861"> transition.getProcIdCount() > 0 ? transition.getProcId(0) : Procedure.NO_PROC_ID;</span> |
| <span class="source-line-no">1862</span><span id="line-1862"> // -1 is less than any possible MasterActiveCode</span> |
| <span class="source-line-no">1863</span><span id="line-1863"> long initiatingMasterActiveTime = transition.hasInitiatingMasterActiveTime()</span> |
| <span class="source-line-no">1864</span><span id="line-1864"> ? transition.getInitiatingMasterActiveTime()</span> |
| <span class="source-line-no">1865</span><span id="line-1865"> : -1;</span> |
| <span class="source-line-no">1866</span><span id="line-1866"> throwOnOldMaster(procId, initiatingMasterActiveTime);</span> |
| <span class="source-line-no">1867</span><span id="line-1867"> }</span> |
| <span class="source-line-no">1868</span><span id="line-1868"> return server.getAssignmentManager().reportRegionStateTransition(req);</span> |
| <span class="source-line-no">1869</span><span id="line-1869"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">1870</span><span id="line-1870"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">1871</span><span id="line-1871"> }</span> |
| <span class="source-line-no">1872</span><span id="line-1872"> }</span> |
| <span class="source-line-no">1873</span><span id="line-1873"></span> |
| <span class="source-line-no">1874</span><span id="line-1874"> @Override</span> |
| <span class="source-line-no">1875</span><span id="line-1875"> public SetQuotaResponse setQuota(RpcController c, SetQuotaRequest req) throws ServiceException {</span> |
| <span class="source-line-no">1876</span><span id="line-1876"> try {</span> |
| <span class="source-line-no">1877</span><span id="line-1877"> server.checkInitialized();</span> |
| <span class="source-line-no">1878</span><span id="line-1878"> SetQuotaResponse response = server.getMasterQuotaManager().setQuota(req);</span> |
| <span class="source-line-no">1879</span><span id="line-1879"> server.reloadRegionServerQuotas();</span> |
| <span class="source-line-no">1880</span><span id="line-1880"></span> |
| <span class="source-line-no">1881</span><span id="line-1881"> return response;</span> |
| <span class="source-line-no">1882</span><span id="line-1882"> } catch (Exception e) {</span> |
| <span class="source-line-no">1883</span><span id="line-1883"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1884</span><span id="line-1884"> }</span> |
| <span class="source-line-no">1885</span><span id="line-1885"> }</span> |
| <span class="source-line-no">1886</span><span id="line-1886"></span> |
| <span class="source-line-no">1887</span><span id="line-1887"> @Override</span> |
| <span class="source-line-no">1888</span><span id="line-1888"> public MajorCompactionTimestampResponse getLastMajorCompactionTimestamp(RpcController controller,</span> |
| <span class="source-line-no">1889</span><span id="line-1889"> MajorCompactionTimestampRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1890</span><span id="line-1890"> MajorCompactionTimestampResponse.Builder response =</span> |
| <span class="source-line-no">1891</span><span id="line-1891"> MajorCompactionTimestampResponse.newBuilder();</span> |
| <span class="source-line-no">1892</span><span id="line-1892"> try {</span> |
| <span class="source-line-no">1893</span><span id="line-1893"> server.checkInitialized();</span> |
| <span class="source-line-no">1894</span><span id="line-1894"> response.setCompactionTimestamp(</span> |
| <span class="source-line-no">1895</span><span id="line-1895"> server.getLastMajorCompactionTimestamp(ProtobufUtil.toTableName(request.getTableName())));</span> |
| <span class="source-line-no">1896</span><span id="line-1896"> } catch (IOException e) {</span> |
| <span class="source-line-no">1897</span><span id="line-1897"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1898</span><span id="line-1898"> }</span> |
| <span class="source-line-no">1899</span><span id="line-1899"> return response.build();</span> |
| <span class="source-line-no">1900</span><span id="line-1900"> }</span> |
| <span class="source-line-no">1901</span><span id="line-1901"></span> |
| <span class="source-line-no">1902</span><span id="line-1902"> @Override</span> |
| <span class="source-line-no">1903</span><span id="line-1903"> public MajorCompactionTimestampResponse getLastMajorCompactionTimestampForRegion(</span> |
| <span class="source-line-no">1904</span><span id="line-1904"> RpcController controller, MajorCompactionTimestampForRegionRequest request)</span> |
| <span class="source-line-no">1905</span><span id="line-1905"> throws ServiceException {</span> |
| <span class="source-line-no">1906</span><span id="line-1906"> MajorCompactionTimestampResponse.Builder response =</span> |
| <span class="source-line-no">1907</span><span id="line-1907"> MajorCompactionTimestampResponse.newBuilder();</span> |
| <span class="source-line-no">1908</span><span id="line-1908"> try {</span> |
| <span class="source-line-no">1909</span><span id="line-1909"> server.checkInitialized();</span> |
| <span class="source-line-no">1910</span><span id="line-1910"> response.setCompactionTimestamp(server</span> |
| <span class="source-line-no">1911</span><span id="line-1911"> .getLastMajorCompactionTimestampForRegion(request.getRegion().getValue().toByteArray()));</span> |
| <span class="source-line-no">1912</span><span id="line-1912"> } catch (IOException e) {</span> |
| <span class="source-line-no">1913</span><span id="line-1913"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1914</span><span id="line-1914"> }</span> |
| <span class="source-line-no">1915</span><span id="line-1915"> return response.build();</span> |
| <span class="source-line-no">1916</span><span id="line-1916"> }</span> |
| <span class="source-line-no">1917</span><span id="line-1917"></span> |
| <span class="source-line-no">1918</span><span id="line-1918"> @Override</span> |
| <span class="source-line-no">1919</span><span id="line-1919"> public IsBalancerEnabledResponse isBalancerEnabled(RpcController controller,</span> |
| <span class="source-line-no">1920</span><span id="line-1920"> IsBalancerEnabledRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1921</span><span id="line-1921"> IsBalancerEnabledResponse.Builder response = IsBalancerEnabledResponse.newBuilder();</span> |
| <span class="source-line-no">1922</span><span id="line-1922"> response.setEnabled(server.isBalancerOn());</span> |
| <span class="source-line-no">1923</span><span id="line-1923"> return response.build();</span> |
| <span class="source-line-no">1924</span><span id="line-1924"> }</span> |
| <span class="source-line-no">1925</span><span id="line-1925"></span> |
| <span class="source-line-no">1926</span><span id="line-1926"> @Override</span> |
| <span class="source-line-no">1927</span><span id="line-1927"> public SetSplitOrMergeEnabledResponse setSplitOrMergeEnabled(RpcController controller,</span> |
| <span class="source-line-no">1928</span><span id="line-1928"> SetSplitOrMergeEnabledRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1929</span><span id="line-1929"> SetSplitOrMergeEnabledResponse.Builder response = SetSplitOrMergeEnabledResponse.newBuilder();</span> |
| <span class="source-line-no">1930</span><span id="line-1930"> try {</span> |
| <span class="source-line-no">1931</span><span id="line-1931"> server.checkInitialized();</span> |
| <span class="source-line-no">1932</span><span id="line-1932"> boolean newValue = request.getEnabled();</span> |
| <span class="source-line-no">1933</span><span id="line-1933"> for (MasterProtos.MasterSwitchType masterSwitchType : request.getSwitchTypesList()) {</span> |
| <span class="source-line-no">1934</span><span id="line-1934"> MasterSwitchType switchType = convert(masterSwitchType);</span> |
| <span class="source-line-no">1935</span><span id="line-1935"> boolean oldValue = server.isSplitOrMergeEnabled(switchType);</span> |
| <span class="source-line-no">1936</span><span id="line-1936"> response.addPrevValue(oldValue);</span> |
| <span class="source-line-no">1937</span><span id="line-1937"> if (server.cpHost != null) {</span> |
| <span class="source-line-no">1938</span><span id="line-1938"> server.cpHost.preSetSplitOrMergeEnabled(newValue, switchType);</span> |
| <span class="source-line-no">1939</span><span id="line-1939"> }</span> |
| <span class="source-line-no">1940</span><span id="line-1940"> server.getSplitOrMergeStateStore().setSplitOrMergeEnabled(newValue, switchType);</span> |
| <span class="source-line-no">1941</span><span id="line-1941"> if (server.cpHost != null) {</span> |
| <span class="source-line-no">1942</span><span id="line-1942"> server.cpHost.postSetSplitOrMergeEnabled(newValue, switchType);</span> |
| <span class="source-line-no">1943</span><span id="line-1943"> }</span> |
| <span class="source-line-no">1944</span><span id="line-1944"> }</span> |
| <span class="source-line-no">1945</span><span id="line-1945"> } catch (IOException e) {</span> |
| <span class="source-line-no">1946</span><span id="line-1946"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1947</span><span id="line-1947"> }</span> |
| <span class="source-line-no">1948</span><span id="line-1948"> return response.build();</span> |
| <span class="source-line-no">1949</span><span id="line-1949"> }</span> |
| <span class="source-line-no">1950</span><span id="line-1950"></span> |
| <span class="source-line-no">1951</span><span id="line-1951"> @Override</span> |
| <span class="source-line-no">1952</span><span id="line-1952"> public IsSplitOrMergeEnabledResponse isSplitOrMergeEnabled(RpcController controller,</span> |
| <span class="source-line-no">1953</span><span id="line-1953"> IsSplitOrMergeEnabledRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1954</span><span id="line-1954"> IsSplitOrMergeEnabledResponse.Builder response = IsSplitOrMergeEnabledResponse.newBuilder();</span> |
| <span class="source-line-no">1955</span><span id="line-1955"> response.setEnabled(server.isSplitOrMergeEnabled(convert(request.getSwitchType())));</span> |
| <span class="source-line-no">1956</span><span id="line-1956"> return response.build();</span> |
| <span class="source-line-no">1957</span><span id="line-1957"> }</span> |
| <span class="source-line-no">1958</span><span id="line-1958"></span> |
| <span class="source-line-no">1959</span><span id="line-1959"> @Override</span> |
| <span class="source-line-no">1960</span><span id="line-1960"> public NormalizeResponse normalize(RpcController controller, NormalizeRequest request)</span> |
| <span class="source-line-no">1961</span><span id="line-1961"> throws ServiceException {</span> |
| <span class="source-line-no">1962</span><span id="line-1962"> rpcPreCheck("normalize");</span> |
| <span class="source-line-no">1963</span><span id="line-1963"> try {</span> |
| <span class="source-line-no">1964</span><span id="line-1964"> final NormalizeTableFilterParams ntfp = new NormalizeTableFilterParams.Builder()</span> |
| <span class="source-line-no">1965</span><span id="line-1965"> .tableNames(ProtobufUtil.toTableNameList(request.getTableNamesList()))</span> |
| <span class="source-line-no">1966</span><span id="line-1966"> .regex(request.hasRegex() ? request.getRegex() : null)</span> |
| <span class="source-line-no">1967</span><span id="line-1967"> .namespace(request.hasNamespace() ? request.getNamespace() : null).build();</span> |
| <span class="source-line-no">1968</span><span id="line-1968"> return NormalizeResponse.newBuilder()</span> |
| <span class="source-line-no">1969</span><span id="line-1969"> // all API requests are considered priority requests.</span> |
| <span class="source-line-no">1970</span><span id="line-1970"> .setNormalizerRan(server.normalizeRegions(ntfp, true)).build();</span> |
| <span class="source-line-no">1971</span><span id="line-1971"> } catch (IOException ex) {</span> |
| <span class="source-line-no">1972</span><span id="line-1972"> throw new ServiceException(ex);</span> |
| <span class="source-line-no">1973</span><span id="line-1973"> }</span> |
| <span class="source-line-no">1974</span><span id="line-1974"> }</span> |
| <span class="source-line-no">1975</span><span id="line-1975"></span> |
| <span class="source-line-no">1976</span><span id="line-1976"> @Override</span> |
| <span class="source-line-no">1977</span><span id="line-1977"> public SetNormalizerRunningResponse setNormalizerRunning(RpcController controller,</span> |
| <span class="source-line-no">1978</span><span id="line-1978"> SetNormalizerRunningRequest request) throws ServiceException {</span> |
| <span class="source-line-no">1979</span><span id="line-1979"> rpcPreCheck("setNormalizerRunning");</span> |
| <span class="source-line-no">1980</span><span id="line-1980"></span> |
| <span class="source-line-no">1981</span><span id="line-1981"> // Sets normalizer on/off flag in ZK.</span> |
| <span class="source-line-no">1982</span><span id="line-1982"> // TODO: this method is totally broken in terms of atomicity of actions and values read.</span> |
| <span class="source-line-no">1983</span><span id="line-1983"> // 1. The contract has this RPC returning the previous value. There isn't a ZKUtil method</span> |
| <span class="source-line-no">1984</span><span id="line-1984"> // that lets us retrieve the previous value as part of setting a new value, so we simply</span> |
| <span class="source-line-no">1985</span><span id="line-1985"> // perform a read before issuing the update. Thus we have a data race opportunity, between</span> |
| <span class="source-line-no">1986</span><span id="line-1986"> // when the `prevValue` is read and whatever is actually overwritten.</span> |
| <span class="source-line-no">1987</span><span id="line-1987"> // 2. Down in `setNormalizerOn`, the call to `createAndWatch` inside of the catch clause can</span> |
| <span class="source-line-no">1988</span><span id="line-1988"> // itself fail in the event that the znode already exists. Thus, another data race, between</span> |
| <span class="source-line-no">1989</span><span id="line-1989"> // when the initial `setData` call is notified of the absence of the target znode and the</span> |
| <span class="source-line-no">1990</span><span id="line-1990"> // subsequent `createAndWatch`, with another client creating said node.</span> |
| <span class="source-line-no">1991</span><span id="line-1991"> // That said, there's supposed to be only one active master and thus there's supposed to be</span> |
| <span class="source-line-no">1992</span><span id="line-1992"> // only one process with the authority to modify the value.</span> |
| <span class="source-line-no">1993</span><span id="line-1993"> final boolean prevValue = server.getRegionNormalizerManager().isNormalizerOn();</span> |
| <span class="source-line-no">1994</span><span id="line-1994"> final boolean newValue = request.getOn();</span> |
| <span class="source-line-no">1995</span><span id="line-1995"> try {</span> |
| <span class="source-line-no">1996</span><span id="line-1996"> server.getRegionNormalizerManager().setNormalizerOn(newValue);</span> |
| <span class="source-line-no">1997</span><span id="line-1997"> } catch (IOException e) {</span> |
| <span class="source-line-no">1998</span><span id="line-1998"> throw new ServiceException(e);</span> |
| <span class="source-line-no">1999</span><span id="line-1999"> }</span> |
| <span class="source-line-no">2000</span><span id="line-2000"> LOG.info("{} set normalizerSwitch={}", server.getClientIdAuditPrefix(), newValue);</span> |
| <span class="source-line-no">2001</span><span id="line-2001"> return SetNormalizerRunningResponse.newBuilder().setPrevNormalizerValue(prevValue).build();</span> |
| <span class="source-line-no">2002</span><span id="line-2002"> }</span> |
| <span class="source-line-no">2003</span><span id="line-2003"></span> |
| <span class="source-line-no">2004</span><span id="line-2004"> @Override</span> |
| <span class="source-line-no">2005</span><span id="line-2005"> public IsNormalizerEnabledResponse isNormalizerEnabled(RpcController controller,</span> |
| <span class="source-line-no">2006</span><span id="line-2006"> IsNormalizerEnabledRequest request) {</span> |
| <span class="source-line-no">2007</span><span id="line-2007"> IsNormalizerEnabledResponse.Builder response = IsNormalizerEnabledResponse.newBuilder();</span> |
| <span class="source-line-no">2008</span><span id="line-2008"> response.setEnabled(server.isNormalizerOn());</span> |
| <span class="source-line-no">2009</span><span id="line-2009"> return response.build();</span> |
| <span class="source-line-no">2010</span><span id="line-2010"> }</span> |
| <span class="source-line-no">2011</span><span id="line-2011"></span> |
| <span class="source-line-no">2012</span><span id="line-2012"> /**</span> |
| <span class="source-line-no">2013</span><span id="line-2013"> * Returns the security capabilities in effect on the cluster</span> |
| <span class="source-line-no">2014</span><span id="line-2014"> */</span> |
| <span class="source-line-no">2015</span><span id="line-2015"> @Override</span> |
| <span class="source-line-no">2016</span><span id="line-2016"> public SecurityCapabilitiesResponse getSecurityCapabilities(RpcController controller,</span> |
| <span class="source-line-no">2017</span><span id="line-2017"> SecurityCapabilitiesRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2018</span><span id="line-2018"> SecurityCapabilitiesResponse.Builder response = SecurityCapabilitiesResponse.newBuilder();</span> |
| <span class="source-line-no">2019</span><span id="line-2019"> try {</span> |
| <span class="source-line-no">2020</span><span id="line-2020"> server.checkInitialized();</span> |
| <span class="source-line-no">2021</span><span id="line-2021"> Set<SecurityCapabilitiesResponse.Capability> capabilities = new HashSet<>();</span> |
| <span class="source-line-no">2022</span><span id="line-2022"> // Authentication</span> |
| <span class="source-line-no">2023</span><span id="line-2023"> if (User.isHBaseSecurityEnabled(server.getConfiguration())) {</span> |
| <span class="source-line-no">2024</span><span id="line-2024"> capabilities.add(SecurityCapabilitiesResponse.Capability.SECURE_AUTHENTICATION);</span> |
| <span class="source-line-no">2025</span><span id="line-2025"> } else {</span> |
| <span class="source-line-no">2026</span><span id="line-2026"> capabilities.add(SecurityCapabilitiesResponse.Capability.SIMPLE_AUTHENTICATION);</span> |
| <span class="source-line-no">2027</span><span id="line-2027"> }</span> |
| <span class="source-line-no">2028</span><span id="line-2028"> // A coprocessor that implements AccessControlService can provide AUTHORIZATION and</span> |
| <span class="source-line-no">2029</span><span id="line-2029"> // CELL_AUTHORIZATION</span> |
| <span class="source-line-no">2030</span><span id="line-2030"> if (server.cpHost != null && hasAccessControlServiceCoprocessor(server.cpHost)) {</span> |
| <span class="source-line-no">2031</span><span id="line-2031"> if (AccessChecker.isAuthorizationSupported(server.getConfiguration())) {</span> |
| <span class="source-line-no">2032</span><span id="line-2032"> capabilities.add(SecurityCapabilitiesResponse.Capability.AUTHORIZATION);</span> |
| <span class="source-line-no">2033</span><span id="line-2033"> }</span> |
| <span class="source-line-no">2034</span><span id="line-2034"> if (AccessController.isCellAuthorizationSupported(server.getConfiguration())) {</span> |
| <span class="source-line-no">2035</span><span id="line-2035"> capabilities.add(SecurityCapabilitiesResponse.Capability.CELL_AUTHORIZATION);</span> |
| <span class="source-line-no">2036</span><span id="line-2036"> }</span> |
| <span class="source-line-no">2037</span><span id="line-2037"> }</span> |
| <span class="source-line-no">2038</span><span id="line-2038"> // A coprocessor that implements VisibilityLabelsService can provide CELL_VISIBILITY.</span> |
| <span class="source-line-no">2039</span><span id="line-2039"> if (server.cpHost != null && hasVisibilityLabelsServiceCoprocessor(server.cpHost)) {</span> |
| <span class="source-line-no">2040</span><span id="line-2040"> if (VisibilityController.isCellAuthorizationSupported(server.getConfiguration())) {</span> |
| <span class="source-line-no">2041</span><span id="line-2041"> capabilities.add(SecurityCapabilitiesResponse.Capability.CELL_VISIBILITY);</span> |
| <span class="source-line-no">2042</span><span id="line-2042"> }</span> |
| <span class="source-line-no">2043</span><span id="line-2043"> }</span> |
| <span class="source-line-no">2044</span><span id="line-2044"> response.addAllCapabilities(capabilities);</span> |
| <span class="source-line-no">2045</span><span id="line-2045"> } catch (IOException e) {</span> |
| <span class="source-line-no">2046</span><span id="line-2046"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2047</span><span id="line-2047"> }</span> |
| <span class="source-line-no">2048</span><span id="line-2048"> return response.build();</span> |
| <span class="source-line-no">2049</span><span id="line-2049"> }</span> |
| <span class="source-line-no">2050</span><span id="line-2050"></span> |
| <span class="source-line-no">2051</span><span id="line-2051"> /**</span> |
| <span class="source-line-no">2052</span><span id="line-2052"> * Determines if there is a MasterCoprocessor deployed which implements</span> |
| <span class="source-line-no">2053</span><span id="line-2053"> * {@link AccessControlService.Interface}.</span> |
| <span class="source-line-no">2054</span><span id="line-2054"> */</span> |
| <span class="source-line-no">2055</span><span id="line-2055"> boolean hasAccessControlServiceCoprocessor(MasterCoprocessorHost cpHost) {</span> |
| <span class="source-line-no">2056</span><span id="line-2056"> return checkCoprocessorWithService(cpHost.findCoprocessors(MasterCoprocessor.class),</span> |
| <span class="source-line-no">2057</span><span id="line-2057"> AccessControlService.Interface.class);</span> |
| <span class="source-line-no">2058</span><span id="line-2058"> }</span> |
| <span class="source-line-no">2059</span><span id="line-2059"></span> |
| <span class="source-line-no">2060</span><span id="line-2060"> /**</span> |
| <span class="source-line-no">2061</span><span id="line-2061"> * Determines if there is a MasterCoprocessor deployed which implements</span> |
| <span class="source-line-no">2062</span><span id="line-2062"> * {@link VisibilityLabelsService.Interface}.</span> |
| <span class="source-line-no">2063</span><span id="line-2063"> */</span> |
| <span class="source-line-no">2064</span><span id="line-2064"> boolean hasVisibilityLabelsServiceCoprocessor(MasterCoprocessorHost cpHost) {</span> |
| <span class="source-line-no">2065</span><span id="line-2065"> return checkCoprocessorWithService(cpHost.findCoprocessors(MasterCoprocessor.class),</span> |
| <span class="source-line-no">2066</span><span id="line-2066"> VisibilityLabelsService.Interface.class);</span> |
| <span class="source-line-no">2067</span><span id="line-2067"> }</span> |
| <span class="source-line-no">2068</span><span id="line-2068"></span> |
| <span class="source-line-no">2069</span><span id="line-2069"> /**</span> |
| <span class="source-line-no">2070</span><span id="line-2070"> * Determines if there is a coprocessor implementation in the provided argument which extends or</span> |
| <span class="source-line-no">2071</span><span id="line-2071"> * implements the provided {@code service}.</span> |
| <span class="source-line-no">2072</span><span id="line-2072"> */</span> |
| <span class="source-line-no">2073</span><span id="line-2073"> boolean checkCoprocessorWithService(List<MasterCoprocessor> coprocessorsToCheck,</span> |
| <span class="source-line-no">2074</span><span id="line-2074"> Class<?> service) {</span> |
| <span class="source-line-no">2075</span><span id="line-2075"> if (coprocessorsToCheck == null || coprocessorsToCheck.isEmpty()) {</span> |
| <span class="source-line-no">2076</span><span id="line-2076"> return false;</span> |
| <span class="source-line-no">2077</span><span id="line-2077"> }</span> |
| <span class="source-line-no">2078</span><span id="line-2078"> for (MasterCoprocessor cp : coprocessorsToCheck) {</span> |
| <span class="source-line-no">2079</span><span id="line-2079"> if (service.isAssignableFrom(cp.getClass())) {</span> |
| <span class="source-line-no">2080</span><span id="line-2080"> return true;</span> |
| <span class="source-line-no">2081</span><span id="line-2081"> }</span> |
| <span class="source-line-no">2082</span><span id="line-2082"> }</span> |
| <span class="source-line-no">2083</span><span id="line-2083"> return false;</span> |
| <span class="source-line-no">2084</span><span id="line-2084"> }</span> |
| <span class="source-line-no">2085</span><span id="line-2085"></span> |
| <span class="source-line-no">2086</span><span id="line-2086"> private MasterSwitchType convert(MasterProtos.MasterSwitchType switchType) {</span> |
| <span class="source-line-no">2087</span><span id="line-2087"> switch (switchType) {</span> |
| <span class="source-line-no">2088</span><span id="line-2088"> case SPLIT:</span> |
| <span class="source-line-no">2089</span><span id="line-2089"> return MasterSwitchType.SPLIT;</span> |
| <span class="source-line-no">2090</span><span id="line-2090"> case MERGE:</span> |
| <span class="source-line-no">2091</span><span id="line-2091"> return MasterSwitchType.MERGE;</span> |
| <span class="source-line-no">2092</span><span id="line-2092"> default:</span> |
| <span class="source-line-no">2093</span><span id="line-2093"> break;</span> |
| <span class="source-line-no">2094</span><span id="line-2094"> }</span> |
| <span class="source-line-no">2095</span><span id="line-2095"> return null;</span> |
| <span class="source-line-no">2096</span><span id="line-2096"> }</span> |
| <span class="source-line-no">2097</span><span id="line-2097"></span> |
| <span class="source-line-no">2098</span><span id="line-2098"> @Override</span> |
| <span class="source-line-no">2099</span><span id="line-2099"> public AddReplicationPeerResponse addReplicationPeer(RpcController controller,</span> |
| <span class="source-line-no">2100</span><span id="line-2100"> AddReplicationPeerRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2101</span><span id="line-2101"> try {</span> |
| <span class="source-line-no">2102</span><span id="line-2102"> long procId = server.addReplicationPeer(request.getPeerId(),</span> |
| <span class="source-line-no">2103</span><span id="line-2103"> ReplicationPeerConfigUtil.convert(request.getPeerConfig()),</span> |
| <span class="source-line-no">2104</span><span id="line-2104"> request.getPeerState().getState().equals(ReplicationState.State.ENABLED));</span> |
| <span class="source-line-no">2105</span><span id="line-2105"> return AddReplicationPeerResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">2106</span><span id="line-2106"> } catch (ReplicationException | IOException e) {</span> |
| <span class="source-line-no">2107</span><span id="line-2107"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2108</span><span id="line-2108"> }</span> |
| <span class="source-line-no">2109</span><span id="line-2109"> }</span> |
| <span class="source-line-no">2110</span><span id="line-2110"></span> |
| <span class="source-line-no">2111</span><span id="line-2111"> @Override</span> |
| <span class="source-line-no">2112</span><span id="line-2112"> public RemoveReplicationPeerResponse removeReplicationPeer(RpcController controller,</span> |
| <span class="source-line-no">2113</span><span id="line-2113"> RemoveReplicationPeerRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2114</span><span id="line-2114"> try {</span> |
| <span class="source-line-no">2115</span><span id="line-2115"> long procId = server.removeReplicationPeer(request.getPeerId());</span> |
| <span class="source-line-no">2116</span><span id="line-2116"> return RemoveReplicationPeerResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">2117</span><span id="line-2117"> } catch (ReplicationException | IOException e) {</span> |
| <span class="source-line-no">2118</span><span id="line-2118"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2119</span><span id="line-2119"> }</span> |
| <span class="source-line-no">2120</span><span id="line-2120"> }</span> |
| <span class="source-line-no">2121</span><span id="line-2121"></span> |
| <span class="source-line-no">2122</span><span id="line-2122"> @Override</span> |
| <span class="source-line-no">2123</span><span id="line-2123"> public EnableReplicationPeerResponse enableReplicationPeer(RpcController controller,</span> |
| <span class="source-line-no">2124</span><span id="line-2124"> EnableReplicationPeerRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2125</span><span id="line-2125"> try {</span> |
| <span class="source-line-no">2126</span><span id="line-2126"> long procId = server.enableReplicationPeer(request.getPeerId());</span> |
| <span class="source-line-no">2127</span><span id="line-2127"> return EnableReplicationPeerResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">2128</span><span id="line-2128"> } catch (ReplicationException | IOException e) {</span> |
| <span class="source-line-no">2129</span><span id="line-2129"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2130</span><span id="line-2130"> }</span> |
| <span class="source-line-no">2131</span><span id="line-2131"> }</span> |
| <span class="source-line-no">2132</span><span id="line-2132"></span> |
| <span class="source-line-no">2133</span><span id="line-2133"> @Override</span> |
| <span class="source-line-no">2134</span><span id="line-2134"> public DisableReplicationPeerResponse disableReplicationPeer(RpcController controller,</span> |
| <span class="source-line-no">2135</span><span id="line-2135"> DisableReplicationPeerRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2136</span><span id="line-2136"> try {</span> |
| <span class="source-line-no">2137</span><span id="line-2137"> long procId = server.disableReplicationPeer(request.getPeerId());</span> |
| <span class="source-line-no">2138</span><span id="line-2138"> return DisableReplicationPeerResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">2139</span><span id="line-2139"> } catch (ReplicationException | IOException e) {</span> |
| <span class="source-line-no">2140</span><span id="line-2140"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2141</span><span id="line-2141"> }</span> |
| <span class="source-line-no">2142</span><span id="line-2142"> }</span> |
| <span class="source-line-no">2143</span><span id="line-2143"></span> |
| <span class="source-line-no">2144</span><span id="line-2144"> @Override</span> |
| <span class="source-line-no">2145</span><span id="line-2145"> public GetReplicationPeerConfigResponse getReplicationPeerConfig(RpcController controller,</span> |
| <span class="source-line-no">2146</span><span id="line-2146"> GetReplicationPeerConfigRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2147</span><span id="line-2147"> GetReplicationPeerConfigResponse.Builder response =</span> |
| <span class="source-line-no">2148</span><span id="line-2148"> GetReplicationPeerConfigResponse.newBuilder();</span> |
| <span class="source-line-no">2149</span><span id="line-2149"> try {</span> |
| <span class="source-line-no">2150</span><span id="line-2150"> String peerId = request.getPeerId();</span> |
| <span class="source-line-no">2151</span><span id="line-2151"> ReplicationPeerConfig peerConfig = server.getReplicationPeerConfig(peerId);</span> |
| <span class="source-line-no">2152</span><span id="line-2152"> response.setPeerId(peerId);</span> |
| <span class="source-line-no">2153</span><span id="line-2153"> response.setPeerConfig(ReplicationPeerConfigUtil.convert(peerConfig));</span> |
| <span class="source-line-no">2154</span><span id="line-2154"> } catch (ReplicationException | IOException e) {</span> |
| <span class="source-line-no">2155</span><span id="line-2155"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2156</span><span id="line-2156"> }</span> |
| <span class="source-line-no">2157</span><span id="line-2157"> return response.build();</span> |
| <span class="source-line-no">2158</span><span id="line-2158"> }</span> |
| <span class="source-line-no">2159</span><span id="line-2159"></span> |
| <span class="source-line-no">2160</span><span id="line-2160"> @Override</span> |
| <span class="source-line-no">2161</span><span id="line-2161"> public UpdateReplicationPeerConfigResponse updateReplicationPeerConfig(RpcController controller,</span> |
| <span class="source-line-no">2162</span><span id="line-2162"> UpdateReplicationPeerConfigRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2163</span><span id="line-2163"> try {</span> |
| <span class="source-line-no">2164</span><span id="line-2164"> long procId = server.updateReplicationPeerConfig(request.getPeerId(),</span> |
| <span class="source-line-no">2165</span><span id="line-2165"> ReplicationPeerConfigUtil.convert(request.getPeerConfig()));</span> |
| <span class="source-line-no">2166</span><span id="line-2166"> return UpdateReplicationPeerConfigResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">2167</span><span id="line-2167"> } catch (ReplicationException | IOException e) {</span> |
| <span class="source-line-no">2168</span><span id="line-2168"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2169</span><span id="line-2169"> }</span> |
| <span class="source-line-no">2170</span><span id="line-2170"> }</span> |
| <span class="source-line-no">2171</span><span id="line-2171"></span> |
| <span class="source-line-no">2172</span><span id="line-2172"> @Override</span> |
| <span class="source-line-no">2173</span><span id="line-2173"> public TransitReplicationPeerSyncReplicationStateResponse</span> |
| <span class="source-line-no">2174</span><span id="line-2174"> transitReplicationPeerSyncReplicationState(RpcController controller,</span> |
| <span class="source-line-no">2175</span><span id="line-2175"> TransitReplicationPeerSyncReplicationStateRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2176</span><span id="line-2176"> try {</span> |
| <span class="source-line-no">2177</span><span id="line-2177"> long procId = server.transitReplicationPeerSyncReplicationState(request.getPeerId(),</span> |
| <span class="source-line-no">2178</span><span id="line-2178"> ReplicationPeerConfigUtil.toSyncReplicationState(request.getSyncReplicationState()));</span> |
| <span class="source-line-no">2179</span><span id="line-2179"> return TransitReplicationPeerSyncReplicationStateResponse.newBuilder().setProcId(procId)</span> |
| <span class="source-line-no">2180</span><span id="line-2180"> .build();</span> |
| <span class="source-line-no">2181</span><span id="line-2181"> } catch (ReplicationException | IOException e) {</span> |
| <span class="source-line-no">2182</span><span id="line-2182"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2183</span><span id="line-2183"> }</span> |
| <span class="source-line-no">2184</span><span id="line-2184"> }</span> |
| <span class="source-line-no">2185</span><span id="line-2185"></span> |
| <span class="source-line-no">2186</span><span id="line-2186"> @Override</span> |
| <span class="source-line-no">2187</span><span id="line-2187"> public ListReplicationPeersResponse listReplicationPeers(RpcController controller,</span> |
| <span class="source-line-no">2188</span><span id="line-2188"> ListReplicationPeersRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2189</span><span id="line-2189"> ListReplicationPeersResponse.Builder response = ListReplicationPeersResponse.newBuilder();</span> |
| <span class="source-line-no">2190</span><span id="line-2190"> try {</span> |
| <span class="source-line-no">2191</span><span id="line-2191"> List<ReplicationPeerDescription> peers =</span> |
| <span class="source-line-no">2192</span><span id="line-2192"> server.listReplicationPeers(request.hasRegex() ? request.getRegex() : null);</span> |
| <span class="source-line-no">2193</span><span id="line-2193"> for (ReplicationPeerDescription peer : peers) {</span> |
| <span class="source-line-no">2194</span><span id="line-2194"> response.addPeerDesc(ReplicationPeerConfigUtil.toProtoReplicationPeerDescription(peer));</span> |
| <span class="source-line-no">2195</span><span id="line-2195"> }</span> |
| <span class="source-line-no">2196</span><span id="line-2196"> } catch (ReplicationException | IOException e) {</span> |
| <span class="source-line-no">2197</span><span id="line-2197"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2198</span><span id="line-2198"> }</span> |
| <span class="source-line-no">2199</span><span id="line-2199"> return response.build();</span> |
| <span class="source-line-no">2200</span><span id="line-2200"> }</span> |
| <span class="source-line-no">2201</span><span id="line-2201"></span> |
| <span class="source-line-no">2202</span><span id="line-2202"> @Override</span> |
| <span class="source-line-no">2203</span><span id="line-2203"> public GetReplicationPeerStateResponse isReplicationPeerEnabled(RpcController controller,</span> |
| <span class="source-line-no">2204</span><span id="line-2204"> GetReplicationPeerStateRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2205</span><span id="line-2205"> boolean isEnabled;</span> |
| <span class="source-line-no">2206</span><span id="line-2206"> try {</span> |
| <span class="source-line-no">2207</span><span id="line-2207"> isEnabled = server.getReplicationPeerManager().getPeerState(request.getPeerId());</span> |
| <span class="source-line-no">2208</span><span id="line-2208"> } catch (ReplicationException ioe) {</span> |
| <span class="source-line-no">2209</span><span id="line-2209"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">2210</span><span id="line-2210"> }</span> |
| <span class="source-line-no">2211</span><span id="line-2211"> return GetReplicationPeerStateResponse.newBuilder().setIsEnabled(isEnabled).build();</span> |
| <span class="source-line-no">2212</span><span id="line-2212"> }</span> |
| <span class="source-line-no">2213</span><span id="line-2213"></span> |
| <span class="source-line-no">2214</span><span id="line-2214"> @Override</span> |
| <span class="source-line-no">2215</span><span id="line-2215"> public ReplicationPeerModificationSwitchResponse replicationPeerModificationSwitch(</span> |
| <span class="source-line-no">2216</span><span id="line-2216"> RpcController controller, ReplicationPeerModificationSwitchRequest request)</span> |
| <span class="source-line-no">2217</span><span id="line-2217"> throws ServiceException {</span> |
| <span class="source-line-no">2218</span><span id="line-2218"> try {</span> |
| <span class="source-line-no">2219</span><span id="line-2219"> server.checkInitialized();</span> |
| <span class="source-line-no">2220</span><span id="line-2220"> boolean prevValue = server.replicationPeerModificationSwitch(request.getOn());</span> |
| <span class="source-line-no">2221</span><span id="line-2221"> return ReplicationPeerModificationSwitchResponse.newBuilder().setPreviousValue(prevValue)</span> |
| <span class="source-line-no">2222</span><span id="line-2222"> .build();</span> |
| <span class="source-line-no">2223</span><span id="line-2223"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">2224</span><span id="line-2224"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">2225</span><span id="line-2225"> }</span> |
| <span class="source-line-no">2226</span><span id="line-2226"> }</span> |
| <span class="source-line-no">2227</span><span id="line-2227"></span> |
| <span class="source-line-no">2228</span><span id="line-2228"> @Override</span> |
| <span class="source-line-no">2229</span><span id="line-2229"> public GetReplicationPeerModificationProceduresResponse getReplicationPeerModificationProcedures(</span> |
| <span class="source-line-no">2230</span><span id="line-2230"> RpcController controller, GetReplicationPeerModificationProceduresRequest request)</span> |
| <span class="source-line-no">2231</span><span id="line-2231"> throws ServiceException {</span> |
| <span class="source-line-no">2232</span><span id="line-2232"> try {</span> |
| <span class="source-line-no">2233</span><span id="line-2233"> server.checkInitialized();</span> |
| <span class="source-line-no">2234</span><span id="line-2234"> GetReplicationPeerModificationProceduresResponse.Builder builder =</span> |
| <span class="source-line-no">2235</span><span id="line-2235"> GetReplicationPeerModificationProceduresResponse.newBuilder();</span> |
| <span class="source-line-no">2236</span><span id="line-2236"> for (Procedure<?> proc : server.getProcedures()) {</span> |
| <span class="source-line-no">2237</span><span id="line-2237"> if (proc.isFinished()) {</span> |
| <span class="source-line-no">2238</span><span id="line-2238"> continue;</span> |
| <span class="source-line-no">2239</span><span id="line-2239"> }</span> |
| <span class="source-line-no">2240</span><span id="line-2240"> if (!(proc instanceof AbstractPeerNoLockProcedure)) {</span> |
| <span class="source-line-no">2241</span><span id="line-2241"> continue;</span> |
| <span class="source-line-no">2242</span><span id="line-2242"> }</span> |
| <span class="source-line-no">2243</span><span id="line-2243"> builder.addProcedure(ProcedureUtil.convertToProtoProcedure(proc));</span> |
| <span class="source-line-no">2244</span><span id="line-2244"> }</span> |
| <span class="source-line-no">2245</span><span id="line-2245"> return builder.build();</span> |
| <span class="source-line-no">2246</span><span id="line-2246"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">2247</span><span id="line-2247"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">2248</span><span id="line-2248"> }</span> |
| <span class="source-line-no">2249</span><span id="line-2249"> }</span> |
| <span class="source-line-no">2250</span><span id="line-2250"></span> |
| <span class="source-line-no">2251</span><span id="line-2251"> @Override</span> |
| <span class="source-line-no">2252</span><span id="line-2252"> public IsReplicationPeerModificationEnabledResponse isReplicationPeerModificationEnabled(</span> |
| <span class="source-line-no">2253</span><span id="line-2253"> RpcController controller, IsReplicationPeerModificationEnabledRequest request)</span> |
| <span class="source-line-no">2254</span><span id="line-2254"> throws ServiceException {</span> |
| <span class="source-line-no">2255</span><span id="line-2255"> try {</span> |
| <span class="source-line-no">2256</span><span id="line-2256"> server.checkInitialized();</span> |
| <span class="source-line-no">2257</span><span id="line-2257"> return IsReplicationPeerModificationEnabledResponse.newBuilder()</span> |
| <span class="source-line-no">2258</span><span id="line-2258"> .setEnabled(server.isReplicationPeerModificationEnabled()).build();</span> |
| <span class="source-line-no">2259</span><span id="line-2259"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">2260</span><span id="line-2260"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">2261</span><span id="line-2261"> }</span> |
| <span class="source-line-no">2262</span><span id="line-2262"> }</span> |
| <span class="source-line-no">2263</span><span id="line-2263"></span> |
| <span class="source-line-no">2264</span><span id="line-2264"> @Override</span> |
| <span class="source-line-no">2265</span><span id="line-2265"> public ListDecommissionedRegionServersResponse listDecommissionedRegionServers(</span> |
| <span class="source-line-no">2266</span><span id="line-2266"> RpcController controller, ListDecommissionedRegionServersRequest request)</span> |
| <span class="source-line-no">2267</span><span id="line-2267"> throws ServiceException {</span> |
| <span class="source-line-no">2268</span><span id="line-2268"> ListDecommissionedRegionServersResponse.Builder response =</span> |
| <span class="source-line-no">2269</span><span id="line-2269"> ListDecommissionedRegionServersResponse.newBuilder();</span> |
| <span class="source-line-no">2270</span><span id="line-2270"> try {</span> |
| <span class="source-line-no">2271</span><span id="line-2271"> server.checkInitialized();</span> |
| <span class="source-line-no">2272</span><span id="line-2272"> if (server.cpHost != null) {</span> |
| <span class="source-line-no">2273</span><span id="line-2273"> server.cpHost.preListDecommissionedRegionServers();</span> |
| <span class="source-line-no">2274</span><span id="line-2274"> }</span> |
| <span class="source-line-no">2275</span><span id="line-2275"> List<ServerName> servers = server.listDecommissionedRegionServers();</span> |
| <span class="source-line-no">2276</span><span id="line-2276"> response.addAllServerName((servers.stream().map(server -> ProtobufUtil.toServerName(server)))</span> |
| <span class="source-line-no">2277</span><span id="line-2277"> .collect(Collectors.toList()));</span> |
| <span class="source-line-no">2278</span><span id="line-2278"> if (server.cpHost != null) {</span> |
| <span class="source-line-no">2279</span><span id="line-2279"> server.cpHost.postListDecommissionedRegionServers();</span> |
| <span class="source-line-no">2280</span><span id="line-2280"> }</span> |
| <span class="source-line-no">2281</span><span id="line-2281"> } catch (IOException io) {</span> |
| <span class="source-line-no">2282</span><span id="line-2282"> throw new ServiceException(io);</span> |
| <span class="source-line-no">2283</span><span id="line-2283"> }</span> |
| <span class="source-line-no">2284</span><span id="line-2284"></span> |
| <span class="source-line-no">2285</span><span id="line-2285"> return response.build();</span> |
| <span class="source-line-no">2286</span><span id="line-2286"> }</span> |
| <span class="source-line-no">2287</span><span id="line-2287"></span> |
| <span class="source-line-no">2288</span><span id="line-2288"> @Override</span> |
| <span class="source-line-no">2289</span><span id="line-2289"> public DecommissionRegionServersResponse decommissionRegionServers(RpcController controller,</span> |
| <span class="source-line-no">2290</span><span id="line-2290"> DecommissionRegionServersRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2291</span><span id="line-2291"> try {</span> |
| <span class="source-line-no">2292</span><span id="line-2292"> server.checkInitialized();</span> |
| <span class="source-line-no">2293</span><span id="line-2293"> List<ServerName> servers = request.getServerNameList().stream()</span> |
| <span class="source-line-no">2294</span><span id="line-2294"> .map(pbServer -> ProtobufUtil.toServerName(pbServer)).collect(Collectors.toList());</span> |
| <span class="source-line-no">2295</span><span id="line-2295"> boolean offload = request.getOffload();</span> |
| <span class="source-line-no">2296</span><span id="line-2296"> if (server.cpHost != null) {</span> |
| <span class="source-line-no">2297</span><span id="line-2297"> server.cpHost.preDecommissionRegionServers(servers, offload);</span> |
| <span class="source-line-no">2298</span><span id="line-2298"> }</span> |
| <span class="source-line-no">2299</span><span id="line-2299"> server.decommissionRegionServers(servers, offload);</span> |
| <span class="source-line-no">2300</span><span id="line-2300"> if (server.cpHost != null) {</span> |
| <span class="source-line-no">2301</span><span id="line-2301"> server.cpHost.postDecommissionRegionServers(servers, offload);</span> |
| <span class="source-line-no">2302</span><span id="line-2302"> }</span> |
| <span class="source-line-no">2303</span><span id="line-2303"> } catch (IOException io) {</span> |
| <span class="source-line-no">2304</span><span id="line-2304"> throw new ServiceException(io);</span> |
| <span class="source-line-no">2305</span><span id="line-2305"> }</span> |
| <span class="source-line-no">2306</span><span id="line-2306"></span> |
| <span class="source-line-no">2307</span><span id="line-2307"> return DecommissionRegionServersResponse.newBuilder().build();</span> |
| <span class="source-line-no">2308</span><span id="line-2308"> }</span> |
| <span class="source-line-no">2309</span><span id="line-2309"></span> |
| <span class="source-line-no">2310</span><span id="line-2310"> @Override</span> |
| <span class="source-line-no">2311</span><span id="line-2311"> public RecommissionRegionServerResponse recommissionRegionServer(RpcController controller,</span> |
| <span class="source-line-no">2312</span><span id="line-2312"> RecommissionRegionServerRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2313</span><span id="line-2313"> try {</span> |
| <span class="source-line-no">2314</span><span id="line-2314"> server.checkInitialized();</span> |
| <span class="source-line-no">2315</span><span id="line-2315"> ServerName sn = ProtobufUtil.toServerName(request.getServerName());</span> |
| <span class="source-line-no">2316</span><span id="line-2316"> List<byte[]> encodedRegionNames = request.getRegionList().stream()</span> |
| <span class="source-line-no">2317</span><span id="line-2317"> .map(regionSpecifier -> regionSpecifier.getValue().toByteArray())</span> |
| <span class="source-line-no">2318</span><span id="line-2318"> .collect(Collectors.toList());</span> |
| <span class="source-line-no">2319</span><span id="line-2319"> if (server.cpHost != null) {</span> |
| <span class="source-line-no">2320</span><span id="line-2320"> server.cpHost.preRecommissionRegionServer(sn, encodedRegionNames);</span> |
| <span class="source-line-no">2321</span><span id="line-2321"> }</span> |
| <span class="source-line-no">2322</span><span id="line-2322"> server.recommissionRegionServer(sn, encodedRegionNames);</span> |
| <span class="source-line-no">2323</span><span id="line-2323"> if (server.cpHost != null) {</span> |
| <span class="source-line-no">2324</span><span id="line-2324"> server.cpHost.postRecommissionRegionServer(sn, encodedRegionNames);</span> |
| <span class="source-line-no">2325</span><span id="line-2325"> }</span> |
| <span class="source-line-no">2326</span><span id="line-2326"> } catch (IOException io) {</span> |
| <span class="source-line-no">2327</span><span id="line-2327"> throw new ServiceException(io);</span> |
| <span class="source-line-no">2328</span><span id="line-2328"> }</span> |
| <span class="source-line-no">2329</span><span id="line-2329"></span> |
| <span class="source-line-no">2330</span><span id="line-2330"> return RecommissionRegionServerResponse.newBuilder().build();</span> |
| <span class="source-line-no">2331</span><span id="line-2331"> }</span> |
| <span class="source-line-no">2332</span><span id="line-2332"></span> |
| <span class="source-line-no">2333</span><span id="line-2333"> @Override</span> |
| <span class="source-line-no">2334</span><span id="line-2334"> public LockResponse requestLock(RpcController controller, final LockRequest request)</span> |
| <span class="source-line-no">2335</span><span id="line-2335"> throws ServiceException {</span> |
| <span class="source-line-no">2336</span><span id="line-2336"> try {</span> |
| <span class="source-line-no">2337</span><span id="line-2337"> if (request.getDescription().isEmpty()) {</span> |
| <span class="source-line-no">2338</span><span id="line-2338"> throw new IllegalArgumentException("Empty description");</span> |
| <span class="source-line-no">2339</span><span id="line-2339"> }</span> |
| <span class="source-line-no">2340</span><span id="line-2340"> NonceProcedureRunnable npr;</span> |
| <span class="source-line-no">2341</span><span id="line-2341"> LockType type = LockType.valueOf(request.getLockType().name());</span> |
| <span class="source-line-no">2342</span><span id="line-2342"> if (request.getRegionInfoCount() > 0) {</span> |
| <span class="source-line-no">2343</span><span id="line-2343"> final RegionInfo[] regionInfos = new RegionInfo[request.getRegionInfoCount()];</span> |
| <span class="source-line-no">2344</span><span id="line-2344"> for (int i = 0; i < request.getRegionInfoCount(); ++i) {</span> |
| <span class="source-line-no">2345</span><span id="line-2345"> regionInfos[i] = ProtobufUtil.toRegionInfo(request.getRegionInfo(i));</span> |
| <span class="source-line-no">2346</span><span id="line-2346"> }</span> |
| <span class="source-line-no">2347</span><span id="line-2347"> npr = new NonceProcedureRunnable(server, request.getNonceGroup(), request.getNonce()) {</span> |
| <span class="source-line-no">2348</span><span id="line-2348"> @Override</span> |
| <span class="source-line-no">2349</span><span id="line-2349"> protected void run() throws IOException {</span> |
| <span class="source-line-no">2350</span><span id="line-2350"> setProcId(server.getLockManager().remoteLocks().requestRegionsLock(regionInfos,</span> |
| <span class="source-line-no">2351</span><span id="line-2351"> request.getDescription(), getNonceKey()));</span> |
| <span class="source-line-no">2352</span><span id="line-2352"> }</span> |
| <span class="source-line-no">2353</span><span id="line-2353"></span> |
| <span class="source-line-no">2354</span><span id="line-2354"> @Override</span> |
| <span class="source-line-no">2355</span><span id="line-2355"> protected String getDescription() {</span> |
| <span class="source-line-no">2356</span><span id="line-2356"> return "RequestLock";</span> |
| <span class="source-line-no">2357</span><span id="line-2357"> }</span> |
| <span class="source-line-no">2358</span><span id="line-2358"> };</span> |
| <span class="source-line-no">2359</span><span id="line-2359"> } else if (request.hasTableName()) {</span> |
| <span class="source-line-no">2360</span><span id="line-2360"> final TableName tableName = ProtobufUtil.toTableName(request.getTableName());</span> |
| <span class="source-line-no">2361</span><span id="line-2361"> npr = new NonceProcedureRunnable(server, request.getNonceGroup(), request.getNonce()) {</span> |
| <span class="source-line-no">2362</span><span id="line-2362"> @Override</span> |
| <span class="source-line-no">2363</span><span id="line-2363"> protected void run() throws IOException {</span> |
| <span class="source-line-no">2364</span><span id="line-2364"> setProcId(server.getLockManager().remoteLocks().requestTableLock(tableName, type,</span> |
| <span class="source-line-no">2365</span><span id="line-2365"> request.getDescription(), getNonceKey()));</span> |
| <span class="source-line-no">2366</span><span id="line-2366"> }</span> |
| <span class="source-line-no">2367</span><span id="line-2367"></span> |
| <span class="source-line-no">2368</span><span id="line-2368"> @Override</span> |
| <span class="source-line-no">2369</span><span id="line-2369"> protected String getDescription() {</span> |
| <span class="source-line-no">2370</span><span id="line-2370"> return "RequestLock";</span> |
| <span class="source-line-no">2371</span><span id="line-2371"> }</span> |
| <span class="source-line-no">2372</span><span id="line-2372"> };</span> |
| <span class="source-line-no">2373</span><span id="line-2373"> } else if (request.hasNamespace()) {</span> |
| <span class="source-line-no">2374</span><span id="line-2374"> npr = new NonceProcedureRunnable(server, request.getNonceGroup(), request.getNonce()) {</span> |
| <span class="source-line-no">2375</span><span id="line-2375"> @Override</span> |
| <span class="source-line-no">2376</span><span id="line-2376"> protected void run() throws IOException {</span> |
| <span class="source-line-no">2377</span><span id="line-2377"> setProcId(server.getLockManager().remoteLocks().requestNamespaceLock(</span> |
| <span class="source-line-no">2378</span><span id="line-2378"> request.getNamespace(), type, request.getDescription(), getNonceKey()));</span> |
| <span class="source-line-no">2379</span><span id="line-2379"> }</span> |
| <span class="source-line-no">2380</span><span id="line-2380"></span> |
| <span class="source-line-no">2381</span><span id="line-2381"> @Override</span> |
| <span class="source-line-no">2382</span><span id="line-2382"> protected String getDescription() {</span> |
| <span class="source-line-no">2383</span><span id="line-2383"> return "RequestLock";</span> |
| <span class="source-line-no">2384</span><span id="line-2384"> }</span> |
| <span class="source-line-no">2385</span><span id="line-2385"> };</span> |
| <span class="source-line-no">2386</span><span id="line-2386"> } else {</span> |
| <span class="source-line-no">2387</span><span id="line-2387"> throw new IllegalArgumentException("one of table/namespace/region should be specified");</span> |
| <span class="source-line-no">2388</span><span id="line-2388"> }</span> |
| <span class="source-line-no">2389</span><span id="line-2389"> long procId = MasterProcedureUtil.submitProcedure(npr);</span> |
| <span class="source-line-no">2390</span><span id="line-2390"> return LockResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">2391</span><span id="line-2391"> } catch (IllegalArgumentException e) {</span> |
| <span class="source-line-no">2392</span><span id="line-2392"> LOG.warn("Exception when queuing lock", e);</span> |
| <span class="source-line-no">2393</span><span id="line-2393"> throw new ServiceException(new DoNotRetryIOException(e));</span> |
| <span class="source-line-no">2394</span><span id="line-2394"> } catch (IOException e) {</span> |
| <span class="source-line-no">2395</span><span id="line-2395"> LOG.warn("Exception when queuing lock", e);</span> |
| <span class="source-line-no">2396</span><span id="line-2396"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2397</span><span id="line-2397"> }</span> |
| <span class="source-line-no">2398</span><span id="line-2398"> }</span> |
| <span class="source-line-no">2399</span><span id="line-2399"></span> |
| <span class="source-line-no">2400</span><span id="line-2400"> /**</span> |
| <span class="source-line-no">2401</span><span id="line-2401"> * @return LOCKED, if procedure is found and it has the lock; else UNLOCKED.</span> |
| <span class="source-line-no">2402</span><span id="line-2402"> * @throws ServiceException if given proc id is found but it is not a LockProcedure.</span> |
| <span class="source-line-no">2403</span><span id="line-2403"> */</span> |
| <span class="source-line-no">2404</span><span id="line-2404"> @Override</span> |
| <span class="source-line-no">2405</span><span id="line-2405"> public LockHeartbeatResponse lockHeartbeat(RpcController controller, LockHeartbeatRequest request)</span> |
| <span class="source-line-no">2406</span><span id="line-2406"> throws ServiceException {</span> |
| <span class="source-line-no">2407</span><span id="line-2407"> try {</span> |
| <span class="source-line-no">2408</span><span id="line-2408"> if (</span> |
| <span class="source-line-no">2409</span><span id="line-2409"> server.getLockManager().remoteLocks().lockHeartbeat(request.getProcId(),</span> |
| <span class="source-line-no">2410</span><span id="line-2410"> request.getKeepAlive())</span> |
| <span class="source-line-no">2411</span><span id="line-2411"> ) {</span> |
| <span class="source-line-no">2412</span><span id="line-2412"> return LockHeartbeatResponse.newBuilder()</span> |
| <span class="source-line-no">2413</span><span id="line-2413"> .setTimeoutMs(server.getConfiguration().getInt(LockProcedure.REMOTE_LOCKS_TIMEOUT_MS_CONF,</span> |
| <span class="source-line-no">2414</span><span id="line-2414"> LockProcedure.DEFAULT_REMOTE_LOCKS_TIMEOUT_MS))</span> |
| <span class="source-line-no">2415</span><span id="line-2415"> .setLockStatus(LockHeartbeatResponse.LockStatus.LOCKED).build();</span> |
| <span class="source-line-no">2416</span><span id="line-2416"> } else {</span> |
| <span class="source-line-no">2417</span><span id="line-2417"> return LockHeartbeatResponse.newBuilder()</span> |
| <span class="source-line-no">2418</span><span id="line-2418"> .setLockStatus(LockHeartbeatResponse.LockStatus.UNLOCKED).build();</span> |
| <span class="source-line-no">2419</span><span id="line-2419"> }</span> |
| <span class="source-line-no">2420</span><span id="line-2420"> } catch (IOException e) {</span> |
| <span class="source-line-no">2421</span><span id="line-2421"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2422</span><span id="line-2422"> }</span> |
| <span class="source-line-no">2423</span><span id="line-2423"> }</span> |
| <span class="source-line-no">2424</span><span id="line-2424"></span> |
| <span class="source-line-no">2425</span><span id="line-2425"> @Override</span> |
| <span class="source-line-no">2426</span><span id="line-2426"> public RegionSpaceUseReportResponse reportRegionSpaceUse(RpcController controller,</span> |
| <span class="source-line-no">2427</span><span id="line-2427"> RegionSpaceUseReportRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2428</span><span id="line-2428"> try {</span> |
| <span class="source-line-no">2429</span><span id="line-2429"> server.checkInitialized();</span> |
| <span class="source-line-no">2430</span><span id="line-2430"> if (!QuotaUtil.isQuotaEnabled(server.getConfiguration())) {</span> |
| <span class="source-line-no">2431</span><span id="line-2431"> return RegionSpaceUseReportResponse.newBuilder().build();</span> |
| <span class="source-line-no">2432</span><span id="line-2432"> }</span> |
| <span class="source-line-no">2433</span><span id="line-2433"> MasterQuotaManager quotaManager = this.server.getMasterQuotaManager();</span> |
| <span class="source-line-no">2434</span><span id="line-2434"> if (quotaManager != null) {</span> |
| <span class="source-line-no">2435</span><span id="line-2435"> final long now = EnvironmentEdgeManager.currentTime();</span> |
| <span class="source-line-no">2436</span><span id="line-2436"> for (RegionSpaceUse report : request.getSpaceUseList()) {</span> |
| <span class="source-line-no">2437</span><span id="line-2437"> quotaManager.addRegionSize(ProtobufUtil.toRegionInfo(report.getRegionInfo()),</span> |
| <span class="source-line-no">2438</span><span id="line-2438"> report.getRegionSize(), now);</span> |
| <span class="source-line-no">2439</span><span id="line-2439"> }</span> |
| <span class="source-line-no">2440</span><span id="line-2440"> } else {</span> |
| <span class="source-line-no">2441</span><span id="line-2441"> LOG.debug("Received region space usage report but HMaster is not ready to process it, "</span> |
| <span class="source-line-no">2442</span><span id="line-2442"> + "skipping");</span> |
| <span class="source-line-no">2443</span><span id="line-2443"> }</span> |
| <span class="source-line-no">2444</span><span id="line-2444"> return RegionSpaceUseReportResponse.newBuilder().build();</span> |
| <span class="source-line-no">2445</span><span id="line-2445"> } catch (Exception e) {</span> |
| <span class="source-line-no">2446</span><span id="line-2446"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2447</span><span id="line-2447"> }</span> |
| <span class="source-line-no">2448</span><span id="line-2448"> }</span> |
| <span class="source-line-no">2449</span><span id="line-2449"></span> |
| <span class="source-line-no">2450</span><span id="line-2450"> @Override</span> |
| <span class="source-line-no">2451</span><span id="line-2451"> public GetSpaceQuotaRegionSizesResponse getSpaceQuotaRegionSizes(RpcController controller,</span> |
| <span class="source-line-no">2452</span><span id="line-2452"> GetSpaceQuotaRegionSizesRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2453</span><span id="line-2453"> try {</span> |
| <span class="source-line-no">2454</span><span id="line-2454"> server.checkInitialized();</span> |
| <span class="source-line-no">2455</span><span id="line-2455"> MasterQuotaManager quotaManager = this.server.getMasterQuotaManager();</span> |
| <span class="source-line-no">2456</span><span id="line-2456"> GetSpaceQuotaRegionSizesResponse.Builder builder =</span> |
| <span class="source-line-no">2457</span><span id="line-2457"> GetSpaceQuotaRegionSizesResponse.newBuilder();</span> |
| <span class="source-line-no">2458</span><span id="line-2458"> if (quotaManager != null) {</span> |
| <span class="source-line-no">2459</span><span id="line-2459"> Map<RegionInfo, Long> regionSizes = quotaManager.snapshotRegionSizes();</span> |
| <span class="source-line-no">2460</span><span id="line-2460"> Map<TableName, Long> regionSizesByTable = new HashMap<>();</span> |
| <span class="source-line-no">2461</span><span id="line-2461"> // Translate hregioninfo+long -> tablename+long</span> |
| <span class="source-line-no">2462</span><span id="line-2462"> for (Entry<RegionInfo, Long> entry : regionSizes.entrySet()) {</span> |
| <span class="source-line-no">2463</span><span id="line-2463"> final TableName tableName = entry.getKey().getTable();</span> |
| <span class="source-line-no">2464</span><span id="line-2464"> Long prevSize = regionSizesByTable.get(tableName);</span> |
| <span class="source-line-no">2465</span><span id="line-2465"> if (prevSize == null) {</span> |
| <span class="source-line-no">2466</span><span id="line-2466"> prevSize = 0L;</span> |
| <span class="source-line-no">2467</span><span id="line-2467"> }</span> |
| <span class="source-line-no">2468</span><span id="line-2468"> regionSizesByTable.put(tableName, prevSize + entry.getValue());</span> |
| <span class="source-line-no">2469</span><span id="line-2469"> }</span> |
| <span class="source-line-no">2470</span><span id="line-2470"> // Serialize them into the protobuf</span> |
| <span class="source-line-no">2471</span><span id="line-2471"> for (Entry<TableName, Long> tableSize : regionSizesByTable.entrySet()) {</span> |
| <span class="source-line-no">2472</span><span id="line-2472"> builder.addSizes(</span> |
| <span class="source-line-no">2473</span><span id="line-2473"> RegionSizes.newBuilder().setTableName(ProtobufUtil.toProtoTableName(tableSize.getKey()))</span> |
| <span class="source-line-no">2474</span><span id="line-2474"> .setSize(tableSize.getValue()).build());</span> |
| <span class="source-line-no">2475</span><span id="line-2475"> }</span> |
| <span class="source-line-no">2476</span><span id="line-2476"> return builder.build();</span> |
| <span class="source-line-no">2477</span><span id="line-2477"> } else {</span> |
| <span class="source-line-no">2478</span><span id="line-2478"> LOG.debug("Received space quota region size report but HMaster is not ready to process it,"</span> |
| <span class="source-line-no">2479</span><span id="line-2479"> + "skipping");</span> |
| <span class="source-line-no">2480</span><span id="line-2480"> }</span> |
| <span class="source-line-no">2481</span><span id="line-2481"> return builder.build();</span> |
| <span class="source-line-no">2482</span><span id="line-2482"> } catch (Exception e) {</span> |
| <span class="source-line-no">2483</span><span id="line-2483"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2484</span><span id="line-2484"> }</span> |
| <span class="source-line-no">2485</span><span id="line-2485"> }</span> |
| <span class="source-line-no">2486</span><span id="line-2486"></span> |
| <span class="source-line-no">2487</span><span id="line-2487"> @Override</span> |
| <span class="source-line-no">2488</span><span id="line-2488"> public GetQuotaStatesResponse getQuotaStates(RpcController controller,</span> |
| <span class="source-line-no">2489</span><span id="line-2489"> GetQuotaStatesRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2490</span><span id="line-2490"> try {</span> |
| <span class="source-line-no">2491</span><span id="line-2491"> server.checkInitialized();</span> |
| <span class="source-line-no">2492</span><span id="line-2492"> QuotaObserverChore quotaChore = this.server.getQuotaObserverChore();</span> |
| <span class="source-line-no">2493</span><span id="line-2493"> GetQuotaStatesResponse.Builder builder = GetQuotaStatesResponse.newBuilder();</span> |
| <span class="source-line-no">2494</span><span id="line-2494"> if (quotaChore != null) {</span> |
| <span class="source-line-no">2495</span><span id="line-2495"> // The "current" view of all tables with quotas</span> |
| <span class="source-line-no">2496</span><span id="line-2496"> Map<TableName, SpaceQuotaSnapshot> tableSnapshots = quotaChore.getTableQuotaSnapshots();</span> |
| <span class="source-line-no">2497</span><span id="line-2497"> for (Entry<TableName, SpaceQuotaSnapshot> entry : tableSnapshots.entrySet()) {</span> |
| <span class="source-line-no">2498</span><span id="line-2498"> builder.addTableSnapshots(TableQuotaSnapshot.newBuilder()</span> |
| <span class="source-line-no">2499</span><span id="line-2499"> .setTableName(ProtobufUtil.toProtoTableName(entry.getKey()))</span> |
| <span class="source-line-no">2500</span><span id="line-2500"> .setSnapshot(SpaceQuotaSnapshot.toProtoSnapshot(entry.getValue())).build());</span> |
| <span class="source-line-no">2501</span><span id="line-2501"> }</span> |
| <span class="source-line-no">2502</span><span id="line-2502"> // The "current" view of all namespaces with quotas</span> |
| <span class="source-line-no">2503</span><span id="line-2503"> Map<String, SpaceQuotaSnapshot> nsSnapshots = quotaChore.getNamespaceQuotaSnapshots();</span> |
| <span class="source-line-no">2504</span><span id="line-2504"> for (Entry<String, SpaceQuotaSnapshot> entry : nsSnapshots.entrySet()) {</span> |
| <span class="source-line-no">2505</span><span id="line-2505"> builder.addNsSnapshots(NamespaceQuotaSnapshot.newBuilder().setNamespace(entry.getKey())</span> |
| <span class="source-line-no">2506</span><span id="line-2506"> .setSnapshot(SpaceQuotaSnapshot.toProtoSnapshot(entry.getValue())).build());</span> |
| <span class="source-line-no">2507</span><span id="line-2507"> }</span> |
| <span class="source-line-no">2508</span><span id="line-2508"> return builder.build();</span> |
| <span class="source-line-no">2509</span><span id="line-2509"> }</span> |
| <span class="source-line-no">2510</span><span id="line-2510"> return builder.build();</span> |
| <span class="source-line-no">2511</span><span id="line-2511"> } catch (Exception e) {</span> |
| <span class="source-line-no">2512</span><span id="line-2512"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2513</span><span id="line-2513"> }</span> |
| <span class="source-line-no">2514</span><span id="line-2514"> }</span> |
| <span class="source-line-no">2515</span><span id="line-2515"></span> |
| <span class="source-line-no">2516</span><span id="line-2516"> @Override</span> |
| <span class="source-line-no">2517</span><span id="line-2517"> public ClearDeadServersResponse clearDeadServers(RpcController controller,</span> |
| <span class="source-line-no">2518</span><span id="line-2518"> ClearDeadServersRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2519</span><span id="line-2519"> LOG.debug(server.getClientIdAuditPrefix() + " clear dead region servers.");</span> |
| <span class="source-line-no">2520</span><span id="line-2520"> ClearDeadServersResponse.Builder response = ClearDeadServersResponse.newBuilder();</span> |
| <span class="source-line-no">2521</span><span id="line-2521"> try {</span> |
| <span class="source-line-no">2522</span><span id="line-2522"> server.checkInitialized();</span> |
| <span class="source-line-no">2523</span><span id="line-2523"> if (server.cpHost != null) {</span> |
| <span class="source-line-no">2524</span><span id="line-2524"> server.cpHost.preClearDeadServers();</span> |
| <span class="source-line-no">2525</span><span id="line-2525"> }</span> |
| <span class="source-line-no">2526</span><span id="line-2526"></span> |
| <span class="source-line-no">2527</span><span id="line-2527"> if (server.getServerManager().areDeadServersInProgress()) {</span> |
| <span class="source-line-no">2528</span><span id="line-2528"> LOG.debug("Some dead server is still under processing, won't clear the dead server list");</span> |
| <span class="source-line-no">2529</span><span id="line-2529"> response.addAllServerName(request.getServerNameList());</span> |
| <span class="source-line-no">2530</span><span id="line-2530"> } else {</span> |
| <span class="source-line-no">2531</span><span id="line-2531"> DeadServer deadServer = server.getServerManager().getDeadServers();</span> |
| <span class="source-line-no">2532</span><span id="line-2532"> Set<Address> clearedServers = new HashSet<>();</span> |
| <span class="source-line-no">2533</span><span id="line-2533"> for (HBaseProtos.ServerName pbServer : request.getServerNameList()) {</span> |
| <span class="source-line-no">2534</span><span id="line-2534"> ServerName serverName = ProtobufUtil.toServerName(pbServer);</span> |
| <span class="source-line-no">2535</span><span id="line-2535"> final boolean deadInProcess =</span> |
| <span class="source-line-no">2536</span><span id="line-2536"> server.getProcedures().stream().anyMatch(p -> (p instanceof ServerCrashProcedure)</span> |
| <span class="source-line-no">2537</span><span id="line-2537"> && ((ServerCrashProcedure) p).getServerName().equals(serverName));</span> |
| <span class="source-line-no">2538</span><span id="line-2538"> if (deadInProcess) {</span> |
| <span class="source-line-no">2539</span><span id="line-2539"> throw new ServiceException(</span> |
| <span class="source-line-no">2540</span><span id="line-2540"> String.format("Dead server '%s' is not 'dead' in fact...", serverName));</span> |
| <span class="source-line-no">2541</span><span id="line-2541"> }</span> |
| <span class="source-line-no">2542</span><span id="line-2542"></span> |
| <span class="source-line-no">2543</span><span id="line-2543"> if (!deadServer.removeDeadServer(serverName)) {</span> |
| <span class="source-line-no">2544</span><span id="line-2544"> response.addServerName(pbServer);</span> |
| <span class="source-line-no">2545</span><span id="line-2545"> } else {</span> |
| <span class="source-line-no">2546</span><span id="line-2546"> clearedServers.add(serverName.getAddress());</span> |
| <span class="source-line-no">2547</span><span id="line-2547"> }</span> |
| <span class="source-line-no">2548</span><span id="line-2548"> }</span> |
| <span class="source-line-no">2549</span><span id="line-2549"> server.getRSGroupInfoManager().removeServers(clearedServers);</span> |
| <span class="source-line-no">2550</span><span id="line-2550"> LOG.info("Remove decommissioned servers {} from RSGroup done", clearedServers);</span> |
| <span class="source-line-no">2551</span><span id="line-2551"> }</span> |
| <span class="source-line-no">2552</span><span id="line-2552"></span> |
| <span class="source-line-no">2553</span><span id="line-2553"> if (server.cpHost != null) {</span> |
| <span class="source-line-no">2554</span><span id="line-2554"> server.cpHost.postClearDeadServers(</span> |
| <span class="source-line-no">2555</span><span id="line-2555"> ProtobufUtil.toServerNameList(request.getServerNameList()),</span> |
| <span class="source-line-no">2556</span><span id="line-2556"> ProtobufUtil.toServerNameList(response.getServerNameList()));</span> |
| <span class="source-line-no">2557</span><span id="line-2557"> }</span> |
| <span class="source-line-no">2558</span><span id="line-2558"> } catch (IOException io) {</span> |
| <span class="source-line-no">2559</span><span id="line-2559"> throw new ServiceException(io);</span> |
| <span class="source-line-no">2560</span><span id="line-2560"> }</span> |
| <span class="source-line-no">2561</span><span id="line-2561"> return response.build();</span> |
| <span class="source-line-no">2562</span><span id="line-2562"> }</span> |
| <span class="source-line-no">2563</span><span id="line-2563"></span> |
| <span class="source-line-no">2564</span><span id="line-2564"> @Override</span> |
| <span class="source-line-no">2565</span><span id="line-2565"> public ReportProcedureDoneResponse reportProcedureDone(RpcController controller,</span> |
| <span class="source-line-no">2566</span><span id="line-2566"> ReportProcedureDoneRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2567</span><span id="line-2567"> // Check Masters is up and ready for duty before progressing. Remote side will keep trying.</span> |
| <span class="source-line-no">2568</span><span id="line-2568"> try {</span> |
| <span class="source-line-no">2569</span><span id="line-2569"> this.server.checkServiceStarted();</span> |
| <span class="source-line-no">2570</span><span id="line-2570"> for (RemoteProcedureResult result : request.getResultList()) {</span> |
| <span class="source-line-no">2571</span><span id="line-2571"> // -1 is less than any possible MasterActiveCode</span> |
| <span class="source-line-no">2572</span><span id="line-2572"> long initiatingMasterActiveTime =</span> |
| <span class="source-line-no">2573</span><span id="line-2573"> result.hasInitiatingMasterActiveTime() ? result.getInitiatingMasterActiveTime() : -1;</span> |
| <span class="source-line-no">2574</span><span id="line-2574"> throwOnOldMaster(result.getProcId(), initiatingMasterActiveTime);</span> |
| <span class="source-line-no">2575</span><span id="line-2575"> }</span> |
| <span class="source-line-no">2576</span><span id="line-2576"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">2577</span><span id="line-2577"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">2578</span><span id="line-2578"> }</span> |
| <span class="source-line-no">2579</span><span id="line-2579"> request.getResultList().forEach(result -> {</span> |
| <span class="source-line-no">2580</span><span id="line-2580"> if (result.getStatus() == RemoteProcedureResult.Status.SUCCESS) {</span> |
| <span class="source-line-no">2581</span><span id="line-2581"> byte[] remoteResultData =</span> |
| <span class="source-line-no">2582</span><span id="line-2582"> result.hasProcResultData() ? result.getProcResultData().toByteArray() : null;</span> |
| <span class="source-line-no">2583</span><span id="line-2583"> server.remoteProcedureCompleted(result.getProcId(), remoteResultData);</span> |
| <span class="source-line-no">2584</span><span id="line-2584"> } else {</span> |
| <span class="source-line-no">2585</span><span id="line-2585"> server.remoteProcedureFailed(result.getProcId(),</span> |
| <span class="source-line-no">2586</span><span id="line-2586"> RemoteProcedureException.fromProto(result.getError()));</span> |
| <span class="source-line-no">2587</span><span id="line-2587"> }</span> |
| <span class="source-line-no">2588</span><span id="line-2588"> });</span> |
| <span class="source-line-no">2589</span><span id="line-2589"> return ReportProcedureDoneResponse.getDefaultInstance();</span> |
| <span class="source-line-no">2590</span><span id="line-2590"> }</span> |
| <span class="source-line-no">2591</span><span id="line-2591"></span> |
| <span class="source-line-no">2592</span><span id="line-2592"> private void throwOnOldMaster(long procId, long initiatingMasterActiveTime)</span> |
| <span class="source-line-no">2593</span><span id="line-2593"> throws MasterNotRunningException {</span> |
| <span class="source-line-no">2594</span><span id="line-2594"> if (initiatingMasterActiveTime > server.getMasterActiveTime()) {</span> |
| <span class="source-line-no">2595</span><span id="line-2595"> // procedure is initiated by new active master but report received on master with older active</span> |
| <span class="source-line-no">2596</span><span id="line-2596"> // time</span> |
| <span class="source-line-no">2597</span><span id="line-2597"> LOG.warn(</span> |
| <span class="source-line-no">2598</span><span id="line-2598"> "Report for procId: {} and initiatingMasterAT {} received on master with activeTime {}",</span> |
| <span class="source-line-no">2599</span><span id="line-2599"> procId, initiatingMasterActiveTime, server.getMasterActiveTime());</span> |
| <span class="source-line-no">2600</span><span id="line-2600"> throw new MasterNotRunningException("Another master is active");</span> |
| <span class="source-line-no">2601</span><span id="line-2601"> }</span> |
| <span class="source-line-no">2602</span><span id="line-2602"> }</span> |
| <span class="source-line-no">2603</span><span id="line-2603"></span> |
| <span class="source-line-no">2604</span><span id="line-2604"> @Override</span> |
| <span class="source-line-no">2605</span><span id="line-2605"> public FileArchiveNotificationResponse reportFileArchival(RpcController controller,</span> |
| <span class="source-line-no">2606</span><span id="line-2606"> FileArchiveNotificationRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2607</span><span id="line-2607"> try {</span> |
| <span class="source-line-no">2608</span><span id="line-2608"> server.checkInitialized();</span> |
| <span class="source-line-no">2609</span><span id="line-2609"> if (!QuotaUtil.isQuotaEnabled(server.getConfiguration())) {</span> |
| <span class="source-line-no">2610</span><span id="line-2610"> return FileArchiveNotificationResponse.newBuilder().build();</span> |
| <span class="source-line-no">2611</span><span id="line-2611"> }</span> |
| <span class="source-line-no">2612</span><span id="line-2612"> server.getMasterQuotaManager().processFileArchivals(request, server.getConnection(),</span> |
| <span class="source-line-no">2613</span><span id="line-2613"> server.getConfiguration(), server.getFileSystem());</span> |
| <span class="source-line-no">2614</span><span id="line-2614"> return FileArchiveNotificationResponse.newBuilder().build();</span> |
| <span class="source-line-no">2615</span><span id="line-2615"> } catch (Exception e) {</span> |
| <span class="source-line-no">2616</span><span id="line-2616"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2617</span><span id="line-2617"> }</span> |
| <span class="source-line-no">2618</span><span id="line-2618"> }</span> |
| <span class="source-line-no">2619</span><span id="line-2619"></span> |
| <span class="source-line-no">2620</span><span id="line-2620"> // HBCK Services</span> |
| <span class="source-line-no">2621</span><span id="line-2621"></span> |
| <span class="source-line-no">2622</span><span id="line-2622"> @Override</span> |
| <span class="source-line-no">2623</span><span id="line-2623"> public RunHbckChoreResponse runHbckChore(RpcController c, RunHbckChoreRequest req)</span> |
| <span class="source-line-no">2624</span><span id="line-2624"> throws ServiceException {</span> |
| <span class="source-line-no">2625</span><span id="line-2625"> rpcPreCheck("runHbckChore");</span> |
| <span class="source-line-no">2626</span><span id="line-2626"> LOG.info("{} request HBCK chore to run", server.getClientIdAuditPrefix());</span> |
| <span class="source-line-no">2627</span><span id="line-2627"> HbckChore hbckChore = server.getHbckChore();</span> |
| <span class="source-line-no">2628</span><span id="line-2628"> boolean ran = hbckChore.runChore();</span> |
| <span class="source-line-no">2629</span><span id="line-2629"> return RunHbckChoreResponse.newBuilder().setRan(ran).build();</span> |
| <span class="source-line-no">2630</span><span id="line-2630"> }</span> |
| <span class="source-line-no">2631</span><span id="line-2631"></span> |
| <span class="source-line-no">2632</span><span id="line-2632"> /**</span> |
| <span class="source-line-no">2633</span><span id="line-2633"> * Update state of the table in meta only. This is required by hbck in some situations to cleanup</span> |
| <span class="source-line-no">2634</span><span id="line-2634"> * stuck assign/ unassign regions procedures for the table.</span> |
| <span class="source-line-no">2635</span><span id="line-2635"> * @return previous state of the table</span> |
| <span class="source-line-no">2636</span><span id="line-2636"> */</span> |
| <span class="source-line-no">2637</span><span id="line-2637"> @Override</span> |
| <span class="source-line-no">2638</span><span id="line-2638"> public GetTableStateResponse setTableStateInMeta(RpcController controller,</span> |
| <span class="source-line-no">2639</span><span id="line-2639"> SetTableStateInMetaRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2640</span><span id="line-2640"> rpcPreCheck("setTableStateInMeta");</span> |
| <span class="source-line-no">2641</span><span id="line-2641"> TableName tn = ProtobufUtil.toTableName(request.getTableName());</span> |
| <span class="source-line-no">2642</span><span id="line-2642"> try {</span> |
| <span class="source-line-no">2643</span><span id="line-2643"> TableState prevState = this.server.getTableStateManager().getTableState(tn);</span> |
| <span class="source-line-no">2644</span><span id="line-2644"> TableState newState = TableState.convert(tn, request.getTableState());</span> |
| <span class="source-line-no">2645</span><span id="line-2645"> LOG.info("{} set table={} state from {} to {}", server.getClientIdAuditPrefix(), tn,</span> |
| <span class="source-line-no">2646</span><span id="line-2646"> prevState.getState(), newState.getState());</span> |
| <span class="source-line-no">2647</span><span id="line-2647"> this.server.getTableStateManager().setTableState(tn, newState.getState());</span> |
| <span class="source-line-no">2648</span><span id="line-2648"> return GetTableStateResponse.newBuilder().setTableState(prevState.convert()).build();</span> |
| <span class="source-line-no">2649</span><span id="line-2649"> } catch (Exception e) {</span> |
| <span class="source-line-no">2650</span><span id="line-2650"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2651</span><span id="line-2651"> }</span> |
| <span class="source-line-no">2652</span><span id="line-2652"> }</span> |
| <span class="source-line-no">2653</span><span id="line-2653"></span> |
| <span class="source-line-no">2654</span><span id="line-2654"> /**</span> |
| <span class="source-line-no">2655</span><span id="line-2655"> * Update state of the region in meta only. This is required by hbck in some situations to cleanup</span> |
| <span class="source-line-no">2656</span><span id="line-2656"> * stuck assign/ unassign regions procedures for the table.</span> |
| <span class="source-line-no">2657</span><span id="line-2657"> * @return previous states of the regions</span> |
| <span class="source-line-no">2658</span><span id="line-2658"> */</span> |
| <span class="source-line-no">2659</span><span id="line-2659"> @Override</span> |
| <span class="source-line-no">2660</span><span id="line-2660"> public SetRegionStateInMetaResponse setRegionStateInMeta(RpcController controller,</span> |
| <span class="source-line-no">2661</span><span id="line-2661"> SetRegionStateInMetaRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2662</span><span id="line-2662"> rpcPreCheck("setRegionStateInMeta");</span> |
| <span class="source-line-no">2663</span><span id="line-2663"> SetRegionStateInMetaResponse.Builder builder = SetRegionStateInMetaResponse.newBuilder();</span> |
| <span class="source-line-no">2664</span><span id="line-2664"> final AssignmentManager am = server.getAssignmentManager();</span> |
| <span class="source-line-no">2665</span><span id="line-2665"> try {</span> |
| <span class="source-line-no">2666</span><span id="line-2666"> for (RegionSpecifierAndState s : request.getStatesList()) {</span> |
| <span class="source-line-no">2667</span><span id="line-2667"> final RegionSpecifier spec = s.getRegionSpecifier();</span> |
| <span class="source-line-no">2668</span><span id="line-2668"> final RegionInfo targetRegionInfo = getRegionInfo(spec);</span> |
| <span class="source-line-no">2669</span><span id="line-2669"> final RegionState.State targetState = RegionState.State.convert(s.getState());</span> |
| <span class="source-line-no">2670</span><span id="line-2670"> final RegionState.State currentState = Optional.ofNullable(targetRegionInfo)</span> |
| <span class="source-line-no">2671</span><span id="line-2671"> .map(info -> am.getRegionStates().getRegionState(info)).map(RegionState::getState)</span> |
| <span class="source-line-no">2672</span><span id="line-2672"> .orElseThrow(</span> |
| <span class="source-line-no">2673</span><span id="line-2673"> () -> new ServiceException("No existing state known for region '" + spec + "'."));</span> |
| <span class="source-line-no">2674</span><span id="line-2674"> LOG.info("{} set region={} state from {} to {}", server.getClientIdAuditPrefix(),</span> |
| <span class="source-line-no">2675</span><span id="line-2675"> targetRegionInfo, currentState, targetState);</span> |
| <span class="source-line-no">2676</span><span id="line-2676"> if (currentState == targetState) {</span> |
| <span class="source-line-no">2677</span><span id="line-2677"> LOG.debug("Proposed state matches current state. {}, {}", targetRegionInfo, currentState);</span> |
| <span class="source-line-no">2678</span><span id="line-2678"> continue;</span> |
| <span class="source-line-no">2679</span><span id="line-2679"> }</span> |
| <span class="source-line-no">2680</span><span id="line-2680"> MetaTableAccessor.updateRegionState(server.getConnection(), targetRegionInfo, targetState);</span> |
| <span class="source-line-no">2681</span><span id="line-2681"> // Loads from meta again to refresh AM cache with the new region state</span> |
| <span class="source-line-no">2682</span><span id="line-2682"> am.populateRegionStatesFromMeta(targetRegionInfo);</span> |
| <span class="source-line-no">2683</span><span id="line-2683"> builder.addStates(RegionSpecifierAndState.newBuilder().setRegionSpecifier(spec)</span> |
| <span class="source-line-no">2684</span><span id="line-2684"> .setState(currentState.convert()));</span> |
| <span class="source-line-no">2685</span><span id="line-2685"> }</span> |
| <span class="source-line-no">2686</span><span id="line-2686"> } catch (IOException e) {</span> |
| <span class="source-line-no">2687</span><span id="line-2687"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2688</span><span id="line-2688"> }</span> |
| <span class="source-line-no">2689</span><span id="line-2689"> return builder.build();</span> |
| <span class="source-line-no">2690</span><span id="line-2690"> }</span> |
| <span class="source-line-no">2691</span><span id="line-2691"></span> |
| <span class="source-line-no">2692</span><span id="line-2692"> /**</span> |
| <span class="source-line-no">2693</span><span id="line-2693"> * Get {@link RegionInfo} from Master using content of {@link RegionSpecifier} as key.</span> |
| <span class="source-line-no">2694</span><span id="line-2694"> * @return {@link RegionInfo} found by decoding {@code rs} or {@code null} if {@code rs} is</span> |
| <span class="source-line-no">2695</span><span id="line-2695"> * unknown to the master.</span> |
| <span class="source-line-no">2696</span><span id="line-2696"> * @throws ServiceException If some error occurs while querying META or parsing results.</span> |
| <span class="source-line-no">2697</span><span id="line-2697"> */</span> |
| <span class="source-line-no">2698</span><span id="line-2698"> private RegionInfo getRegionInfo(HBaseProtos.RegionSpecifier rs) throws ServiceException {</span> |
| <span class="source-line-no">2699</span><span id="line-2699"> // TODO: this doesn't handle MOB regions. Should it? See the public method #getRegionInfo</span> |
| <span class="source-line-no">2700</span><span id="line-2700"> final AssignmentManager am = server.getAssignmentManager();</span> |
| <span class="source-line-no">2701</span><span id="line-2701"> final String encodedRegionName;</span> |
| <span class="source-line-no">2702</span><span id="line-2702"> final RegionInfo info;</span> |
| <span class="source-line-no">2703</span><span id="line-2703"> // first try resolving from the AM's caches.</span> |
| <span class="source-line-no">2704</span><span id="line-2704"> switch (rs.getType()) {</span> |
| <span class="source-line-no">2705</span><span id="line-2705"> case REGION_NAME:</span> |
| <span class="source-line-no">2706</span><span id="line-2706"> final byte[] regionName = rs.getValue().toByteArray();</span> |
| <span class="source-line-no">2707</span><span id="line-2707"> encodedRegionName = RegionInfo.encodeRegionName(regionName);</span> |
| <span class="source-line-no">2708</span><span id="line-2708"> info = am.getRegionInfo(regionName);</span> |
| <span class="source-line-no">2709</span><span id="line-2709"> break;</span> |
| <span class="source-line-no">2710</span><span id="line-2710"> case ENCODED_REGION_NAME:</span> |
| <span class="source-line-no">2711</span><span id="line-2711"> encodedRegionName = rs.getValue().toStringUtf8();</span> |
| <span class="source-line-no">2712</span><span id="line-2712"> info = am.getRegionInfo(encodedRegionName);</span> |
| <span class="source-line-no">2713</span><span id="line-2713"> break;</span> |
| <span class="source-line-no">2714</span><span id="line-2714"> default:</span> |
| <span class="source-line-no">2715</span><span id="line-2715"> throw new IllegalArgumentException("Unrecognized RegionSpecifierType " + rs.getType());</span> |
| <span class="source-line-no">2716</span><span id="line-2716"> }</span> |
| <span class="source-line-no">2717</span><span id="line-2717"> if (info != null) {</span> |
| <span class="source-line-no">2718</span><span id="line-2718"> return info;</span> |
| <span class="source-line-no">2719</span><span id="line-2719"> }</span> |
| <span class="source-line-no">2720</span><span id="line-2720"> // fall back to a meta scan and check the cache again.</span> |
| <span class="source-line-no">2721</span><span id="line-2721"> try {</span> |
| <span class="source-line-no">2722</span><span id="line-2722"> am.populateRegionStatesFromMeta(encodedRegionName);</span> |
| <span class="source-line-no">2723</span><span id="line-2723"> } catch (IOException e) {</span> |
| <span class="source-line-no">2724</span><span id="line-2724"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2725</span><span id="line-2725"> }</span> |
| <span class="source-line-no">2726</span><span id="line-2726"> return am.getRegionInfo(encodedRegionName);</span> |
| <span class="source-line-no">2727</span><span id="line-2727"> }</span> |
| <span class="source-line-no">2728</span><span id="line-2728"></span> |
| <span class="source-line-no">2729</span><span id="line-2729"> /**</span> |
| <span class="source-line-no">2730</span><span id="line-2730"> * @throws ServiceException If no MasterProcedureExecutor</span> |
| <span class="source-line-no">2731</span><span id="line-2731"> */</span> |
| <span class="source-line-no">2732</span><span id="line-2732"> private void checkMasterProcedureExecutor() throws ServiceException {</span> |
| <span class="source-line-no">2733</span><span id="line-2733"> if (this.server.getMasterProcedureExecutor() == null) {</span> |
| <span class="source-line-no">2734</span><span id="line-2734"> throw new ServiceException("Master's ProcedureExecutor not initialized; retry later");</span> |
| <span class="source-line-no">2735</span><span id="line-2735"> }</span> |
| <span class="source-line-no">2736</span><span id="line-2736"> }</span> |
| <span class="source-line-no">2737</span><span id="line-2737"></span> |
| <span class="source-line-no">2738</span><span id="line-2738"> /**</span> |
| <span class="source-line-no">2739</span><span id="line-2739"> * A 'raw' version of assign that does bulk and can skirt Master state checks if override is set;</span> |
| <span class="source-line-no">2740</span><span id="line-2740"> * i.e. assigns can be forced during Master startup or if RegionState is unclean. Used by HBCK2.</span> |
| <span class="source-line-no">2741</span><span id="line-2741"> */</span> |
| <span class="source-line-no">2742</span><span id="line-2742"> @Override</span> |
| <span class="source-line-no">2743</span><span id="line-2743"> public MasterProtos.AssignsResponse assigns(RpcController controller,</span> |
| <span class="source-line-no">2744</span><span id="line-2744"> MasterProtos.AssignsRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2745</span><span id="line-2745"> checkMasterProcedureExecutor();</span> |
| <span class="source-line-no">2746</span><span id="line-2746"> final ProcedureExecutor<MasterProcedureEnv> pe = server.getMasterProcedureExecutor();</span> |
| <span class="source-line-no">2747</span><span id="line-2747"> final AssignmentManager am = server.getAssignmentManager();</span> |
| <span class="source-line-no">2748</span><span id="line-2748"> MasterProtos.AssignsResponse.Builder responseBuilder =</span> |
| <span class="source-line-no">2749</span><span id="line-2749"> MasterProtos.AssignsResponse.newBuilder();</span> |
| <span class="source-line-no">2750</span><span id="line-2750"> final boolean override = request.getOverride();</span> |
| <span class="source-line-no">2751</span><span id="line-2751"> final boolean force = request.getForce();</span> |
| <span class="source-line-no">2752</span><span id="line-2752"> LOG.info("{} assigns, override={}", server.getClientIdAuditPrefix(), override);</span> |
| <span class="source-line-no">2753</span><span id="line-2753"> for (HBaseProtos.RegionSpecifier rs : request.getRegionList()) {</span> |
| <span class="source-line-no">2754</span><span id="line-2754"> final RegionInfo info = getRegionInfo(rs);</span> |
| <span class="source-line-no">2755</span><span id="line-2755"> if (info == null) {</span> |
| <span class="source-line-no">2756</span><span id="line-2756"> LOG.info("Unknown region {}", rs);</span> |
| <span class="source-line-no">2757</span><span id="line-2757"> continue;</span> |
| <span class="source-line-no">2758</span><span id="line-2758"> }</span> |
| <span class="source-line-no">2759</span><span id="line-2759"> responseBuilder.addPid(Optional.ofNullable(am.createOneAssignProcedure(info, override, force))</span> |
| <span class="source-line-no">2760</span><span id="line-2760"> .map(pe::submitProcedure).orElse(Procedure.NO_PROC_ID));</span> |
| <span class="source-line-no">2761</span><span id="line-2761"> }</span> |
| <span class="source-line-no">2762</span><span id="line-2762"> return responseBuilder.build();</span> |
| <span class="source-line-no">2763</span><span id="line-2763"> }</span> |
| <span class="source-line-no">2764</span><span id="line-2764"></span> |
| <span class="source-line-no">2765</span><span id="line-2765"> /**</span> |
| <span class="source-line-no">2766</span><span id="line-2766"> * A 'raw' version of unassign that does bulk and can skirt Master state checks if override is</span> |
| <span class="source-line-no">2767</span><span id="line-2767"> * set; i.e. unassigns can be forced during Master startup or if RegionState is unclean. Used by</span> |
| <span class="source-line-no">2768</span><span id="line-2768"> * HBCK2.</span> |
| <span class="source-line-no">2769</span><span id="line-2769"> */</span> |
| <span class="source-line-no">2770</span><span id="line-2770"> @Override</span> |
| <span class="source-line-no">2771</span><span id="line-2771"> public MasterProtos.UnassignsResponse unassigns(RpcController controller,</span> |
| <span class="source-line-no">2772</span><span id="line-2772"> MasterProtos.UnassignsRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2773</span><span id="line-2773"> checkMasterProcedureExecutor();</span> |
| <span class="source-line-no">2774</span><span id="line-2774"> final ProcedureExecutor<MasterProcedureEnv> pe = server.getMasterProcedureExecutor();</span> |
| <span class="source-line-no">2775</span><span id="line-2775"> final AssignmentManager am = server.getAssignmentManager();</span> |
| <span class="source-line-no">2776</span><span id="line-2776"> MasterProtos.UnassignsResponse.Builder responseBuilder =</span> |
| <span class="source-line-no">2777</span><span id="line-2777"> MasterProtos.UnassignsResponse.newBuilder();</span> |
| <span class="source-line-no">2778</span><span id="line-2778"> final boolean override = request.getOverride();</span> |
| <span class="source-line-no">2779</span><span id="line-2779"> final boolean force = request.getForce();</span> |
| <span class="source-line-no">2780</span><span id="line-2780"> LOG.info("{} unassigns, override={}", server.getClientIdAuditPrefix(), override);</span> |
| <span class="source-line-no">2781</span><span id="line-2781"> for (HBaseProtos.RegionSpecifier rs : request.getRegionList()) {</span> |
| <span class="source-line-no">2782</span><span id="line-2782"> final RegionInfo info = getRegionInfo(rs);</span> |
| <span class="source-line-no">2783</span><span id="line-2783"> if (info == null) {</span> |
| <span class="source-line-no">2784</span><span id="line-2784"> LOG.info("Unknown region {}", rs);</span> |
| <span class="source-line-no">2785</span><span id="line-2785"> continue;</span> |
| <span class="source-line-no">2786</span><span id="line-2786"> }</span> |
| <span class="source-line-no">2787</span><span id="line-2787"> responseBuilder</span> |
| <span class="source-line-no">2788</span><span id="line-2788"> .addPid(Optional.ofNullable(am.createOneUnassignProcedure(info, override, force))</span> |
| <span class="source-line-no">2789</span><span id="line-2789"> .map(pe::submitProcedure).orElse(Procedure.NO_PROC_ID));</span> |
| <span class="source-line-no">2790</span><span id="line-2790"> }</span> |
| <span class="source-line-no">2791</span><span id="line-2791"> return responseBuilder.build();</span> |
| <span class="source-line-no">2792</span><span id="line-2792"> }</span> |
| <span class="source-line-no">2793</span><span id="line-2793"></span> |
| <span class="source-line-no">2794</span><span id="line-2794"> /**</span> |
| <span class="source-line-no">2795</span><span id="line-2795"> * Bypass specified procedure to completion. Procedure is marked completed but no actual work is</span> |
| <span class="source-line-no">2796</span><span id="line-2796"> * done from the current state/ step onwards. Parents of the procedure are also marked for bypass.</span> |
| <span class="source-line-no">2797</span><span id="line-2797"> * NOTE: this is a dangerous operation and may be used to unstuck buggy procedures. This may leave</span> |
| <span class="source-line-no">2798</span><span id="line-2798"> * system in incoherent state. This may need to be followed by some cleanup steps/ actions by</span> |
| <span class="source-line-no">2799</span><span id="line-2799"> * operator.</span> |
| <span class="source-line-no">2800</span><span id="line-2800"> * @return BypassProcedureToCompletionResponse indicating success or failure</span> |
| <span class="source-line-no">2801</span><span id="line-2801"> */</span> |
| <span class="source-line-no">2802</span><span id="line-2802"> @Override</span> |
| <span class="source-line-no">2803</span><span id="line-2803"> public MasterProtos.BypassProcedureResponse bypassProcedure(RpcController controller,</span> |
| <span class="source-line-no">2804</span><span id="line-2804"> MasterProtos.BypassProcedureRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2805</span><span id="line-2805"> try {</span> |
| <span class="source-line-no">2806</span><span id="line-2806"> LOG.info("{} bypass procedures={}, waitTime={}, override={}, recursive={}",</span> |
| <span class="source-line-no">2807</span><span id="line-2807"> server.getClientIdAuditPrefix(), request.getProcIdList(), request.getWaitTime(),</span> |
| <span class="source-line-no">2808</span><span id="line-2808"> request.getOverride(), request.getRecursive());</span> |
| <span class="source-line-no">2809</span><span id="line-2809"> List<Boolean> ret =</span> |
| <span class="source-line-no">2810</span><span id="line-2810"> server.getMasterProcedureExecutor().bypassProcedure(request.getProcIdList(),</span> |
| <span class="source-line-no">2811</span><span id="line-2811"> request.getWaitTime(), request.getOverride(), request.getRecursive());</span> |
| <span class="source-line-no">2812</span><span id="line-2812"> return MasterProtos.BypassProcedureResponse.newBuilder().addAllBypassed(ret).build();</span> |
| <span class="source-line-no">2813</span><span id="line-2813"> } catch (IOException e) {</span> |
| <span class="source-line-no">2814</span><span id="line-2814"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2815</span><span id="line-2815"> }</span> |
| <span class="source-line-no">2816</span><span id="line-2816"> }</span> |
| <span class="source-line-no">2817</span><span id="line-2817"></span> |
| <span class="source-line-no">2818</span><span id="line-2818"> @Override</span> |
| <span class="source-line-no">2819</span><span id="line-2819"> public MasterProtos.ScheduleServerCrashProcedureResponse scheduleServerCrashProcedure(</span> |
| <span class="source-line-no">2820</span><span id="line-2820"> RpcController controller, MasterProtos.ScheduleServerCrashProcedureRequest request)</span> |
| <span class="source-line-no">2821</span><span id="line-2821"> throws ServiceException {</span> |
| <span class="source-line-no">2822</span><span id="line-2822"> List<Long> pids = new ArrayList<>();</span> |
| <span class="source-line-no">2823</span><span id="line-2823"> for (HBaseProtos.ServerName sn : request.getServerNameList()) {</span> |
| <span class="source-line-no">2824</span><span id="line-2824"> ServerName serverName = ProtobufUtil.toServerName(sn);</span> |
| <span class="source-line-no">2825</span><span id="line-2825"> LOG.info("{} schedule ServerCrashProcedure for {}", this.server.getClientIdAuditPrefix(),</span> |
| <span class="source-line-no">2826</span><span id="line-2826"> serverName);</span> |
| <span class="source-line-no">2827</span><span id="line-2827"> if (shouldSubmitSCP(serverName)) {</span> |
| <span class="source-line-no">2828</span><span id="line-2828"> pids.add(this.server.getServerManager().expireServer(serverName, true));</span> |
| <span class="source-line-no">2829</span><span id="line-2829"> } else {</span> |
| <span class="source-line-no">2830</span><span id="line-2830"> pids.add(Procedure.NO_PROC_ID);</span> |
| <span class="source-line-no">2831</span><span id="line-2831"> }</span> |
| <span class="source-line-no">2832</span><span id="line-2832"> }</span> |
| <span class="source-line-no">2833</span><span id="line-2833"> return MasterProtos.ScheduleServerCrashProcedureResponse.newBuilder().addAllPid(pids).build();</span> |
| <span class="source-line-no">2834</span><span id="line-2834"> }</span> |
| <span class="source-line-no">2835</span><span id="line-2835"></span> |
| <span class="source-line-no">2836</span><span id="line-2836"> @Override</span> |
| <span class="source-line-no">2837</span><span id="line-2837"> public MasterProtos.ScheduleSCPsForUnknownServersResponse scheduleSCPsForUnknownServers(</span> |
| <span class="source-line-no">2838</span><span id="line-2838"> RpcController controller, MasterProtos.ScheduleSCPsForUnknownServersRequest request)</span> |
| <span class="source-line-no">2839</span><span id="line-2839"> throws ServiceException {</span> |
| <span class="source-line-no">2840</span><span id="line-2840"> List<Long> pids = new ArrayList<>();</span> |
| <span class="source-line-no">2841</span><span id="line-2841"> final Set<ServerName> serverNames = server.getAssignmentManager().getRegionStates()</span> |
| <span class="source-line-no">2842</span><span id="line-2842"> .getRegionStates().stream().map(RegionState::getServerName).collect(Collectors.toSet());</span> |
| <span class="source-line-no">2843</span><span id="line-2843"></span> |
| <span class="source-line-no">2844</span><span id="line-2844"> final Set<ServerName> unknownServerNames = serverNames.stream()</span> |
| <span class="source-line-no">2845</span><span id="line-2845"> .filter(sn -> server.getServerManager().isServerUnknown(sn)).collect(Collectors.toSet());</span> |
| <span class="source-line-no">2846</span><span id="line-2846"></span> |
| <span class="source-line-no">2847</span><span id="line-2847"> for (ServerName sn : unknownServerNames) {</span> |
| <span class="source-line-no">2848</span><span id="line-2848"> LOG.info("{} schedule ServerCrashProcedure for unknown {}",</span> |
| <span class="source-line-no">2849</span><span id="line-2849"> this.server.getClientIdAuditPrefix(), sn);</span> |
| <span class="source-line-no">2850</span><span id="line-2850"> if (shouldSubmitSCP(sn)) {</span> |
| <span class="source-line-no">2851</span><span id="line-2851"> pids.add(this.server.getServerManager().expireServer(sn, true));</span> |
| <span class="source-line-no">2852</span><span id="line-2852"> } else {</span> |
| <span class="source-line-no">2853</span><span id="line-2853"> pids.add(Procedure.NO_PROC_ID);</span> |
| <span class="source-line-no">2854</span><span id="line-2854"> }</span> |
| <span class="source-line-no">2855</span><span id="line-2855"> }</span> |
| <span class="source-line-no">2856</span><span id="line-2856"> return MasterProtos.ScheduleSCPsForUnknownServersResponse.newBuilder().addAllPid(pids).build();</span> |
| <span class="source-line-no">2857</span><span id="line-2857"> }</span> |
| <span class="source-line-no">2858</span><span id="line-2858"></span> |
| <span class="source-line-no">2859</span><span id="line-2859"> @Override</span> |
| <span class="source-line-no">2860</span><span id="line-2860"> public FixMetaResponse fixMeta(RpcController controller, FixMetaRequest request)</span> |
| <span class="source-line-no">2861</span><span id="line-2861"> throws ServiceException {</span> |
| <span class="source-line-no">2862</span><span id="line-2862"> rpcPreCheck("fixMeta");</span> |
| <span class="source-line-no">2863</span><span id="line-2863"> try {</span> |
| <span class="source-line-no">2864</span><span id="line-2864"> MetaFixer mf = new MetaFixer(this.server);</span> |
| <span class="source-line-no">2865</span><span id="line-2865"> mf.fix();</span> |
| <span class="source-line-no">2866</span><span id="line-2866"> return FixMetaResponse.newBuilder().build();</span> |
| <span class="source-line-no">2867</span><span id="line-2867"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">2868</span><span id="line-2868"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">2869</span><span id="line-2869"> }</span> |
| <span class="source-line-no">2870</span><span id="line-2870"> }</span> |
| <span class="source-line-no">2871</span><span id="line-2871"></span> |
| <span class="source-line-no">2872</span><span id="line-2872"> @Override</span> |
| <span class="source-line-no">2873</span><span id="line-2873"> public SwitchRpcThrottleResponse switchRpcThrottle(RpcController controller,</span> |
| <span class="source-line-no">2874</span><span id="line-2874"> SwitchRpcThrottleRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2875</span><span id="line-2875"> try {</span> |
| <span class="source-line-no">2876</span><span id="line-2876"> server.checkInitialized();</span> |
| <span class="source-line-no">2877</span><span id="line-2877"> return server.getMasterQuotaManager().switchRpcThrottle(request);</span> |
| <span class="source-line-no">2878</span><span id="line-2878"> } catch (Exception e) {</span> |
| <span class="source-line-no">2879</span><span id="line-2879"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2880</span><span id="line-2880"> }</span> |
| <span class="source-line-no">2881</span><span id="line-2881"> }</span> |
| <span class="source-line-no">2882</span><span id="line-2882"></span> |
| <span class="source-line-no">2883</span><span id="line-2883"> @Override</span> |
| <span class="source-line-no">2884</span><span id="line-2884"> public MasterProtos.IsRpcThrottleEnabledResponse isRpcThrottleEnabled(RpcController controller,</span> |
| <span class="source-line-no">2885</span><span id="line-2885"> MasterProtos.IsRpcThrottleEnabledRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2886</span><span id="line-2886"> try {</span> |
| <span class="source-line-no">2887</span><span id="line-2887"> server.checkInitialized();</span> |
| <span class="source-line-no">2888</span><span id="line-2888"> return server.getMasterQuotaManager().isRpcThrottleEnabled(request);</span> |
| <span class="source-line-no">2889</span><span id="line-2889"> } catch (Exception e) {</span> |
| <span class="source-line-no">2890</span><span id="line-2890"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2891</span><span id="line-2891"> }</span> |
| <span class="source-line-no">2892</span><span id="line-2892"> }</span> |
| <span class="source-line-no">2893</span><span id="line-2893"></span> |
| <span class="source-line-no">2894</span><span id="line-2894"> @Override</span> |
| <span class="source-line-no">2895</span><span id="line-2895"> public SwitchExceedThrottleQuotaResponse switchExceedThrottleQuota(RpcController controller,</span> |
| <span class="source-line-no">2896</span><span id="line-2896"> SwitchExceedThrottleQuotaRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2897</span><span id="line-2897"> try {</span> |
| <span class="source-line-no">2898</span><span id="line-2898"> server.checkInitialized();</span> |
| <span class="source-line-no">2899</span><span id="line-2899"> return server.getMasterQuotaManager().switchExceedThrottleQuota(request);</span> |
| <span class="source-line-no">2900</span><span id="line-2900"> } catch (Exception e) {</span> |
| <span class="source-line-no">2901</span><span id="line-2901"> throw new ServiceException(e);</span> |
| <span class="source-line-no">2902</span><span id="line-2902"> }</span> |
| <span class="source-line-no">2903</span><span id="line-2903"> }</span> |
| <span class="source-line-no">2904</span><span id="line-2904"></span> |
| <span class="source-line-no">2905</span><span id="line-2905"> @Override</span> |
| <span class="source-line-no">2906</span><span id="line-2906"> public GrantResponse grant(RpcController controller, GrantRequest request)</span> |
| <span class="source-line-no">2907</span><span id="line-2907"> throws ServiceException {</span> |
| <span class="source-line-no">2908</span><span id="line-2908"> try {</span> |
| <span class="source-line-no">2909</span><span id="line-2909"> server.checkInitialized();</span> |
| <span class="source-line-no">2910</span><span id="line-2910"> if (server.cpHost != null && hasAccessControlServiceCoprocessor(server.cpHost)) {</span> |
| <span class="source-line-no">2911</span><span id="line-2911"> final UserPermission perm =</span> |
| <span class="source-line-no">2912</span><span id="line-2912"> ShadedAccessControlUtil.toUserPermission(request.getUserPermission());</span> |
| <span class="source-line-no">2913</span><span id="line-2913"> boolean mergeExistingPermissions = request.getMergeExistingPermissions();</span> |
| <span class="source-line-no">2914</span><span id="line-2914"> server.cpHost.preGrant(perm, mergeExistingPermissions);</span> |
| <span class="source-line-no">2915</span><span id="line-2915"> try (Table table = server.getConnection().getTable(PermissionStorage.ACL_TABLE_NAME)) {</span> |
| <span class="source-line-no">2916</span><span id="line-2916"> PermissionStorage.addUserPermission(getConfiguration(), perm, table,</span> |
| <span class="source-line-no">2917</span><span id="line-2917"> mergeExistingPermissions);</span> |
| <span class="source-line-no">2918</span><span id="line-2918"> }</span> |
| <span class="source-line-no">2919</span><span id="line-2919"> server.cpHost.postGrant(perm, mergeExistingPermissions);</span> |
| <span class="source-line-no">2920</span><span id="line-2920"> return GrantResponse.getDefaultInstance();</span> |
| <span class="source-line-no">2921</span><span id="line-2921"> } else {</span> |
| <span class="source-line-no">2922</span><span id="line-2922"> throw new DoNotRetryIOException(</span> |
| <span class="source-line-no">2923</span><span id="line-2923"> new UnsupportedOperationException(AccessController.class.getName() + " is not loaded"));</span> |
| <span class="source-line-no">2924</span><span id="line-2924"> }</span> |
| <span class="source-line-no">2925</span><span id="line-2925"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">2926</span><span id="line-2926"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">2927</span><span id="line-2927"> }</span> |
| <span class="source-line-no">2928</span><span id="line-2928"> }</span> |
| <span class="source-line-no">2929</span><span id="line-2929"></span> |
| <span class="source-line-no">2930</span><span id="line-2930"> @Override</span> |
| <span class="source-line-no">2931</span><span id="line-2931"> public RevokeResponse revoke(RpcController controller, RevokeRequest request)</span> |
| <span class="source-line-no">2932</span><span id="line-2932"> throws ServiceException {</span> |
| <span class="source-line-no">2933</span><span id="line-2933"> try {</span> |
| <span class="source-line-no">2934</span><span id="line-2934"> server.checkInitialized();</span> |
| <span class="source-line-no">2935</span><span id="line-2935"> if (server.cpHost != null && hasAccessControlServiceCoprocessor(server.cpHost)) {</span> |
| <span class="source-line-no">2936</span><span id="line-2936"> final UserPermission userPermission =</span> |
| <span class="source-line-no">2937</span><span id="line-2937"> ShadedAccessControlUtil.toUserPermission(request.getUserPermission());</span> |
| <span class="source-line-no">2938</span><span id="line-2938"> server.cpHost.preRevoke(userPermission);</span> |
| <span class="source-line-no">2939</span><span id="line-2939"> try (Table table = server.getConnection().getTable(PermissionStorage.ACL_TABLE_NAME)) {</span> |
| <span class="source-line-no">2940</span><span id="line-2940"> PermissionStorage.removeUserPermission(server.getConfiguration(), userPermission, table);</span> |
| <span class="source-line-no">2941</span><span id="line-2941"> }</span> |
| <span class="source-line-no">2942</span><span id="line-2942"> server.cpHost.postRevoke(userPermission);</span> |
| <span class="source-line-no">2943</span><span id="line-2943"> return RevokeResponse.getDefaultInstance();</span> |
| <span class="source-line-no">2944</span><span id="line-2944"> } else {</span> |
| <span class="source-line-no">2945</span><span id="line-2945"> throw new DoNotRetryIOException(</span> |
| <span class="source-line-no">2946</span><span id="line-2946"> new UnsupportedOperationException(AccessController.class.getName() + " is not loaded"));</span> |
| <span class="source-line-no">2947</span><span id="line-2947"> }</span> |
| <span class="source-line-no">2948</span><span id="line-2948"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">2949</span><span id="line-2949"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">2950</span><span id="line-2950"> }</span> |
| <span class="source-line-no">2951</span><span id="line-2951"> }</span> |
| <span class="source-line-no">2952</span><span id="line-2952"></span> |
| <span class="source-line-no">2953</span><span id="line-2953"> @Override</span> |
| <span class="source-line-no">2954</span><span id="line-2954"> public GetUserPermissionsResponse getUserPermissions(RpcController controller,</span> |
| <span class="source-line-no">2955</span><span id="line-2955"> GetUserPermissionsRequest request) throws ServiceException {</span> |
| <span class="source-line-no">2956</span><span id="line-2956"> try {</span> |
| <span class="source-line-no">2957</span><span id="line-2957"> server.checkInitialized();</span> |
| <span class="source-line-no">2958</span><span id="line-2958"> if (server.cpHost != null && hasAccessControlServiceCoprocessor(server.cpHost)) {</span> |
| <span class="source-line-no">2959</span><span id="line-2959"> final String userName = request.hasUserName() ? request.getUserName().toStringUtf8() : null;</span> |
| <span class="source-line-no">2960</span><span id="line-2960"> String namespace =</span> |
| <span class="source-line-no">2961</span><span id="line-2961"> request.hasNamespaceName() ? request.getNamespaceName().toStringUtf8() : null;</span> |
| <span class="source-line-no">2962</span><span id="line-2962"> TableName table =</span> |
| <span class="source-line-no">2963</span><span id="line-2963"> request.hasTableName() ? ProtobufUtil.toTableName(request.getTableName()) : null;</span> |
| <span class="source-line-no">2964</span><span id="line-2964"> byte[] cf = request.hasColumnFamily() ? request.getColumnFamily().toByteArray() : null;</span> |
| <span class="source-line-no">2965</span><span id="line-2965"> byte[] cq =</span> |
| <span class="source-line-no">2966</span><span id="line-2966"> request.hasColumnQualifier() ? request.getColumnQualifier().toByteArray() : null;</span> |
| <span class="source-line-no">2967</span><span id="line-2967"> Type permissionType = request.hasType() ? request.getType() : null;</span> |
| <span class="source-line-no">2968</span><span id="line-2968"> server.getMasterCoprocessorHost().preGetUserPermissions(userName, namespace, table, cf, cq);</span> |
| <span class="source-line-no">2969</span><span id="line-2969"></span> |
| <span class="source-line-no">2970</span><span id="line-2970"> List<UserPermission> perms = null;</span> |
| <span class="source-line-no">2971</span><span id="line-2971"> if (permissionType == Type.Table) {</span> |
| <span class="source-line-no">2972</span><span id="line-2972"> boolean filter = (cf != null || userName != null) ? true : false;</span> |
| <span class="source-line-no">2973</span><span id="line-2973"> perms = PermissionStorage.getUserTablePermissions(server.getConfiguration(), table, cf,</span> |
| <span class="source-line-no">2974</span><span id="line-2974"> cq, userName, filter);</span> |
| <span class="source-line-no">2975</span><span id="line-2975"> } else if (permissionType == Type.Namespace) {</span> |
| <span class="source-line-no">2976</span><span id="line-2976"> perms = PermissionStorage.getUserNamespacePermissions(server.getConfiguration(),</span> |
| <span class="source-line-no">2977</span><span id="line-2977"> namespace, userName, userName != null ? true : false);</span> |
| <span class="source-line-no">2978</span><span id="line-2978"> } else {</span> |
| <span class="source-line-no">2979</span><span id="line-2979"> perms = PermissionStorage.getUserPermissions(server.getConfiguration(), null, null, null,</span> |
| <span class="source-line-no">2980</span><span id="line-2980"> userName, userName != null ? true : false);</span> |
| <span class="source-line-no">2981</span><span id="line-2981"> // Skip super users when filter user is specified</span> |
| <span class="source-line-no">2982</span><span id="line-2982"> if (userName == null) {</span> |
| <span class="source-line-no">2983</span><span id="line-2983"> // Adding superusers explicitly to the result set as PermissionStorage do not store</span> |
| <span class="source-line-no">2984</span><span id="line-2984"> // them. Also using acl as table name to be inline with the results of global admin and</span> |
| <span class="source-line-no">2985</span><span id="line-2985"> // will help in avoiding any leakage of information about being superusers.</span> |
| <span class="source-line-no">2986</span><span id="line-2986"> for (String user : Superusers.getSuperUsers()) {</span> |
| <span class="source-line-no">2987</span><span id="line-2987"> perms.add(new UserPermission(user,</span> |
| <span class="source-line-no">2988</span><span id="line-2988"> Permission.newBuilder().withActions(Action.values()).build()));</span> |
| <span class="source-line-no">2989</span><span id="line-2989"> }</span> |
| <span class="source-line-no">2990</span><span id="line-2990"> }</span> |
| <span class="source-line-no">2991</span><span id="line-2991"> }</span> |
| <span class="source-line-no">2992</span><span id="line-2992"></span> |
| <span class="source-line-no">2993</span><span id="line-2993"> server.getMasterCoprocessorHost().postGetUserPermissions(userName, namespace, table, cf,</span> |
| <span class="source-line-no">2994</span><span id="line-2994"> cq);</span> |
| <span class="source-line-no">2995</span><span id="line-2995"> AccessControlProtos.GetUserPermissionsResponse response =</span> |
| <span class="source-line-no">2996</span><span id="line-2996"> ShadedAccessControlUtil.buildGetUserPermissionsResponse(perms);</span> |
| <span class="source-line-no">2997</span><span id="line-2997"> return response;</span> |
| <span class="source-line-no">2998</span><span id="line-2998"> } else {</span> |
| <span class="source-line-no">2999</span><span id="line-2999"> throw new DoNotRetryIOException(</span> |
| <span class="source-line-no">3000</span><span id="line-3000"> new UnsupportedOperationException(AccessController.class.getName() + " is not loaded"));</span> |
| <span class="source-line-no">3001</span><span id="line-3001"> }</span> |
| <span class="source-line-no">3002</span><span id="line-3002"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">3003</span><span id="line-3003"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">3004</span><span id="line-3004"> }</span> |
| <span class="source-line-no">3005</span><span id="line-3005"> }</span> |
| <span class="source-line-no">3006</span><span id="line-3006"></span> |
| <span class="source-line-no">3007</span><span id="line-3007"> @Override</span> |
| <span class="source-line-no">3008</span><span id="line-3008"> public HasUserPermissionsResponse hasUserPermissions(RpcController controller,</span> |
| <span class="source-line-no">3009</span><span id="line-3009"> HasUserPermissionsRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3010</span><span id="line-3010"> try {</span> |
| <span class="source-line-no">3011</span><span id="line-3011"> server.checkInitialized();</span> |
| <span class="source-line-no">3012</span><span id="line-3012"> if (server.cpHost != null && hasAccessControlServiceCoprocessor(server.cpHost)) {</span> |
| <span class="source-line-no">3013</span><span id="line-3013"> User caller = RpcServer.getRequestUser().orElse(null);</span> |
| <span class="source-line-no">3014</span><span id="line-3014"> String userName =</span> |
| <span class="source-line-no">3015</span><span id="line-3015"> request.hasUserName() ? request.getUserName().toStringUtf8() : caller.getShortName();</span> |
| <span class="source-line-no">3016</span><span id="line-3016"> List<Permission> permissions = new ArrayList<>();</span> |
| <span class="source-line-no">3017</span><span id="line-3017"> for (int i = 0; i < request.getPermissionCount(); i++) {</span> |
| <span class="source-line-no">3018</span><span id="line-3018"> permissions.add(ShadedAccessControlUtil.toPermission(request.getPermission(i)));</span> |
| <span class="source-line-no">3019</span><span id="line-3019"> }</span> |
| <span class="source-line-no">3020</span><span id="line-3020"> server.getMasterCoprocessorHost().preHasUserPermissions(userName, permissions);</span> |
| <span class="source-line-no">3021</span><span id="line-3021"> if (!caller.getShortName().equals(userName)) {</span> |
| <span class="source-line-no">3022</span><span id="line-3022"> List<String> groups = AccessChecker.getUserGroups(userName);</span> |
| <span class="source-line-no">3023</span><span id="line-3023"> caller = new InputUser(userName, groups.toArray(new String[groups.size()]));</span> |
| <span class="source-line-no">3024</span><span id="line-3024"> }</span> |
| <span class="source-line-no">3025</span><span id="line-3025"> List<Boolean> hasUserPermissions = new ArrayList<>();</span> |
| <span class="source-line-no">3026</span><span id="line-3026"> if (getAccessChecker() != null) {</span> |
| <span class="source-line-no">3027</span><span id="line-3027"> for (Permission permission : permissions) {</span> |
| <span class="source-line-no">3028</span><span id="line-3028"> boolean hasUserPermission =</span> |
| <span class="source-line-no">3029</span><span id="line-3029"> getAccessChecker().hasUserPermission(caller, "hasUserPermissions", permission);</span> |
| <span class="source-line-no">3030</span><span id="line-3030"> hasUserPermissions.add(hasUserPermission);</span> |
| <span class="source-line-no">3031</span><span id="line-3031"> }</span> |
| <span class="source-line-no">3032</span><span id="line-3032"> } else {</span> |
| <span class="source-line-no">3033</span><span id="line-3033"> for (int i = 0; i < permissions.size(); i++) {</span> |
| <span class="source-line-no">3034</span><span id="line-3034"> hasUserPermissions.add(true);</span> |
| <span class="source-line-no">3035</span><span id="line-3035"> }</span> |
| <span class="source-line-no">3036</span><span id="line-3036"> }</span> |
| <span class="source-line-no">3037</span><span id="line-3037"> server.getMasterCoprocessorHost().postHasUserPermissions(userName, permissions);</span> |
| <span class="source-line-no">3038</span><span id="line-3038"> HasUserPermissionsResponse.Builder builder =</span> |
| <span class="source-line-no">3039</span><span id="line-3039"> HasUserPermissionsResponse.newBuilder().addAllHasUserPermission(hasUserPermissions);</span> |
| <span class="source-line-no">3040</span><span id="line-3040"> return builder.build();</span> |
| <span class="source-line-no">3041</span><span id="line-3041"> } else {</span> |
| <span class="source-line-no">3042</span><span id="line-3042"> throw new DoNotRetryIOException(</span> |
| <span class="source-line-no">3043</span><span id="line-3043"> new UnsupportedOperationException(AccessController.class.getName() + " is not loaded"));</span> |
| <span class="source-line-no">3044</span><span id="line-3044"> }</span> |
| <span class="source-line-no">3045</span><span id="line-3045"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">3046</span><span id="line-3046"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">3047</span><span id="line-3047"> }</span> |
| <span class="source-line-no">3048</span><span id="line-3048"> }</span> |
| <span class="source-line-no">3049</span><span id="line-3049"></span> |
| <span class="source-line-no">3050</span><span id="line-3050"> private boolean shouldSubmitSCP(ServerName serverName) {</span> |
| <span class="source-line-no">3051</span><span id="line-3051"> // check if there is already a SCP of this server running</span> |
| <span class="source-line-no">3052</span><span id="line-3052"> List<Procedure<MasterProcedureEnv>> procedures =</span> |
| <span class="source-line-no">3053</span><span id="line-3053"> server.getMasterProcedureExecutor().getProcedures();</span> |
| <span class="source-line-no">3054</span><span id="line-3054"> for (Procedure<MasterProcedureEnv> procedure : procedures) {</span> |
| <span class="source-line-no">3055</span><span id="line-3055"> if (procedure instanceof ServerCrashProcedure) {</span> |
| <span class="source-line-no">3056</span><span id="line-3056"> if (</span> |
| <span class="source-line-no">3057</span><span id="line-3057"> serverName.compareTo(((ServerCrashProcedure) procedure).getServerName()) == 0</span> |
| <span class="source-line-no">3058</span><span id="line-3058"> && !procedure.isFinished()</span> |
| <span class="source-line-no">3059</span><span id="line-3059"> ) {</span> |
| <span class="source-line-no">3060</span><span id="line-3060"> LOG.info("there is already a SCP of this server {} running, pid {}", serverName,</span> |
| <span class="source-line-no">3061</span><span id="line-3061"> procedure.getProcId());</span> |
| <span class="source-line-no">3062</span><span id="line-3062"> return false;</span> |
| <span class="source-line-no">3063</span><span id="line-3063"> }</span> |
| <span class="source-line-no">3064</span><span id="line-3064"> }</span> |
| <span class="source-line-no">3065</span><span id="line-3065"> }</span> |
| <span class="source-line-no">3066</span><span id="line-3066"> return true;</span> |
| <span class="source-line-no">3067</span><span id="line-3067"> }</span> |
| <span class="source-line-no">3068</span><span id="line-3068"></span> |
| <span class="source-line-no">3069</span><span id="line-3069"> @Override</span> |
| <span class="source-line-no">3070</span><span id="line-3070"> public GetRSGroupInfoResponse getRSGroupInfo(RpcController controller,</span> |
| <span class="source-line-no">3071</span><span id="line-3071"> GetRSGroupInfoRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3072</span><span id="line-3072"> String groupName = request.getRSGroupName();</span> |
| <span class="source-line-no">3073</span><span id="line-3073"> LOG.info(</span> |
| <span class="source-line-no">3074</span><span id="line-3074"> server.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, group=" + groupName);</span> |
| <span class="source-line-no">3075</span><span id="line-3075"> try {</span> |
| <span class="source-line-no">3076</span><span id="line-3076"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3077</span><span id="line-3077"> server.getMasterCoprocessorHost().preGetRSGroupInfo(groupName);</span> |
| <span class="source-line-no">3078</span><span id="line-3078"> }</span> |
| <span class="source-line-no">3079</span><span id="line-3079"> RSGroupInfo rsGroupInfo = server.getRSGroupInfoManager().getRSGroup(groupName);</span> |
| <span class="source-line-no">3080</span><span id="line-3080"> GetRSGroupInfoResponse resp;</span> |
| <span class="source-line-no">3081</span><span id="line-3081"> if (rsGroupInfo != null) {</span> |
| <span class="source-line-no">3082</span><span id="line-3082"> resp = GetRSGroupInfoResponse.newBuilder()</span> |
| <span class="source-line-no">3083</span><span id="line-3083"> .setRSGroupInfo(ProtobufUtil.toProtoGroupInfo(rsGroupInfo)).build();</span> |
| <span class="source-line-no">3084</span><span id="line-3084"> } else {</span> |
| <span class="source-line-no">3085</span><span id="line-3085"> resp = GetRSGroupInfoResponse.getDefaultInstance();</span> |
| <span class="source-line-no">3086</span><span id="line-3086"> }</span> |
| <span class="source-line-no">3087</span><span id="line-3087"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3088</span><span id="line-3088"> server.getMasterCoprocessorHost().postGetRSGroupInfo(groupName);</span> |
| <span class="source-line-no">3089</span><span id="line-3089"> }</span> |
| <span class="source-line-no">3090</span><span id="line-3090"> return resp;</span> |
| <span class="source-line-no">3091</span><span id="line-3091"> } catch (IOException e) {</span> |
| <span class="source-line-no">3092</span><span id="line-3092"> throw new ServiceException(e);</span> |
| <span class="source-line-no">3093</span><span id="line-3093"> }</span> |
| <span class="source-line-no">3094</span><span id="line-3094"> }</span> |
| <span class="source-line-no">3095</span><span id="line-3095"></span> |
| <span class="source-line-no">3096</span><span id="line-3096"> @Override</span> |
| <span class="source-line-no">3097</span><span id="line-3097"> public GetRSGroupInfoOfTableResponse getRSGroupInfoOfTable(RpcController controller,</span> |
| <span class="source-line-no">3098</span><span id="line-3098"> GetRSGroupInfoOfTableRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3099</span><span id="line-3099"> TableName tableName = ProtobufUtil.toTableName(request.getTableName());</span> |
| <span class="source-line-no">3100</span><span id="line-3100"> LOG.info(</span> |
| <span class="source-line-no">3101</span><span id="line-3101"> server.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, table=" + tableName);</span> |
| <span class="source-line-no">3102</span><span id="line-3102"> try {</span> |
| <span class="source-line-no">3103</span><span id="line-3103"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3104</span><span id="line-3104"> server.getMasterCoprocessorHost().preGetRSGroupInfoOfTable(tableName);</span> |
| <span class="source-line-no">3105</span><span id="line-3105"> }</span> |
| <span class="source-line-no">3106</span><span id="line-3106"> GetRSGroupInfoOfTableResponse resp;</span> |
| <span class="source-line-no">3107</span><span id="line-3107"> TableDescriptor td = server.getTableDescriptors().get(tableName);</span> |
| <span class="source-line-no">3108</span><span id="line-3108"> if (td == null) {</span> |
| <span class="source-line-no">3109</span><span id="line-3109"> resp = GetRSGroupInfoOfTableResponse.getDefaultInstance();</span> |
| <span class="source-line-no">3110</span><span id="line-3110"> } else {</span> |
| <span class="source-line-no">3111</span><span id="line-3111"> RSGroupInfo rsGroupInfo =</span> |
| <span class="source-line-no">3112</span><span id="line-3112"> RSGroupUtil.getRSGroupInfo(server, server.getRSGroupInfoManager(), tableName)</span> |
| <span class="source-line-no">3113</span><span id="line-3113"> .orElse(server.getRSGroupInfoManager().getRSGroup(RSGroupInfo.DEFAULT_GROUP));</span> |
| <span class="source-line-no">3114</span><span id="line-3114"> resp = GetRSGroupInfoOfTableResponse.newBuilder()</span> |
| <span class="source-line-no">3115</span><span id="line-3115"> .setRSGroupInfo(ProtobufUtil.toProtoGroupInfo(rsGroupInfo)).build();</span> |
| <span class="source-line-no">3116</span><span id="line-3116"> }</span> |
| <span class="source-line-no">3117</span><span id="line-3117"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3118</span><span id="line-3118"> server.getMasterCoprocessorHost().postGetRSGroupInfoOfTable(tableName);</span> |
| <span class="source-line-no">3119</span><span id="line-3119"> }</span> |
| <span class="source-line-no">3120</span><span id="line-3120"> return resp;</span> |
| <span class="source-line-no">3121</span><span id="line-3121"> } catch (IOException e) {</span> |
| <span class="source-line-no">3122</span><span id="line-3122"> throw new ServiceException(e);</span> |
| <span class="source-line-no">3123</span><span id="line-3123"> }</span> |
| <span class="source-line-no">3124</span><span id="line-3124"> }</span> |
| <span class="source-line-no">3125</span><span id="line-3125"></span> |
| <span class="source-line-no">3126</span><span id="line-3126"> @Override</span> |
| <span class="source-line-no">3127</span><span id="line-3127"> public GetRSGroupInfoOfServerResponse getRSGroupInfoOfServer(RpcController controller,</span> |
| <span class="source-line-no">3128</span><span id="line-3128"> GetRSGroupInfoOfServerRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3129</span><span id="line-3129"> Address hp =</span> |
| <span class="source-line-no">3130</span><span id="line-3130"> Address.fromParts(request.getServer().getHostName(), request.getServer().getPort());</span> |
| <span class="source-line-no">3131</span><span id="line-3131"> LOG.info(server.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, server=" + hp);</span> |
| <span class="source-line-no">3132</span><span id="line-3132"> try {</span> |
| <span class="source-line-no">3133</span><span id="line-3133"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3134</span><span id="line-3134"> server.getMasterCoprocessorHost().preGetRSGroupInfoOfServer(hp);</span> |
| <span class="source-line-no">3135</span><span id="line-3135"> }</span> |
| <span class="source-line-no">3136</span><span id="line-3136"> RSGroupInfo rsGroupInfo = server.getRSGroupInfoManager().getRSGroupOfServer(hp);</span> |
| <span class="source-line-no">3137</span><span id="line-3137"> GetRSGroupInfoOfServerResponse resp;</span> |
| <span class="source-line-no">3138</span><span id="line-3138"> if (rsGroupInfo != null) {</span> |
| <span class="source-line-no">3139</span><span id="line-3139"> resp = GetRSGroupInfoOfServerResponse.newBuilder()</span> |
| <span class="source-line-no">3140</span><span id="line-3140"> .setRSGroupInfo(ProtobufUtil.toProtoGroupInfo(rsGroupInfo)).build();</span> |
| <span class="source-line-no">3141</span><span id="line-3141"> } else {</span> |
| <span class="source-line-no">3142</span><span id="line-3142"> resp = GetRSGroupInfoOfServerResponse.getDefaultInstance();</span> |
| <span class="source-line-no">3143</span><span id="line-3143"> }</span> |
| <span class="source-line-no">3144</span><span id="line-3144"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3145</span><span id="line-3145"> server.getMasterCoprocessorHost().postGetRSGroupInfoOfServer(hp);</span> |
| <span class="source-line-no">3146</span><span id="line-3146"> }</span> |
| <span class="source-line-no">3147</span><span id="line-3147"> return resp;</span> |
| <span class="source-line-no">3148</span><span id="line-3148"> } catch (IOException e) {</span> |
| <span class="source-line-no">3149</span><span id="line-3149"> throw new ServiceException(e);</span> |
| <span class="source-line-no">3150</span><span id="line-3150"> }</span> |
| <span class="source-line-no">3151</span><span id="line-3151"> }</span> |
| <span class="source-line-no">3152</span><span id="line-3152"></span> |
| <span class="source-line-no">3153</span><span id="line-3153"> @Override</span> |
| <span class="source-line-no">3154</span><span id="line-3154"> public MoveServersResponse moveServers(RpcController controller, MoveServersRequest request)</span> |
| <span class="source-line-no">3155</span><span id="line-3155"> throws ServiceException {</span> |
| <span class="source-line-no">3156</span><span id="line-3156"> Set<Address> hostPorts = Sets.newHashSet();</span> |
| <span class="source-line-no">3157</span><span id="line-3157"> MoveServersResponse.Builder builder = MoveServersResponse.newBuilder();</span> |
| <span class="source-line-no">3158</span><span id="line-3158"> for (HBaseProtos.ServerName el : request.getServersList()) {</span> |
| <span class="source-line-no">3159</span><span id="line-3159"> hostPorts.add(Address.fromParts(el.getHostName(), el.getPort()));</span> |
| <span class="source-line-no">3160</span><span id="line-3160"> }</span> |
| <span class="source-line-no">3161</span><span id="line-3161"> LOG.info(server.getClientIdAuditPrefix() + " move servers " + hostPorts + " to rsgroup "</span> |
| <span class="source-line-no">3162</span><span id="line-3162"> + request.getTargetGroup());</span> |
| <span class="source-line-no">3163</span><span id="line-3163"> try {</span> |
| <span class="source-line-no">3164</span><span id="line-3164"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3165</span><span id="line-3165"> server.getMasterCoprocessorHost().preMoveServers(hostPorts, request.getTargetGroup());</span> |
| <span class="source-line-no">3166</span><span id="line-3166"> }</span> |
| <span class="source-line-no">3167</span><span id="line-3167"> server.getRSGroupInfoManager().moveServers(hostPorts, request.getTargetGroup());</span> |
| <span class="source-line-no">3168</span><span id="line-3168"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3169</span><span id="line-3169"> server.getMasterCoprocessorHost().postMoveServers(hostPorts, request.getTargetGroup());</span> |
| <span class="source-line-no">3170</span><span id="line-3170"> }</span> |
| <span class="source-line-no">3171</span><span id="line-3171"> } catch (IOException e) {</span> |
| <span class="source-line-no">3172</span><span id="line-3172"> throw new ServiceException(e);</span> |
| <span class="source-line-no">3173</span><span id="line-3173"> }</span> |
| <span class="source-line-no">3174</span><span id="line-3174"> return builder.build();</span> |
| <span class="source-line-no">3175</span><span id="line-3175"> }</span> |
| <span class="source-line-no">3176</span><span id="line-3176"></span> |
| <span class="source-line-no">3177</span><span id="line-3177"> @Override</span> |
| <span class="source-line-no">3178</span><span id="line-3178"> public AddRSGroupResponse addRSGroup(RpcController controller, AddRSGroupRequest request)</span> |
| <span class="source-line-no">3179</span><span id="line-3179"> throws ServiceException {</span> |
| <span class="source-line-no">3180</span><span id="line-3180"> AddRSGroupResponse.Builder builder = AddRSGroupResponse.newBuilder();</span> |
| <span class="source-line-no">3181</span><span id="line-3181"> LOG.info(server.getClientIdAuditPrefix() + " add rsgroup " + request.getRSGroupName());</span> |
| <span class="source-line-no">3182</span><span id="line-3182"> try {</span> |
| <span class="source-line-no">3183</span><span id="line-3183"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3184</span><span id="line-3184"> server.getMasterCoprocessorHost().preAddRSGroup(request.getRSGroupName());</span> |
| <span class="source-line-no">3185</span><span id="line-3185"> }</span> |
| <span class="source-line-no">3186</span><span id="line-3186"> server.getRSGroupInfoManager().addRSGroup(new RSGroupInfo(request.getRSGroupName()));</span> |
| <span class="source-line-no">3187</span><span id="line-3187"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3188</span><span id="line-3188"> server.getMasterCoprocessorHost().postAddRSGroup(request.getRSGroupName());</span> |
| <span class="source-line-no">3189</span><span id="line-3189"> }</span> |
| <span class="source-line-no">3190</span><span id="line-3190"> } catch (IOException e) {</span> |
| <span class="source-line-no">3191</span><span id="line-3191"> throw new ServiceException(e);</span> |
| <span class="source-line-no">3192</span><span id="line-3192"> }</span> |
| <span class="source-line-no">3193</span><span id="line-3193"> return builder.build();</span> |
| <span class="source-line-no">3194</span><span id="line-3194"> }</span> |
| <span class="source-line-no">3195</span><span id="line-3195"></span> |
| <span class="source-line-no">3196</span><span id="line-3196"> @Override</span> |
| <span class="source-line-no">3197</span><span id="line-3197"> public RemoveRSGroupResponse removeRSGroup(RpcController controller, RemoveRSGroupRequest request)</span> |
| <span class="source-line-no">3198</span><span id="line-3198"> throws ServiceException {</span> |
| <span class="source-line-no">3199</span><span id="line-3199"> RemoveRSGroupResponse.Builder builder = RemoveRSGroupResponse.newBuilder();</span> |
| <span class="source-line-no">3200</span><span id="line-3200"> LOG.info(server.getClientIdAuditPrefix() + " remove rsgroup " + request.getRSGroupName());</span> |
| <span class="source-line-no">3201</span><span id="line-3201"> try {</span> |
| <span class="source-line-no">3202</span><span id="line-3202"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3203</span><span id="line-3203"> server.getMasterCoprocessorHost().preRemoveRSGroup(request.getRSGroupName());</span> |
| <span class="source-line-no">3204</span><span id="line-3204"> }</span> |
| <span class="source-line-no">3205</span><span id="line-3205"> server.getRSGroupInfoManager().removeRSGroup(request.getRSGroupName());</span> |
| <span class="source-line-no">3206</span><span id="line-3206"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3207</span><span id="line-3207"> server.getMasterCoprocessorHost().postRemoveRSGroup(request.getRSGroupName());</span> |
| <span class="source-line-no">3208</span><span id="line-3208"> }</span> |
| <span class="source-line-no">3209</span><span id="line-3209"> } catch (IOException e) {</span> |
| <span class="source-line-no">3210</span><span id="line-3210"> throw new ServiceException(e);</span> |
| <span class="source-line-no">3211</span><span id="line-3211"> }</span> |
| <span class="source-line-no">3212</span><span id="line-3212"> return builder.build();</span> |
| <span class="source-line-no">3213</span><span id="line-3213"> }</span> |
| <span class="source-line-no">3214</span><span id="line-3214"></span> |
| <span class="source-line-no">3215</span><span id="line-3215"> @Override</span> |
| <span class="source-line-no">3216</span><span id="line-3216"> public BalanceRSGroupResponse balanceRSGroup(RpcController controller,</span> |
| <span class="source-line-no">3217</span><span id="line-3217"> BalanceRSGroupRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3218</span><span id="line-3218"> BalanceRequest balanceRequest = ProtobufUtil.toBalanceRequest(request);</span> |
| <span class="source-line-no">3219</span><span id="line-3219"></span> |
| <span class="source-line-no">3220</span><span id="line-3220"> BalanceRSGroupResponse.Builder builder =</span> |
| <span class="source-line-no">3221</span><span id="line-3221"> BalanceRSGroupResponse.newBuilder().setBalanceRan(false);</span> |
| <span class="source-line-no">3222</span><span id="line-3222"></span> |
| <span class="source-line-no">3223</span><span id="line-3223"> LOG.info(</span> |
| <span class="source-line-no">3224</span><span id="line-3224"> server.getClientIdAuditPrefix() + " balance rsgroup, group=" + request.getRSGroupName());</span> |
| <span class="source-line-no">3225</span><span id="line-3225"> try {</span> |
| <span class="source-line-no">3226</span><span id="line-3226"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3227</span><span id="line-3227"> server.getMasterCoprocessorHost().preBalanceRSGroup(request.getRSGroupName(),</span> |
| <span class="source-line-no">3228</span><span id="line-3228"> balanceRequest);</span> |
| <span class="source-line-no">3229</span><span id="line-3229"> }</span> |
| <span class="source-line-no">3230</span><span id="line-3230"> BalanceResponse response =</span> |
| <span class="source-line-no">3231</span><span id="line-3231"> server.getRSGroupInfoManager().balanceRSGroup(request.getRSGroupName(), balanceRequest);</span> |
| <span class="source-line-no">3232</span><span id="line-3232"> ProtobufUtil.populateBalanceRSGroupResponse(builder, response);</span> |
| <span class="source-line-no">3233</span><span id="line-3233"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3234</span><span id="line-3234"> server.getMasterCoprocessorHost().postBalanceRSGroup(request.getRSGroupName(),</span> |
| <span class="source-line-no">3235</span><span id="line-3235"> balanceRequest, response);</span> |
| <span class="source-line-no">3236</span><span id="line-3236"> }</span> |
| <span class="source-line-no">3237</span><span id="line-3237"> } catch (IOException e) {</span> |
| <span class="source-line-no">3238</span><span id="line-3238"> throw new ServiceException(e);</span> |
| <span class="source-line-no">3239</span><span id="line-3239"> }</span> |
| <span class="source-line-no">3240</span><span id="line-3240"> return builder.build();</span> |
| <span class="source-line-no">3241</span><span id="line-3241"> }</span> |
| <span class="source-line-no">3242</span><span id="line-3242"></span> |
| <span class="source-line-no">3243</span><span id="line-3243"> @Override</span> |
| <span class="source-line-no">3244</span><span id="line-3244"> public ListRSGroupInfosResponse listRSGroupInfos(RpcController controller,</span> |
| <span class="source-line-no">3245</span><span id="line-3245"> ListRSGroupInfosRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3246</span><span id="line-3246"> ListRSGroupInfosResponse.Builder builder = ListRSGroupInfosResponse.newBuilder();</span> |
| <span class="source-line-no">3247</span><span id="line-3247"> LOG.info(server.getClientIdAuditPrefix() + " list rsgroup");</span> |
| <span class="source-line-no">3248</span><span id="line-3248"> try {</span> |
| <span class="source-line-no">3249</span><span id="line-3249"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3250</span><span id="line-3250"> server.getMasterCoprocessorHost().preListRSGroups();</span> |
| <span class="source-line-no">3251</span><span id="line-3251"> }</span> |
| <span class="source-line-no">3252</span><span id="line-3252"> List<RSGroupInfo> rsGroupInfos = server.getRSGroupInfoManager().listRSGroups().stream()</span> |
| <span class="source-line-no">3253</span><span id="line-3253"> .map(RSGroupInfo::new).collect(Collectors.toList());</span> |
| <span class="source-line-no">3254</span><span id="line-3254"> Map<String, RSGroupInfo> name2Info = new HashMap<>();</span> |
| <span class="source-line-no">3255</span><span id="line-3255"> List<TableDescriptor> needToFill =</span> |
| <span class="source-line-no">3256</span><span id="line-3256"> new ArrayList<>(server.getTableDescriptors().getAll().values());</span> |
| <span class="source-line-no">3257</span><span id="line-3257"> for (RSGroupInfo rsGroupInfo : rsGroupInfos) {</span> |
| <span class="source-line-no">3258</span><span id="line-3258"> name2Info.put(rsGroupInfo.getName(), rsGroupInfo);</span> |
| <span class="source-line-no">3259</span><span id="line-3259"> for (TableDescriptor td : server.getTableDescriptors().getAll().values()) {</span> |
| <span class="source-line-no">3260</span><span id="line-3260"> if (rsGroupInfo.containsTable(td.getTableName())) {</span> |
| <span class="source-line-no">3261</span><span id="line-3261"> needToFill.remove(td);</span> |
| <span class="source-line-no">3262</span><span id="line-3262"> }</span> |
| <span class="source-line-no">3263</span><span id="line-3263"> }</span> |
| <span class="source-line-no">3264</span><span id="line-3264"> }</span> |
| <span class="source-line-no">3265</span><span id="line-3265"> for (TableDescriptor td : needToFill) {</span> |
| <span class="source-line-no">3266</span><span id="line-3266"> String groupName = td.getRegionServerGroup().orElse(RSGroupInfo.DEFAULT_GROUP);</span> |
| <span class="source-line-no">3267</span><span id="line-3267"> RSGroupInfo rsGroupInfo = name2Info.get(groupName);</span> |
| <span class="source-line-no">3268</span><span id="line-3268"> if (rsGroupInfo != null) {</span> |
| <span class="source-line-no">3269</span><span id="line-3269"> rsGroupInfo.addTable(td.getTableName());</span> |
| <span class="source-line-no">3270</span><span id="line-3270"> }</span> |
| <span class="source-line-no">3271</span><span id="line-3271"> }</span> |
| <span class="source-line-no">3272</span><span id="line-3272"> for (RSGroupInfo rsGroupInfo : rsGroupInfos) {</span> |
| <span class="source-line-no">3273</span><span id="line-3273"> // TODO: this can be done at once outside this loop, do not need to scan all every time.</span> |
| <span class="source-line-no">3274</span><span id="line-3274"> builder.addRSGroupInfo(ProtobufUtil.toProtoGroupInfo(rsGroupInfo));</span> |
| <span class="source-line-no">3275</span><span id="line-3275"> }</span> |
| <span class="source-line-no">3276</span><span id="line-3276"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3277</span><span id="line-3277"> server.getMasterCoprocessorHost().postListRSGroups();</span> |
| <span class="source-line-no">3278</span><span id="line-3278"> }</span> |
| <span class="source-line-no">3279</span><span id="line-3279"> } catch (IOException e) {</span> |
| <span class="source-line-no">3280</span><span id="line-3280"> throw new ServiceException(e);</span> |
| <span class="source-line-no">3281</span><span id="line-3281"> }</span> |
| <span class="source-line-no">3282</span><span id="line-3282"> return builder.build();</span> |
| <span class="source-line-no">3283</span><span id="line-3283"> }</span> |
| <span class="source-line-no">3284</span><span id="line-3284"></span> |
| <span class="source-line-no">3285</span><span id="line-3285"> @Override</span> |
| <span class="source-line-no">3286</span><span id="line-3286"> public RemoveServersResponse removeServers(RpcController controller, RemoveServersRequest request)</span> |
| <span class="source-line-no">3287</span><span id="line-3287"> throws ServiceException {</span> |
| <span class="source-line-no">3288</span><span id="line-3288"> RemoveServersResponse.Builder builder = RemoveServersResponse.newBuilder();</span> |
| <span class="source-line-no">3289</span><span id="line-3289"> Set<Address> servers = Sets.newHashSet();</span> |
| <span class="source-line-no">3290</span><span id="line-3290"> for (HBaseProtos.ServerName el : request.getServersList()) {</span> |
| <span class="source-line-no">3291</span><span id="line-3291"> servers.add(Address.fromParts(el.getHostName(), el.getPort()));</span> |
| <span class="source-line-no">3292</span><span id="line-3292"> }</span> |
| <span class="source-line-no">3293</span><span id="line-3293"> LOG.info(</span> |
| <span class="source-line-no">3294</span><span id="line-3294"> server.getClientIdAuditPrefix() + " remove decommissioned servers from rsgroup: " + servers);</span> |
| <span class="source-line-no">3295</span><span id="line-3295"> try {</span> |
| <span class="source-line-no">3296</span><span id="line-3296"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3297</span><span id="line-3297"> server.getMasterCoprocessorHost().preRemoveServers(servers);</span> |
| <span class="source-line-no">3298</span><span id="line-3298"> }</span> |
| <span class="source-line-no">3299</span><span id="line-3299"> server.getRSGroupInfoManager().removeServers(servers);</span> |
| <span class="source-line-no">3300</span><span id="line-3300"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3301</span><span id="line-3301"> server.getMasterCoprocessorHost().postRemoveServers(servers);</span> |
| <span class="source-line-no">3302</span><span id="line-3302"> }</span> |
| <span class="source-line-no">3303</span><span id="line-3303"> } catch (IOException e) {</span> |
| <span class="source-line-no">3304</span><span id="line-3304"> throw new ServiceException(e);</span> |
| <span class="source-line-no">3305</span><span id="line-3305"> }</span> |
| <span class="source-line-no">3306</span><span id="line-3306"> return builder.build();</span> |
| <span class="source-line-no">3307</span><span id="line-3307"> }</span> |
| <span class="source-line-no">3308</span><span id="line-3308"></span> |
| <span class="source-line-no">3309</span><span id="line-3309"> @Override</span> |
| <span class="source-line-no">3310</span><span id="line-3310"> public ListTablesInRSGroupResponse listTablesInRSGroup(RpcController controller,</span> |
| <span class="source-line-no">3311</span><span id="line-3311"> ListTablesInRSGroupRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3312</span><span id="line-3312"> ListTablesInRSGroupResponse.Builder builder = ListTablesInRSGroupResponse.newBuilder();</span> |
| <span class="source-line-no">3313</span><span id="line-3313"> String groupName = request.getGroupName();</span> |
| <span class="source-line-no">3314</span><span id="line-3314"> LOG.info(server.getClientIdAuditPrefix() + " list tables in rsgroup " + groupName);</span> |
| <span class="source-line-no">3315</span><span id="line-3315"> try {</span> |
| <span class="source-line-no">3316</span><span id="line-3316"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3317</span><span id="line-3317"> server.getMasterCoprocessorHost().preListTablesInRSGroup(groupName);</span> |
| <span class="source-line-no">3318</span><span id="line-3318"> }</span> |
| <span class="source-line-no">3319</span><span id="line-3319"> RSGroupUtil.listTablesInRSGroup(server, groupName).stream()</span> |
| <span class="source-line-no">3320</span><span id="line-3320"> .map(ProtobufUtil::toProtoTableName).forEach(builder::addTableName);</span> |
| <span class="source-line-no">3321</span><span id="line-3321"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3322</span><span id="line-3322"> server.getMasterCoprocessorHost().postListTablesInRSGroup(groupName);</span> |
| <span class="source-line-no">3323</span><span id="line-3323"> }</span> |
| <span class="source-line-no">3324</span><span id="line-3324"> } catch (IOException e) {</span> |
| <span class="source-line-no">3325</span><span id="line-3325"> throw new ServiceException(e);</span> |
| <span class="source-line-no">3326</span><span id="line-3326"> }</span> |
| <span class="source-line-no">3327</span><span id="line-3327"> return builder.build();</span> |
| <span class="source-line-no">3328</span><span id="line-3328"> }</span> |
| <span class="source-line-no">3329</span><span id="line-3329"></span> |
| <span class="source-line-no">3330</span><span id="line-3330"> @Override</span> |
| <span class="source-line-no">3331</span><span id="line-3331"> public GetConfiguredNamespacesAndTablesInRSGroupResponse</span> |
| <span class="source-line-no">3332</span><span id="line-3332"> getConfiguredNamespacesAndTablesInRSGroup(RpcController controller,</span> |
| <span class="source-line-no">3333</span><span id="line-3333"> GetConfiguredNamespacesAndTablesInRSGroupRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3334</span><span id="line-3334"> GetConfiguredNamespacesAndTablesInRSGroupResponse.Builder builder =</span> |
| <span class="source-line-no">3335</span><span id="line-3335"> GetConfiguredNamespacesAndTablesInRSGroupResponse.newBuilder();</span> |
| <span class="source-line-no">3336</span><span id="line-3336"> String groupName = request.getGroupName();</span> |
| <span class="source-line-no">3337</span><span id="line-3337"> LOG.info(server.getClientIdAuditPrefix() + " get configured namespaces and tables in rsgroup "</span> |
| <span class="source-line-no">3338</span><span id="line-3338"> + groupName);</span> |
| <span class="source-line-no">3339</span><span id="line-3339"> try {</span> |
| <span class="source-line-no">3340</span><span id="line-3340"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3341</span><span id="line-3341"> server.getMasterCoprocessorHost().preGetConfiguredNamespacesAndTablesInRSGroup(groupName);</span> |
| <span class="source-line-no">3342</span><span id="line-3342"> }</span> |
| <span class="source-line-no">3343</span><span id="line-3343"> for (NamespaceDescriptor nd : server.getClusterSchema().getNamespaces()) {</span> |
| <span class="source-line-no">3344</span><span id="line-3344"> if (groupName.equals(nd.getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP))) {</span> |
| <span class="source-line-no">3345</span><span id="line-3345"> builder.addNamespace(nd.getName());</span> |
| <span class="source-line-no">3346</span><span id="line-3346"> }</span> |
| <span class="source-line-no">3347</span><span id="line-3347"> }</span> |
| <span class="source-line-no">3348</span><span id="line-3348"> for (TableDescriptor td : server.getTableDescriptors().getAll().values()) {</span> |
| <span class="source-line-no">3349</span><span id="line-3349"> if (td.getRegionServerGroup().map(g -> g.equals(groupName)).orElse(false)) {</span> |
| <span class="source-line-no">3350</span><span id="line-3350"> builder.addTableName(ProtobufUtil.toProtoTableName(td.getTableName()));</span> |
| <span class="source-line-no">3351</span><span id="line-3351"> }</span> |
| <span class="source-line-no">3352</span><span id="line-3352"> }</span> |
| <span class="source-line-no">3353</span><span id="line-3353"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3354</span><span id="line-3354"> server.getMasterCoprocessorHost().postGetConfiguredNamespacesAndTablesInRSGroup(groupName);</span> |
| <span class="source-line-no">3355</span><span id="line-3355"> }</span> |
| <span class="source-line-no">3356</span><span id="line-3356"> } catch (IOException e) {</span> |
| <span class="source-line-no">3357</span><span id="line-3357"> throw new ServiceException(e);</span> |
| <span class="source-line-no">3358</span><span id="line-3358"> }</span> |
| <span class="source-line-no">3359</span><span id="line-3359"> return builder.build();</span> |
| <span class="source-line-no">3360</span><span id="line-3360"> }</span> |
| <span class="source-line-no">3361</span><span id="line-3361"></span> |
| <span class="source-line-no">3362</span><span id="line-3362"> @Override</span> |
| <span class="source-line-no">3363</span><span id="line-3363"> public RenameRSGroupResponse renameRSGroup(RpcController controller, RenameRSGroupRequest request)</span> |
| <span class="source-line-no">3364</span><span id="line-3364"> throws ServiceException {</span> |
| <span class="source-line-no">3365</span><span id="line-3365"> RenameRSGroupResponse.Builder builder = RenameRSGroupResponse.newBuilder();</span> |
| <span class="source-line-no">3366</span><span id="line-3366"> String oldRSGroup = request.getOldRsgroupName();</span> |
| <span class="source-line-no">3367</span><span id="line-3367"> String newRSGroup = request.getNewRsgroupName();</span> |
| <span class="source-line-no">3368</span><span id="line-3368"> LOG.info("{} rename rsgroup from {} to {} ", server.getClientIdAuditPrefix(), oldRSGroup,</span> |
| <span class="source-line-no">3369</span><span id="line-3369"> newRSGroup);</span> |
| <span class="source-line-no">3370</span><span id="line-3370"> try {</span> |
| <span class="source-line-no">3371</span><span id="line-3371"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3372</span><span id="line-3372"> server.getMasterCoprocessorHost().preRenameRSGroup(oldRSGroup, newRSGroup);</span> |
| <span class="source-line-no">3373</span><span id="line-3373"> }</span> |
| <span class="source-line-no">3374</span><span id="line-3374"> server.getRSGroupInfoManager().renameRSGroup(oldRSGroup, newRSGroup);</span> |
| <span class="source-line-no">3375</span><span id="line-3375"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3376</span><span id="line-3376"> server.getMasterCoprocessorHost().postRenameRSGroup(oldRSGroup, newRSGroup);</span> |
| <span class="source-line-no">3377</span><span id="line-3377"> }</span> |
| <span class="source-line-no">3378</span><span id="line-3378"> } catch (IOException e) {</span> |
| <span class="source-line-no">3379</span><span id="line-3379"> throw new ServiceException(e);</span> |
| <span class="source-line-no">3380</span><span id="line-3380"> }</span> |
| <span class="source-line-no">3381</span><span id="line-3381"> return builder.build();</span> |
| <span class="source-line-no">3382</span><span id="line-3382"> }</span> |
| <span class="source-line-no">3383</span><span id="line-3383"></span> |
| <span class="source-line-no">3384</span><span id="line-3384"> @Override</span> |
| <span class="source-line-no">3385</span><span id="line-3385"> public UpdateRSGroupConfigResponse updateRSGroupConfig(RpcController controller,</span> |
| <span class="source-line-no">3386</span><span id="line-3386"> UpdateRSGroupConfigRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3387</span><span id="line-3387"> UpdateRSGroupConfigResponse.Builder builder = UpdateRSGroupConfigResponse.newBuilder();</span> |
| <span class="source-line-no">3388</span><span id="line-3388"> String groupName = request.getGroupName();</span> |
| <span class="source-line-no">3389</span><span id="line-3389"> Map<String, String> configuration = new HashMap<>();</span> |
| <span class="source-line-no">3390</span><span id="line-3390"> request.getConfigurationList().forEach(p -> configuration.put(p.getName(), p.getValue()));</span> |
| <span class="source-line-no">3391</span><span id="line-3391"> LOG.info("{} update rsgroup {} configuration {}", server.getClientIdAuditPrefix(), groupName,</span> |
| <span class="source-line-no">3392</span><span id="line-3392"> configuration);</span> |
| <span class="source-line-no">3393</span><span id="line-3393"> try {</span> |
| <span class="source-line-no">3394</span><span id="line-3394"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3395</span><span id="line-3395"> server.getMasterCoprocessorHost().preUpdateRSGroupConfig(groupName, configuration);</span> |
| <span class="source-line-no">3396</span><span id="line-3396"> }</span> |
| <span class="source-line-no">3397</span><span id="line-3397"> server.getRSGroupInfoManager().updateRSGroupConfig(groupName, configuration);</span> |
| <span class="source-line-no">3398</span><span id="line-3398"> if (server.getMasterCoprocessorHost() != null) {</span> |
| <span class="source-line-no">3399</span><span id="line-3399"> server.getMasterCoprocessorHost().postUpdateRSGroupConfig(groupName, configuration);</span> |
| <span class="source-line-no">3400</span><span id="line-3400"> }</span> |
| <span class="source-line-no">3401</span><span id="line-3401"> } catch (IOException e) {</span> |
| <span class="source-line-no">3402</span><span id="line-3402"> throw new ServiceException(e);</span> |
| <span class="source-line-no">3403</span><span id="line-3403"> }</span> |
| <span class="source-line-no">3404</span><span id="line-3404"> return builder.build();</span> |
| <span class="source-line-no">3405</span><span id="line-3405"> }</span> |
| <span class="source-line-no">3406</span><span id="line-3406"></span> |
| <span class="source-line-no">3407</span><span id="line-3407"> @Override</span> |
| <span class="source-line-no">3408</span><span id="line-3408"> public HBaseProtos.LogEntry getLogEntries(RpcController controller,</span> |
| <span class="source-line-no">3409</span><span id="line-3409"> HBaseProtos.LogRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3410</span><span id="line-3410"> try {</span> |
| <span class="source-line-no">3411</span><span id="line-3411"> final String logClassName = request.getLogClassName();</span> |
| <span class="source-line-no">3412</span><span id="line-3412"> Class<?> logClass = Class.forName(logClassName).asSubclass(Message.class);</span> |
| <span class="source-line-no">3413</span><span id="line-3413"> Method method = logClass.getMethod("parseFrom", ByteString.class);</span> |
| <span class="source-line-no">3414</span><span id="line-3414"> if (logClassName.contains("BalancerDecisionsRequest")) {</span> |
| <span class="source-line-no">3415</span><span id="line-3415"> MasterProtos.BalancerDecisionsRequest balancerDecisionsRequest =</span> |
| <span class="source-line-no">3416</span><span id="line-3416"> (MasterProtos.BalancerDecisionsRequest) method.invoke(null, request.getLogMessage());</span> |
| <span class="source-line-no">3417</span><span id="line-3417"> MasterProtos.BalancerDecisionsResponse balancerDecisionsResponse =</span> |
| <span class="source-line-no">3418</span><span id="line-3418"> getBalancerDecisions(balancerDecisionsRequest);</span> |
| <span class="source-line-no">3419</span><span id="line-3419"> return HBaseProtos.LogEntry.newBuilder()</span> |
| <span class="source-line-no">3420</span><span id="line-3420"> .setLogClassName(balancerDecisionsResponse.getClass().getName())</span> |
| <span class="source-line-no">3421</span><span id="line-3421"> .setLogMessage(balancerDecisionsResponse.toByteString()).build();</span> |
| <span class="source-line-no">3422</span><span id="line-3422"> } else if (logClassName.contains("BalancerRejectionsRequest")) {</span> |
| <span class="source-line-no">3423</span><span id="line-3423"> MasterProtos.BalancerRejectionsRequest balancerRejectionsRequest =</span> |
| <span class="source-line-no">3424</span><span id="line-3424"> (MasterProtos.BalancerRejectionsRequest) method.invoke(null, request.getLogMessage());</span> |
| <span class="source-line-no">3425</span><span id="line-3425"> MasterProtos.BalancerRejectionsResponse balancerRejectionsResponse =</span> |
| <span class="source-line-no">3426</span><span id="line-3426"> getBalancerRejections(balancerRejectionsRequest);</span> |
| <span class="source-line-no">3427</span><span id="line-3427"> return HBaseProtos.LogEntry.newBuilder()</span> |
| <span class="source-line-no">3428</span><span id="line-3428"> .setLogClassName(balancerRejectionsResponse.getClass().getName())</span> |
| <span class="source-line-no">3429</span><span id="line-3429"> .setLogMessage(balancerRejectionsResponse.toByteString()).build();</span> |
| <span class="source-line-no">3430</span><span id="line-3430"> }</span> |
| <span class="source-line-no">3431</span><span id="line-3431"> } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException</span> |
| <span class="source-line-no">3432</span><span id="line-3432"> | InvocationTargetException e) {</span> |
| <span class="source-line-no">3433</span><span id="line-3433"> LOG.error("Error while retrieving log entries.", e);</span> |
| <span class="source-line-no">3434</span><span id="line-3434"> throw new ServiceException(e);</span> |
| <span class="source-line-no">3435</span><span id="line-3435"> }</span> |
| <span class="source-line-no">3436</span><span id="line-3436"> throw new ServiceException("Invalid request params");</span> |
| <span class="source-line-no">3437</span><span id="line-3437"> }</span> |
| <span class="source-line-no">3438</span><span id="line-3438"></span> |
| <span class="source-line-no">3439</span><span id="line-3439"> private MasterProtos.BalancerDecisionsResponse</span> |
| <span class="source-line-no">3440</span><span id="line-3440"> getBalancerDecisions(MasterProtos.BalancerDecisionsRequest request) {</span> |
| <span class="source-line-no">3441</span><span id="line-3441"> final NamedQueueRecorder namedQueueRecorder = this.server.getNamedQueueRecorder();</span> |
| <span class="source-line-no">3442</span><span id="line-3442"> if (namedQueueRecorder == null) {</span> |
| <span class="source-line-no">3443</span><span id="line-3443"> return MasterProtos.BalancerDecisionsResponse.newBuilder()</span> |
| <span class="source-line-no">3444</span><span id="line-3444"> .addAllBalancerDecision(Collections.emptyList()).build();</span> |
| <span class="source-line-no">3445</span><span id="line-3445"> }</span> |
| <span class="source-line-no">3446</span><span id="line-3446"> final NamedQueueGetRequest namedQueueGetRequest = new NamedQueueGetRequest();</span> |
| <span class="source-line-no">3447</span><span id="line-3447"> namedQueueGetRequest.setNamedQueueEvent(BalancerDecisionDetails.BALANCER_DECISION_EVENT);</span> |
| <span class="source-line-no">3448</span><span id="line-3448"> namedQueueGetRequest.setBalancerDecisionsRequest(request);</span> |
| <span class="source-line-no">3449</span><span id="line-3449"> NamedQueueGetResponse namedQueueGetResponse =</span> |
| <span class="source-line-no">3450</span><span id="line-3450"> namedQueueRecorder.getNamedQueueRecords(namedQueueGetRequest);</span> |
| <span class="source-line-no">3451</span><span id="line-3451"> List<RecentLogs.BalancerDecision> balancerDecisions = namedQueueGetResponse != null</span> |
| <span class="source-line-no">3452</span><span id="line-3452"> ? namedQueueGetResponse.getBalancerDecisions()</span> |
| <span class="source-line-no">3453</span><span id="line-3453"> : Collections.emptyList();</span> |
| <span class="source-line-no">3454</span><span id="line-3454"> return MasterProtos.BalancerDecisionsResponse.newBuilder()</span> |
| <span class="source-line-no">3455</span><span id="line-3455"> .addAllBalancerDecision(balancerDecisions).build();</span> |
| <span class="source-line-no">3456</span><span id="line-3456"> }</span> |
| <span class="source-line-no">3457</span><span id="line-3457"></span> |
| <span class="source-line-no">3458</span><span id="line-3458"> private MasterProtos.BalancerRejectionsResponse</span> |
| <span class="source-line-no">3459</span><span id="line-3459"> getBalancerRejections(MasterProtos.BalancerRejectionsRequest request) {</span> |
| <span class="source-line-no">3460</span><span id="line-3460"> final NamedQueueRecorder namedQueueRecorder = this.server.getNamedQueueRecorder();</span> |
| <span class="source-line-no">3461</span><span id="line-3461"> if (namedQueueRecorder == null) {</span> |
| <span class="source-line-no">3462</span><span id="line-3462"> return MasterProtos.BalancerRejectionsResponse.newBuilder()</span> |
| <span class="source-line-no">3463</span><span id="line-3463"> .addAllBalancerRejection(Collections.emptyList()).build();</span> |
| <span class="source-line-no">3464</span><span id="line-3464"> }</span> |
| <span class="source-line-no">3465</span><span id="line-3465"> final NamedQueueGetRequest namedQueueGetRequest = new NamedQueueGetRequest();</span> |
| <span class="source-line-no">3466</span><span id="line-3466"> namedQueueGetRequest.setNamedQueueEvent(BalancerRejectionDetails.BALANCER_REJECTION_EVENT);</span> |
| <span class="source-line-no">3467</span><span id="line-3467"> namedQueueGetRequest.setBalancerRejectionsRequest(request);</span> |
| <span class="source-line-no">3468</span><span id="line-3468"> NamedQueueGetResponse namedQueueGetResponse =</span> |
| <span class="source-line-no">3469</span><span id="line-3469"> namedQueueRecorder.getNamedQueueRecords(namedQueueGetRequest);</span> |
| <span class="source-line-no">3470</span><span id="line-3470"> List<RecentLogs.BalancerRejection> balancerRejections = namedQueueGetResponse != null</span> |
| <span class="source-line-no">3471</span><span id="line-3471"> ? namedQueueGetResponse.getBalancerRejections()</span> |
| <span class="source-line-no">3472</span><span id="line-3472"> : Collections.emptyList();</span> |
| <span class="source-line-no">3473</span><span id="line-3473"> return MasterProtos.BalancerRejectionsResponse.newBuilder()</span> |
| <span class="source-line-no">3474</span><span id="line-3474"> .addAllBalancerRejection(balancerRejections).build();</span> |
| <span class="source-line-no">3475</span><span id="line-3475"> }</span> |
| <span class="source-line-no">3476</span><span id="line-3476"></span> |
| <span class="source-line-no">3477</span><span id="line-3477"> @Override</span> |
| <span class="source-line-no">3478</span><span id="line-3478"> @QosPriority(priority = HConstants.ADMIN_QOS)</span> |
| <span class="source-line-no">3479</span><span id="line-3479"> public GetRegionInfoResponse getRegionInfo(final RpcController controller,</span> |
| <span class="source-line-no">3480</span><span id="line-3480"> final GetRegionInfoRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3481</span><span id="line-3481"> final GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();</span> |
| <span class="source-line-no">3482</span><span id="line-3482"> final RegionInfo info = getRegionInfo(request.getRegion());</span> |
| <span class="source-line-no">3483</span><span id="line-3483"> if (info != null) {</span> |
| <span class="source-line-no">3484</span><span id="line-3484"> builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));</span> |
| <span class="source-line-no">3485</span><span id="line-3485"> } else {</span> |
| <span class="source-line-no">3486</span><span id="line-3486"> // Is it a MOB name? These work differently.</span> |
| <span class="source-line-no">3487</span><span id="line-3487"> byte[] regionName = request.getRegion().getValue().toByteArray();</span> |
| <span class="source-line-no">3488</span><span id="line-3488"> TableName tableName = RegionInfo.getTable(regionName);</span> |
| <span class="source-line-no">3489</span><span id="line-3489"> if (MobUtils.isMobRegionName(tableName, regionName)) {</span> |
| <span class="source-line-no">3490</span><span id="line-3490"> // a dummy region info contains the compaction state.</span> |
| <span class="source-line-no">3491</span><span id="line-3491"> RegionInfo mobRegionInfo = MobUtils.getMobRegionInfo(tableName);</span> |
| <span class="source-line-no">3492</span><span id="line-3492"> builder.setRegionInfo(ProtobufUtil.toRegionInfo(mobRegionInfo));</span> |
| <span class="source-line-no">3493</span><span id="line-3493"> if (request.hasCompactionState() && request.getCompactionState()) {</span> |
| <span class="source-line-no">3494</span><span id="line-3494"> builder.setCompactionState(server.getMobCompactionState(tableName));</span> |
| <span class="source-line-no">3495</span><span id="line-3495"> }</span> |
| <span class="source-line-no">3496</span><span id="line-3496"> } else {</span> |
| <span class="source-line-no">3497</span><span id="line-3497"> // If unknown RegionInfo and not a MOB region, it is unknown.</span> |
| <span class="source-line-no">3498</span><span id="line-3498"> throw new ServiceException(new UnknownRegionException(Bytes.toString(regionName)));</span> |
| <span class="source-line-no">3499</span><span id="line-3499"> }</span> |
| <span class="source-line-no">3500</span><span id="line-3500"> }</span> |
| <span class="source-line-no">3501</span><span id="line-3501"> return builder.build();</span> |
| <span class="source-line-no">3502</span><span id="line-3502"> }</span> |
| <span class="source-line-no">3503</span><span id="line-3503"></span> |
| <span class="source-line-no">3504</span><span id="line-3504"> @Override</span> |
| <span class="source-line-no">3505</span><span id="line-3505"> public GetStoreFileResponse getStoreFile(RpcController controller, GetStoreFileRequest request)</span> |
| <span class="source-line-no">3506</span><span id="line-3506"> throws ServiceException {</span> |
| <span class="source-line-no">3507</span><span id="line-3507"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3508</span><span id="line-3508"> }</span> |
| <span class="source-line-no">3509</span><span id="line-3509"></span> |
| <span class="source-line-no">3510</span><span id="line-3510"> @Override</span> |
| <span class="source-line-no">3511</span><span id="line-3511"> public GetOnlineRegionResponse getOnlineRegion(RpcController controller,</span> |
| <span class="source-line-no">3512</span><span id="line-3512"> GetOnlineRegionRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3513</span><span id="line-3513"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3514</span><span id="line-3514"> }</span> |
| <span class="source-line-no">3515</span><span id="line-3515"></span> |
| <span class="source-line-no">3516</span><span id="line-3516"> @Override</span> |
| <span class="source-line-no">3517</span><span id="line-3517"> public OpenRegionResponse openRegion(RpcController controller, OpenRegionRequest request)</span> |
| <span class="source-line-no">3518</span><span id="line-3518"> throws ServiceException {</span> |
| <span class="source-line-no">3519</span><span id="line-3519"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3520</span><span id="line-3520"> }</span> |
| <span class="source-line-no">3521</span><span id="line-3521"></span> |
| <span class="source-line-no">3522</span><span id="line-3522"> @Override</span> |
| <span class="source-line-no">3523</span><span id="line-3523"> public WarmupRegionResponse warmupRegion(RpcController controller, WarmupRegionRequest request)</span> |
| <span class="source-line-no">3524</span><span id="line-3524"> throws ServiceException {</span> |
| <span class="source-line-no">3525</span><span id="line-3525"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3526</span><span id="line-3526"> }</span> |
| <span class="source-line-no">3527</span><span id="line-3527"></span> |
| <span class="source-line-no">3528</span><span id="line-3528"> @Override</span> |
| <span class="source-line-no">3529</span><span id="line-3529"> public CloseRegionResponse closeRegion(RpcController controller, CloseRegionRequest request)</span> |
| <span class="source-line-no">3530</span><span id="line-3530"> throws ServiceException {</span> |
| <span class="source-line-no">3531</span><span id="line-3531"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3532</span><span id="line-3532"> }</span> |
| <span class="source-line-no">3533</span><span id="line-3533"></span> |
| <span class="source-line-no">3534</span><span id="line-3534"> @Override</span> |
| <span class="source-line-no">3535</span><span id="line-3535"> public FlushRegionResponse flushRegion(RpcController controller, FlushRegionRequest request)</span> |
| <span class="source-line-no">3536</span><span id="line-3536"> throws ServiceException {</span> |
| <span class="source-line-no">3537</span><span id="line-3537"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3538</span><span id="line-3538"> }</span> |
| <span class="source-line-no">3539</span><span id="line-3539"></span> |
| <span class="source-line-no">3540</span><span id="line-3540"> @Override</span> |
| <span class="source-line-no">3541</span><span id="line-3541"> public CompactionSwitchResponse compactionSwitch(RpcController controller,</span> |
| <span class="source-line-no">3542</span><span id="line-3542"> CompactionSwitchRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3543</span><span id="line-3543"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3544</span><span id="line-3544"> }</span> |
| <span class="source-line-no">3545</span><span id="line-3545"></span> |
| <span class="source-line-no">3546</span><span id="line-3546"> @Override</span> |
| <span class="source-line-no">3547</span><span id="line-3547"> public CompactRegionResponse compactRegion(RpcController controller, CompactRegionRequest request)</span> |
| <span class="source-line-no">3548</span><span id="line-3548"> throws ServiceException {</span> |
| <span class="source-line-no">3549</span><span id="line-3549"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3550</span><span id="line-3550"> }</span> |
| <span class="source-line-no">3551</span><span id="line-3551"></span> |
| <span class="source-line-no">3552</span><span id="line-3552"> @Override</span> |
| <span class="source-line-no">3553</span><span id="line-3553"> public ReplicateWALEntryResponse replicateWALEntry(RpcController controller,</span> |
| <span class="source-line-no">3554</span><span id="line-3554"> ReplicateWALEntryRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3555</span><span id="line-3555"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3556</span><span id="line-3556"> }</span> |
| <span class="source-line-no">3557</span><span id="line-3557"></span> |
| <span class="source-line-no">3558</span><span id="line-3558"> @Override</span> |
| <span class="source-line-no">3559</span><span id="line-3559"> public ReplicateWALEntryResponse replay(RpcController controller,</span> |
| <span class="source-line-no">3560</span><span id="line-3560"> ReplicateWALEntryRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3561</span><span id="line-3561"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3562</span><span id="line-3562"> }</span> |
| <span class="source-line-no">3563</span><span id="line-3563"></span> |
| <span class="source-line-no">3564</span><span id="line-3564"> @Override</span> |
| <span class="source-line-no">3565</span><span id="line-3565"> public RollWALWriterResponse rollWALWriter(RpcController controller, RollWALWriterRequest request)</span> |
| <span class="source-line-no">3566</span><span id="line-3566"> throws ServiceException {</span> |
| <span class="source-line-no">3567</span><span id="line-3567"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3568</span><span id="line-3568"> }</span> |
| <span class="source-line-no">3569</span><span id="line-3569"></span> |
| <span class="source-line-no">3570</span><span id="line-3570"> @Override</span> |
| <span class="source-line-no">3571</span><span id="line-3571"> public GetServerInfoResponse getServerInfo(RpcController controller, GetServerInfoRequest request)</span> |
| <span class="source-line-no">3572</span><span id="line-3572"> throws ServiceException {</span> |
| <span class="source-line-no">3573</span><span id="line-3573"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3574</span><span id="line-3574"> }</span> |
| <span class="source-line-no">3575</span><span id="line-3575"></span> |
| <span class="source-line-no">3576</span><span id="line-3576"> @Override</span> |
| <span class="source-line-no">3577</span><span id="line-3577"> public StopServerResponse stopServer(RpcController controller, StopServerRequest request)</span> |
| <span class="source-line-no">3578</span><span id="line-3578"> throws ServiceException {</span> |
| <span class="source-line-no">3579</span><span id="line-3579"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3580</span><span id="line-3580"> }</span> |
| <span class="source-line-no">3581</span><span id="line-3581"></span> |
| <span class="source-line-no">3582</span><span id="line-3582"> @Override</span> |
| <span class="source-line-no">3583</span><span id="line-3583"> public UpdateFavoredNodesResponse updateFavoredNodes(RpcController controller,</span> |
| <span class="source-line-no">3584</span><span id="line-3584"> UpdateFavoredNodesRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3585</span><span id="line-3585"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3586</span><span id="line-3586"> }</span> |
| <span class="source-line-no">3587</span><span id="line-3587"></span> |
| <span class="source-line-no">3588</span><span id="line-3588"> @Override</span> |
| <span class="source-line-no">3589</span><span id="line-3589"> public GetRegionLoadResponse getRegionLoad(RpcController controller, GetRegionLoadRequest request)</span> |
| <span class="source-line-no">3590</span><span id="line-3590"> throws ServiceException {</span> |
| <span class="source-line-no">3591</span><span id="line-3591"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3592</span><span id="line-3592"> }</span> |
| <span class="source-line-no">3593</span><span id="line-3593"></span> |
| <span class="source-line-no">3594</span><span id="line-3594"> @Override</span> |
| <span class="source-line-no">3595</span><span id="line-3595"> public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,</span> |
| <span class="source-line-no">3596</span><span id="line-3596"> ClearCompactionQueuesRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3597</span><span id="line-3597"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3598</span><span id="line-3598"> }</span> |
| <span class="source-line-no">3599</span><span id="line-3599"></span> |
| <span class="source-line-no">3600</span><span id="line-3600"> @Override</span> |
| <span class="source-line-no">3601</span><span id="line-3601"> public ClearRegionBlockCacheResponse clearRegionBlockCache(RpcController controller,</span> |
| <span class="source-line-no">3602</span><span id="line-3602"> ClearRegionBlockCacheRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3603</span><span id="line-3603"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3604</span><span id="line-3604"> }</span> |
| <span class="source-line-no">3605</span><span id="line-3605"></span> |
| <span class="source-line-no">3606</span><span id="line-3606"> @Override</span> |
| <span class="source-line-no">3607</span><span id="line-3607"> public GetSpaceQuotaSnapshotsResponse getSpaceQuotaSnapshots(RpcController controller,</span> |
| <span class="source-line-no">3608</span><span id="line-3608"> GetSpaceQuotaSnapshotsRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3609</span><span id="line-3609"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3610</span><span id="line-3610"> }</span> |
| <span class="source-line-no">3611</span><span id="line-3611"></span> |
| <span class="source-line-no">3612</span><span id="line-3612"> @Override</span> |
| <span class="source-line-no">3613</span><span id="line-3613"> public ExecuteProceduresResponse executeProcedures(RpcController controller,</span> |
| <span class="source-line-no">3614</span><span id="line-3614"> ExecuteProceduresRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3615</span><span id="line-3615"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3616</span><span id="line-3616"> }</span> |
| <span class="source-line-no">3617</span><span id="line-3617"></span> |
| <span class="source-line-no">3618</span><span id="line-3618"> @Override</span> |
| <span class="source-line-no">3619</span><span id="line-3619"> public GetCachedFilesListResponse getCachedFilesList(RpcController controller,</span> |
| <span class="source-line-no">3620</span><span id="line-3620"> GetCachedFilesListRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3621</span><span id="line-3621"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3622</span><span id="line-3622"> }</span> |
| <span class="source-line-no">3623</span><span id="line-3623"></span> |
| <span class="source-line-no">3624</span><span id="line-3624"> @Override</span> |
| <span class="source-line-no">3625</span><span id="line-3625"> public GetLiveRegionServersResponse getLiveRegionServers(RpcController controller,</span> |
| <span class="source-line-no">3626</span><span id="line-3626"> GetLiveRegionServersRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3627</span><span id="line-3627"> List<ServerName> regionServers = new ArrayList<>(server.getLiveRegionServers());</span> |
| <span class="source-line-no">3628</span><span id="line-3628"> Collections.shuffle(regionServers, ThreadLocalRandom.current());</span> |
| <span class="source-line-no">3629</span><span id="line-3629"> GetLiveRegionServersResponse.Builder builder =</span> |
| <span class="source-line-no">3630</span><span id="line-3630"> GetLiveRegionServersResponse.newBuilder().setTotal(regionServers.size());</span> |
| <span class="source-line-no">3631</span><span id="line-3631"> regionServers.stream().limit(request.getCount()).map(ProtobufUtil::toServerName)</span> |
| <span class="source-line-no">3632</span><span id="line-3632"> .forEach(builder::addServer);</span> |
| <span class="source-line-no">3633</span><span id="line-3633"> return builder.build();</span> |
| <span class="source-line-no">3634</span><span id="line-3634"> }</span> |
| <span class="source-line-no">3635</span><span id="line-3635"></span> |
| <span class="source-line-no">3636</span><span id="line-3636"> @Override</span> |
| <span class="source-line-no">3637</span><span id="line-3637"> public ReplicateWALEntryResponse replicateToReplica(RpcController controller,</span> |
| <span class="source-line-no">3638</span><span id="line-3638"> ReplicateWALEntryRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3639</span><span id="line-3639"> throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span> |
| <span class="source-line-no">3640</span><span id="line-3640"> }</span> |
| <span class="source-line-no">3641</span><span id="line-3641"></span> |
| <span class="source-line-no">3642</span><span id="line-3642"> @Override</span> |
| <span class="source-line-no">3643</span><span id="line-3643"> public FlushMasterStoreResponse flushMasterStore(RpcController controller,</span> |
| <span class="source-line-no">3644</span><span id="line-3644"> FlushMasterStoreRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3645</span><span id="line-3645"> rpcPreCheck("flushMasterStore");</span> |
| <span class="source-line-no">3646</span><span id="line-3646"> try {</span> |
| <span class="source-line-no">3647</span><span id="line-3647"> server.flushMasterStore();</span> |
| <span class="source-line-no">3648</span><span id="line-3648"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">3649</span><span id="line-3649"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">3650</span><span id="line-3650"> }</span> |
| <span class="source-line-no">3651</span><span id="line-3651"> return FlushMasterStoreResponse.newBuilder().build();</span> |
| <span class="source-line-no">3652</span><span id="line-3652"> }</span> |
| <span class="source-line-no">3653</span><span id="line-3653"></span> |
| <span class="source-line-no">3654</span><span id="line-3654"> @Override</span> |
| <span class="source-line-no">3655</span><span id="line-3655"> public FlushTableResponse flushTable(RpcController controller, FlushTableRequest req)</span> |
| <span class="source-line-no">3656</span><span id="line-3656"> throws ServiceException {</span> |
| <span class="source-line-no">3657</span><span id="line-3657"> TableName tableName = ProtobufUtil.toTableName(req.getTableName());</span> |
| <span class="source-line-no">3658</span><span id="line-3658"> List<byte[]> columnFamilies = req.getColumnFamilyCount() > 0</span> |
| <span class="source-line-no">3659</span><span id="line-3659"> ? req.getColumnFamilyList().stream().filter(cf -> !cf.isEmpty()).map(ByteString::toByteArray)</span> |
| <span class="source-line-no">3660</span><span id="line-3660"> .collect(Collectors.toList())</span> |
| <span class="source-line-no">3661</span><span id="line-3661"> : null;</span> |
| <span class="source-line-no">3662</span><span id="line-3662"> try {</span> |
| <span class="source-line-no">3663</span><span id="line-3663"> long procId =</span> |
| <span class="source-line-no">3664</span><span id="line-3664"> server.flushTable(tableName, columnFamilies, req.getNonceGroup(), req.getNonce());</span> |
| <span class="source-line-no">3665</span><span id="line-3665"> return FlushTableResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">3666</span><span id="line-3666"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">3667</span><span id="line-3667"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">3668</span><span id="line-3668"> }</span> |
| <span class="source-line-no">3669</span><span id="line-3669"> }</span> |
| <span class="source-line-no">3670</span><span id="line-3670"></span> |
| <span class="source-line-no">3671</span><span id="line-3671"> @Override</span> |
| <span class="source-line-no">3672</span><span id="line-3672"> public MasterProtos.RestoreBackupSystemTableResponse restoreBackupSystemTable(</span> |
| <span class="source-line-no">3673</span><span id="line-3673"> RpcController rpcController,</span> |
| <span class="source-line-no">3674</span><span id="line-3674"> MasterProtos.RestoreBackupSystemTableRequest restoreBackupSystemTableRequest)</span> |
| <span class="source-line-no">3675</span><span id="line-3675"> throws ServiceException {</span> |
| <span class="source-line-no">3676</span><span id="line-3676"> try {</span> |
| <span class="source-line-no">3677</span><span id="line-3677"> String snapshotName = restoreBackupSystemTableRequest.getSnapshotName();</span> |
| <span class="source-line-no">3678</span><span id="line-3678"> SnapshotDescription snapshot = server.snapshotManager.getCompletedSnapshots().stream()</span> |
| <span class="source-line-no">3679</span><span id="line-3679"> .filter(s -> s.getName().equals(snapshotName)).findFirst()</span> |
| <span class="source-line-no">3680</span><span id="line-3680"> .orElseThrow(() -> new ServiceException("Snapshot %s not found".formatted(snapshotName)));</span> |
| <span class="source-line-no">3681</span><span id="line-3681"> long pid = server.getMasterProcedureExecutor()</span> |
| <span class="source-line-no">3682</span><span id="line-3682"> .submitProcedure(new RestoreBackupSystemTableProcedure(snapshot));</span> |
| <span class="source-line-no">3683</span><span id="line-3683"> return MasterProtos.RestoreBackupSystemTableResponse.newBuilder().setProcId(pid).build();</span> |
| <span class="source-line-no">3684</span><span id="line-3684"> } catch (IOException e) {</span> |
| <span class="source-line-no">3685</span><span id="line-3685"> throw new ServiceException(e);</span> |
| <span class="source-line-no">3686</span><span id="line-3686"> }</span> |
| <span class="source-line-no">3687</span><span id="line-3687"> }</span> |
| <span class="source-line-no">3688</span><span id="line-3688"></span> |
| <span class="source-line-no">3689</span><span id="line-3689"> @Override</span> |
| <span class="source-line-no">3690</span><span id="line-3690"> public RollAllWALWritersResponse rollAllWALWriters(RpcController rpcController,</span> |
| <span class="source-line-no">3691</span><span id="line-3691"> RollAllWALWritersRequest request) throws ServiceException {</span> |
| <span class="source-line-no">3692</span><span id="line-3692"> try {</span> |
| <span class="source-line-no">3693</span><span id="line-3693"> long procId = server.rollAllWALWriters(request.getNonceGroup(), request.getNonce());</span> |
| <span class="source-line-no">3694</span><span id="line-3694"> return RollAllWALWritersResponse.newBuilder().setProcId(procId).build();</span> |
| <span class="source-line-no">3695</span><span id="line-3695"> } catch (IOException ioe) {</span> |
| <span class="source-line-no">3696</span><span id="line-3696"> throw new ServiceException(ioe);</span> |
| <span class="source-line-no">3697</span><span id="line-3697"> }</span> |
| <span class="source-line-no">3698</span><span id="line-3698"> }</span> |
| <span class="source-line-no">3699</span><span id="line-3699">}</span> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| </pre> |
| </div> |
| </main> |
| </body> |
| </html> |