blob: d9bc59636618070a3db2690ca038ba8721688341 [file] [log] [blame]
<!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.client, interface: AsyncAdmin">
<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.client;</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 static org.apache.hadoop.hbase.util.FutureUtils.addListener;</span>
<span class="source-line-no">021</span><span id="line-21"></span>
<span class="source-line-no">022</span><span id="line-22">import java.io.IOException;</span>
<span class="source-line-no">023</span><span id="line-23">import java.util.Arrays;</span>
<span class="source-line-no">024</span><span id="line-24">import java.util.Collection;</span>
<span class="source-line-no">025</span><span id="line-25">import java.util.EnumSet;</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.List;</span>
<span class="source-line-no">028</span><span id="line-28">import java.util.Map;</span>
<span class="source-line-no">029</span><span id="line-29">import java.util.Optional;</span>
<span class="source-line-no">030</span><span id="line-30">import java.util.Set;</span>
<span class="source-line-no">031</span><span id="line-31">import java.util.concurrent.CompletableFuture;</span>
<span class="source-line-no">032</span><span id="line-32">import java.util.function.Function;</span>
<span class="source-line-no">033</span><span id="line-33">import java.util.regex.Pattern;</span>
<span class="source-line-no">034</span><span id="line-34">import java.util.stream.Collectors;</span>
<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.CacheEvictionStats;</span>
<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.ClusterMetrics;</span>
<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.ClusterMetrics.Option;</span>
<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.NamespaceDescriptor;</span>
<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.RegionMetrics;</span>
<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.ServerName;</span>
<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.TableName;</span>
<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.client.replication.TableCFs;</span>
<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.client.security.SecurityCapability;</span>
<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.net.Address;</span>
<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.quotas.QuotaFilter;</span>
<span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.hbase.quotas.QuotaSettings;</span>
<span class="source-line-no">047</span><span id="line-47">import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotView;</span>
<span class="source-line-no">048</span><span id="line-48">import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;</span>
<span class="source-line-no">049</span><span id="line-49">import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;</span>
<span class="source-line-no">050</span><span id="line-50">import org.apache.hadoop.hbase.replication.SyncReplicationState;</span>
<span class="source-line-no">051</span><span id="line-51">import org.apache.hadoop.hbase.rsgroup.RSGroupInfo;</span>
<span class="source-line-no">052</span><span id="line-52">import org.apache.hadoop.hbase.security.access.GetUserPermissionsRequest;</span>
<span class="source-line-no">053</span><span id="line-53">import org.apache.hadoop.hbase.security.access.Permission;</span>
<span class="source-line-no">054</span><span id="line-54">import org.apache.hadoop.hbase.security.access.UserPermission;</span>
<span class="source-line-no">055</span><span id="line-55">import org.apache.hadoop.hbase.util.Pair;</span>
<span class="source-line-no">056</span><span id="line-56">import org.apache.yetus.audience.InterfaceAudience;</span>
<span class="source-line-no">057</span><span id="line-57"></span>
<span class="source-line-no">058</span><span id="line-58">import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;</span>
<span class="source-line-no">059</span><span id="line-59">import org.apache.hbase.thirdparty.com.google.protobuf.RpcChannel;</span>
<span class="source-line-no">060</span><span id="line-60"></span>
<span class="source-line-no">061</span><span id="line-61">/**</span>
<span class="source-line-no">062</span><span id="line-62"> * The asynchronous administrative API for HBase.</span>
<span class="source-line-no">063</span><span id="line-63"> * @since 2.0.0</span>
<span class="source-line-no">064</span><span id="line-64"> */</span>
<span class="source-line-no">065</span><span id="line-65">@InterfaceAudience.Public</span>
<span class="source-line-no">066</span><span id="line-66">public interface AsyncAdmin {</span>
<span class="source-line-no">067</span><span id="line-67"></span>
<span class="source-line-no">068</span><span id="line-68"> /**</span>
<span class="source-line-no">069</span><span id="line-69"> * Check if a table exists.</span>
<span class="source-line-no">070</span><span id="line-70"> * @param tableName Table to check.</span>
<span class="source-line-no">071</span><span id="line-71"> * @return True if table exists already. The return value will be wrapped by a</span>
<span class="source-line-no">072</span><span id="line-72"> * {@link CompletableFuture}.</span>
<span class="source-line-no">073</span><span id="line-73"> */</span>
<span class="source-line-no">074</span><span id="line-74"> CompletableFuture&lt;Boolean&gt; tableExists(TableName tableName);</span>
<span class="source-line-no">075</span><span id="line-75"></span>
<span class="source-line-no">076</span><span id="line-76"> /**</span>
<span class="source-line-no">077</span><span id="line-77"> * List all the userspace tables.</span>
<span class="source-line-no">078</span><span id="line-78"> * @return - returns a list of TableDescriptors wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">079</span><span id="line-79"> */</span>
<span class="source-line-no">080</span><span id="line-80"> default CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors() {</span>
<span class="source-line-no">081</span><span id="line-81"> return listTableDescriptors(false);</span>
<span class="source-line-no">082</span><span id="line-82"> }</span>
<span class="source-line-no">083</span><span id="line-83"></span>
<span class="source-line-no">084</span><span id="line-84"> /**</span>
<span class="source-line-no">085</span><span id="line-85"> * List all the tables.</span>
<span class="source-line-no">086</span><span id="line-86"> * @param includeSysTables False to match only against userspace tables</span>
<span class="source-line-no">087</span><span id="line-87"> * @return - returns a list of TableDescriptors wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">088</span><span id="line-88"> */</span>
<span class="source-line-no">089</span><span id="line-89"> CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(boolean includeSysTables);</span>
<span class="source-line-no">090</span><span id="line-90"></span>
<span class="source-line-no">091</span><span id="line-91"> /**</span>
<span class="source-line-no">092</span><span id="line-92"> * List all the tables matching the given pattern.</span>
<span class="source-line-no">093</span><span id="line-93"> * @param pattern The compiled regular expression to match against</span>
<span class="source-line-no">094</span><span id="line-94"> * @param includeSysTables False to match only against userspace tables</span>
<span class="source-line-no">095</span><span id="line-95"> * @return - returns a list of TableDescriptors wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">096</span><span id="line-96"> */</span>
<span class="source-line-no">097</span><span id="line-97"> CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(Pattern pattern,</span>
<span class="source-line-no">098</span><span id="line-98"> boolean includeSysTables);</span>
<span class="source-line-no">099</span><span id="line-99"></span>
<span class="source-line-no">100</span><span id="line-100"> /**</span>
<span class="source-line-no">101</span><span id="line-101"> * List specific tables including system tables.</span>
<span class="source-line-no">102</span><span id="line-102"> * @param tableNames the table list to match against</span>
<span class="source-line-no">103</span><span id="line-103"> * @return - returns a list of TableDescriptors wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">104</span><span id="line-104"> */</span>
<span class="source-line-no">105</span><span id="line-105"> CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptors(List&lt;TableName&gt; tableNames);</span>
<span class="source-line-no">106</span><span id="line-106"></span>
<span class="source-line-no">107</span><span id="line-107"> /**</span>
<span class="source-line-no">108</span><span id="line-108"> * Get list of table descriptors by namespace.</span>
<span class="source-line-no">109</span><span id="line-109"> * @param name namespace name</span>
<span class="source-line-no">110</span><span id="line-110"> * @return returns a list of TableDescriptors wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">111</span><span id="line-111"> */</span>
<span class="source-line-no">112</span><span id="line-112"> CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptorsByNamespace(String name);</span>
<span class="source-line-no">113</span><span id="line-113"></span>
<span class="source-line-no">114</span><span id="line-114"> /**</span>
<span class="source-line-no">115</span><span id="line-115"> * List all enabled or disabled table descriptors</span>
<span class="source-line-no">116</span><span id="line-116"> * @param isEnabled is true means return enabled table descriptors, false means return disabled</span>
<span class="source-line-no">117</span><span id="line-117"> * table descriptors</span>
<span class="source-line-no">118</span><span id="line-118"> * @return a list of table names wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">119</span><span id="line-119"> */</span>
<span class="source-line-no">120</span><span id="line-120"> CompletableFuture&lt;List&lt;TableDescriptor&gt;&gt; listTableDescriptorsByState(boolean isEnabled);</span>
<span class="source-line-no">121</span><span id="line-121"></span>
<span class="source-line-no">122</span><span id="line-122"> /**</span>
<span class="source-line-no">123</span><span id="line-123"> * List all of the names of userspace tables.</span>
<span class="source-line-no">124</span><span id="line-124"> * @return a list of table names wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">125</span><span id="line-125"> * @see #listTableNames(Pattern, boolean)</span>
<span class="source-line-no">126</span><span id="line-126"> */</span>
<span class="source-line-no">127</span><span id="line-127"> default CompletableFuture&lt;List&lt;TableName&gt;&gt; listTableNames() {</span>
<span class="source-line-no">128</span><span id="line-128"> return listTableNames(false);</span>
<span class="source-line-no">129</span><span id="line-129"> }</span>
<span class="source-line-no">130</span><span id="line-130"></span>
<span class="source-line-no">131</span><span id="line-131"> /**</span>
<span class="source-line-no">132</span><span id="line-132"> * List all of the names of tables.</span>
<span class="source-line-no">133</span><span id="line-133"> * @param includeSysTables False to match only against userspace tables</span>
<span class="source-line-no">134</span><span id="line-134"> * @return a list of table names wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">135</span><span id="line-135"> */</span>
<span class="source-line-no">136</span><span id="line-136"> CompletableFuture&lt;List&lt;TableName&gt;&gt; listTableNames(boolean includeSysTables);</span>
<span class="source-line-no">137</span><span id="line-137"></span>
<span class="source-line-no">138</span><span id="line-138"> /**</span>
<span class="source-line-no">139</span><span id="line-139"> * List all of the names of userspace tables.</span>
<span class="source-line-no">140</span><span id="line-140"> * @param pattern The regular expression to match against</span>
<span class="source-line-no">141</span><span id="line-141"> * @param includeSysTables False to match only against userspace tables</span>
<span class="source-line-no">142</span><span id="line-142"> * @return a list of table names wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">143</span><span id="line-143"> */</span>
<span class="source-line-no">144</span><span id="line-144"> CompletableFuture&lt;List&lt;TableName&gt;&gt; listTableNames(Pattern pattern, boolean includeSysTables);</span>
<span class="source-line-no">145</span><span id="line-145"></span>
<span class="source-line-no">146</span><span id="line-146"> /**</span>
<span class="source-line-no">147</span><span id="line-147"> * List all enabled or disabled table names</span>
<span class="source-line-no">148</span><span id="line-148"> * @param isEnabled is true means return enabled table names, false means return disabled table</span>
<span class="source-line-no">149</span><span id="line-149"> * names</span>
<span class="source-line-no">150</span><span id="line-150"> * @return a list of table names wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">151</span><span id="line-151"> */</span>
<span class="source-line-no">152</span><span id="line-152"> CompletableFuture&lt;List&lt;TableName&gt;&gt; listTableNamesByState(boolean isEnabled);</span>
<span class="source-line-no">153</span><span id="line-153"></span>
<span class="source-line-no">154</span><span id="line-154"> /**</span>
<span class="source-line-no">155</span><span id="line-155"> * Get list of table names by namespace.</span>
<span class="source-line-no">156</span><span id="line-156"> * @param name namespace name</span>
<span class="source-line-no">157</span><span id="line-157"> * @return The list of table names in the namespace wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">158</span><span id="line-158"> */</span>
<span class="source-line-no">159</span><span id="line-159"> CompletableFuture&lt;List&lt;TableName&gt;&gt; listTableNamesByNamespace(String name);</span>
<span class="source-line-no">160</span><span id="line-160"></span>
<span class="source-line-no">161</span><span id="line-161"> /**</span>
<span class="source-line-no">162</span><span id="line-162"> * Method for getting the tableDescriptor</span>
<span class="source-line-no">163</span><span id="line-163"> * @param tableName as a {@link TableName}</span>
<span class="source-line-no">164</span><span id="line-164"> * @return the read-only tableDescriptor wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">165</span><span id="line-165"> */</span>
<span class="source-line-no">166</span><span id="line-166"> CompletableFuture&lt;TableDescriptor&gt; getDescriptor(TableName tableName);</span>
<span class="source-line-no">167</span><span id="line-167"></span>
<span class="source-line-no">168</span><span id="line-168"> /**</span>
<span class="source-line-no">169</span><span id="line-169"> * Creates a new table.</span>
<span class="source-line-no">170</span><span id="line-170"> * @param desc table descriptor for table</span>
<span class="source-line-no">171</span><span id="line-171"> */</span>
<span class="source-line-no">172</span><span id="line-172"> CompletableFuture&lt;Void&gt; createTable(TableDescriptor desc);</span>
<span class="source-line-no">173</span><span id="line-173"></span>
<span class="source-line-no">174</span><span id="line-174"> /**</span>
<span class="source-line-no">175</span><span id="line-175"> * Creates a new table with the specified number of regions. The start key specified will become</span>
<span class="source-line-no">176</span><span id="line-176"> * the end key of the first region of the table, and the end key specified will become the start</span>
<span class="source-line-no">177</span><span id="line-177"> * key of the last region of the table (the first region has a null start key and the last region</span>
<span class="source-line-no">178</span><span id="line-178"> * has a null end key). BigInteger math will be used to divide the key range specified into enough</span>
<span class="source-line-no">179</span><span id="line-179"> * segments to make the required number of total regions.</span>
<span class="source-line-no">180</span><span id="line-180"> * @param desc table descriptor for table</span>
<span class="source-line-no">181</span><span id="line-181"> * @param startKey beginning of key range</span>
<span class="source-line-no">182</span><span id="line-182"> * @param endKey end of key range</span>
<span class="source-line-no">183</span><span id="line-183"> * @param numRegions the total number of regions to create</span>
<span class="source-line-no">184</span><span id="line-184"> */</span>
<span class="source-line-no">185</span><span id="line-185"> CompletableFuture&lt;Void&gt; createTable(TableDescriptor desc, byte[] startKey, byte[] endKey,</span>
<span class="source-line-no">186</span><span id="line-186"> int numRegions);</span>
<span class="source-line-no">187</span><span id="line-187"></span>
<span class="source-line-no">188</span><span id="line-188"> /**</span>
<span class="source-line-no">189</span><span id="line-189"> * Creates a new table with an initial set of empty regions defined by the specified split keys.</span>
<span class="source-line-no">190</span><span id="line-190"> * The total number of regions created will be the number of split keys plus one. Note : Avoid</span>
<span class="source-line-no">191</span><span id="line-191"> * passing empty split key.</span>
<span class="source-line-no">192</span><span id="line-192"> * @param desc table descriptor for table</span>
<span class="source-line-no">193</span><span id="line-193"> * @param splitKeys array of split keys for the initial regions of the table</span>
<span class="source-line-no">194</span><span id="line-194"> */</span>
<span class="source-line-no">195</span><span id="line-195"> CompletableFuture&lt;Void&gt; createTable(TableDescriptor desc, byte[][] splitKeys);</span>
<span class="source-line-no">196</span><span id="line-196"></span>
<span class="source-line-no">197</span><span id="line-197"> /**</span>
<span class="source-line-no">198</span><span id="line-198"> * Modify an existing table, more IRB friendly version.</span>
<span class="source-line-no">199</span><span id="line-199"> * @param desc modified description of the table</span>
<span class="source-line-no">200</span><span id="line-200"> */</span>
<span class="source-line-no">201</span><span id="line-201"> default CompletableFuture&lt;Void&gt; modifyTable(TableDescriptor desc) {</span>
<span class="source-line-no">202</span><span id="line-202"> return modifyTable(desc, true);</span>
<span class="source-line-no">203</span><span id="line-203"> }</span>
<span class="source-line-no">204</span><span id="line-204"></span>
<span class="source-line-no">205</span><span id="line-205"> /**</span>
<span class="source-line-no">206</span><span id="line-206"> * Modify an existing table, more IRB friendly version.</span>
<span class="source-line-no">207</span><span id="line-207"> * @param desc description of the table</span>
<span class="source-line-no">208</span><span id="line-208"> * @param reopenRegions By default, 'modifyTable' reopens all regions, potentially causing a RIT</span>
<span class="source-line-no">209</span><span id="line-209"> * (Region In Transition) storm in large tables. If set to 'false', regions</span>
<span class="source-line-no">210</span><span id="line-210"> * will remain unaware of the modification until they are individually</span>
<span class="source-line-no">211</span><span id="line-211"> * reopened. Please note that this may temporarily result in configuration</span>
<span class="source-line-no">212</span><span id="line-212"> * inconsistencies among regions.</span>
<span class="source-line-no">213</span><span id="line-213"> */</span>
<span class="source-line-no">214</span><span id="line-214"> CompletableFuture&lt;Void&gt; modifyTable(TableDescriptor desc, boolean reopenRegions);</span>
<span class="source-line-no">215</span><span id="line-215"></span>
<span class="source-line-no">216</span><span id="line-216"> /**</span>
<span class="source-line-no">217</span><span id="line-217"> * Change the store file tracker of the given table.</span>
<span class="source-line-no">218</span><span id="line-218"> * @param tableName the table you want to change</span>
<span class="source-line-no">219</span><span id="line-219"> * @param dstSFT the destination store file tracker</span>
<span class="source-line-no">220</span><span id="line-220"> */</span>
<span class="source-line-no">221</span><span id="line-221"> CompletableFuture&lt;Void&gt; modifyTableStoreFileTracker(TableName tableName, String dstSFT);</span>
<span class="source-line-no">222</span><span id="line-222"></span>
<span class="source-line-no">223</span><span id="line-223"> /**</span>
<span class="source-line-no">224</span><span id="line-224"> * Deletes a table.</span>
<span class="source-line-no">225</span><span id="line-225"> * @param tableName name of table to delete</span>
<span class="source-line-no">226</span><span id="line-226"> */</span>
<span class="source-line-no">227</span><span id="line-227"> CompletableFuture&lt;Void&gt; deleteTable(TableName tableName);</span>
<span class="source-line-no">228</span><span id="line-228"></span>
<span class="source-line-no">229</span><span id="line-229"> /**</span>
<span class="source-line-no">230</span><span id="line-230"> * Truncate a table.</span>
<span class="source-line-no">231</span><span id="line-231"> * @param tableName name of table to truncate</span>
<span class="source-line-no">232</span><span id="line-232"> * @param preserveSplits True if the splits should be preserved</span>
<span class="source-line-no">233</span><span id="line-233"> */</span>
<span class="source-line-no">234</span><span id="line-234"> CompletableFuture&lt;Void&gt; truncateTable(TableName tableName, boolean preserveSplits);</span>
<span class="source-line-no">235</span><span id="line-235"></span>
<span class="source-line-no">236</span><span id="line-236"> /**</span>
<span class="source-line-no">237</span><span id="line-237"> * Enable a table. The table has to be in disabled state for it to be enabled.</span>
<span class="source-line-no">238</span><span id="line-238"> * @param tableName name of the table</span>
<span class="source-line-no">239</span><span id="line-239"> */</span>
<span class="source-line-no">240</span><span id="line-240"> CompletableFuture&lt;Void&gt; enableTable(TableName tableName);</span>
<span class="source-line-no">241</span><span id="line-241"></span>
<span class="source-line-no">242</span><span id="line-242"> /**</span>
<span class="source-line-no">243</span><span id="line-243"> * Disable a table. The table has to be in enabled state for it to be disabled.</span>
<span class="source-line-no">244</span><span id="line-244"> */</span>
<span class="source-line-no">245</span><span id="line-245"> CompletableFuture&lt;Void&gt; disableTable(TableName tableName);</span>
<span class="source-line-no">246</span><span id="line-246"></span>
<span class="source-line-no">247</span><span id="line-247"> /**</span>
<span class="source-line-no">248</span><span id="line-248"> * Check if a table is enabled.</span>
<span class="source-line-no">249</span><span id="line-249"> * @param tableName name of table to check</span>
<span class="source-line-no">250</span><span id="line-250"> * @return true if table is on-line. The return value will be wrapped by a</span>
<span class="source-line-no">251</span><span id="line-251"> * {@link CompletableFuture}.</span>
<span class="source-line-no">252</span><span id="line-252"> */</span>
<span class="source-line-no">253</span><span id="line-253"> CompletableFuture&lt;Boolean&gt; isTableEnabled(TableName tableName);</span>
<span class="source-line-no">254</span><span id="line-254"></span>
<span class="source-line-no">255</span><span id="line-255"> /**</span>
<span class="source-line-no">256</span><span id="line-256"> * Check if a table is disabled.</span>
<span class="source-line-no">257</span><span id="line-257"> * @param tableName name of table to check</span>
<span class="source-line-no">258</span><span id="line-258"> * @return true if table is off-line. The return value will be wrapped by a</span>
<span class="source-line-no">259</span><span id="line-259"> * {@link CompletableFuture}.</span>
<span class="source-line-no">260</span><span id="line-260"> */</span>
<span class="source-line-no">261</span><span id="line-261"> CompletableFuture&lt;Boolean&gt; isTableDisabled(TableName tableName);</span>
<span class="source-line-no">262</span><span id="line-262"></span>
<span class="source-line-no">263</span><span id="line-263"> /**</span>
<span class="source-line-no">264</span><span id="line-264"> * Check if a table is available.</span>
<span class="source-line-no">265</span><span id="line-265"> * @param tableName name of table to check</span>
<span class="source-line-no">266</span><span id="line-266"> * @return true if all regions of the table are available. The return value will be wrapped by a</span>
<span class="source-line-no">267</span><span id="line-267"> * {@link CompletableFuture}.</span>
<span class="source-line-no">268</span><span id="line-268"> */</span>
<span class="source-line-no">269</span><span id="line-269"> CompletableFuture&lt;Boolean&gt; isTableAvailable(TableName tableName);</span>
<span class="source-line-no">270</span><span id="line-270"></span>
<span class="source-line-no">271</span><span id="line-271"> /**</span>
<span class="source-line-no">272</span><span id="line-272"> * Add a column family to an existing table.</span>
<span class="source-line-no">273</span><span id="line-273"> * @param tableName name of the table to add column family to</span>
<span class="source-line-no">274</span><span id="line-274"> * @param columnFamily column family descriptor of column family to be added</span>
<span class="source-line-no">275</span><span id="line-275"> */</span>
<span class="source-line-no">276</span><span id="line-276"> CompletableFuture&lt;Void&gt; addColumnFamily(TableName tableName, ColumnFamilyDescriptor columnFamily);</span>
<span class="source-line-no">277</span><span id="line-277"></span>
<span class="source-line-no">278</span><span id="line-278"> /**</span>
<span class="source-line-no">279</span><span id="line-279"> * Delete a column family from a table.</span>
<span class="source-line-no">280</span><span id="line-280"> * @param tableName name of table</span>
<span class="source-line-no">281</span><span id="line-281"> * @param columnFamily name of column family to be deleted</span>
<span class="source-line-no">282</span><span id="line-282"> */</span>
<span class="source-line-no">283</span><span id="line-283"> CompletableFuture&lt;Void&gt; deleteColumnFamily(TableName tableName, byte[] columnFamily);</span>
<span class="source-line-no">284</span><span id="line-284"></span>
<span class="source-line-no">285</span><span id="line-285"> /**</span>
<span class="source-line-no">286</span><span id="line-286"> * Modify an existing column family on a table.</span>
<span class="source-line-no">287</span><span id="line-287"> * @param tableName name of table</span>
<span class="source-line-no">288</span><span id="line-288"> * @param columnFamily new column family descriptor to use</span>
<span class="source-line-no">289</span><span id="line-289"> */</span>
<span class="source-line-no">290</span><span id="line-290"> CompletableFuture&lt;Void&gt; modifyColumnFamily(TableName tableName,</span>
<span class="source-line-no">291</span><span id="line-291"> ColumnFamilyDescriptor columnFamily);</span>
<span class="source-line-no">292</span><span id="line-292"></span>
<span class="source-line-no">293</span><span id="line-293"> /**</span>
<span class="source-line-no">294</span><span id="line-294"> * Change the store file tracker of the given table's given family.</span>
<span class="source-line-no">295</span><span id="line-295"> * @param tableName the table you want to change</span>
<span class="source-line-no">296</span><span id="line-296"> * @param family the family you want to change</span>
<span class="source-line-no">297</span><span id="line-297"> * @param dstSFT the destination store file tracker</span>
<span class="source-line-no">298</span><span id="line-298"> */</span>
<span class="source-line-no">299</span><span id="line-299"> CompletableFuture&lt;Void&gt; modifyColumnFamilyStoreFileTracker(TableName tableName, byte[] family,</span>
<span class="source-line-no">300</span><span id="line-300"> String dstSFT);</span>
<span class="source-line-no">301</span><span id="line-301"></span>
<span class="source-line-no">302</span><span id="line-302"> /**</span>
<span class="source-line-no">303</span><span id="line-303"> * Create a new namespace.</span>
<span class="source-line-no">304</span><span id="line-304"> * @param descriptor descriptor which describes the new namespace</span>
<span class="source-line-no">305</span><span id="line-305"> */</span>
<span class="source-line-no">306</span><span id="line-306"> CompletableFuture&lt;Void&gt; createNamespace(NamespaceDescriptor descriptor);</span>
<span class="source-line-no">307</span><span id="line-307"></span>
<span class="source-line-no">308</span><span id="line-308"> /**</span>
<span class="source-line-no">309</span><span id="line-309"> * Modify an existing namespace.</span>
<span class="source-line-no">310</span><span id="line-310"> * @param descriptor descriptor which describes the new namespace</span>
<span class="source-line-no">311</span><span id="line-311"> */</span>
<span class="source-line-no">312</span><span id="line-312"> CompletableFuture&lt;Void&gt; modifyNamespace(NamespaceDescriptor descriptor);</span>
<span class="source-line-no">313</span><span id="line-313"></span>
<span class="source-line-no">314</span><span id="line-314"> /**</span>
<span class="source-line-no">315</span><span id="line-315"> * Delete an existing namespace. Only empty namespaces (no tables) can be removed.</span>
<span class="source-line-no">316</span><span id="line-316"> * @param name namespace name</span>
<span class="source-line-no">317</span><span id="line-317"> */</span>
<span class="source-line-no">318</span><span id="line-318"> CompletableFuture&lt;Void&gt; deleteNamespace(String name);</span>
<span class="source-line-no">319</span><span id="line-319"></span>
<span class="source-line-no">320</span><span id="line-320"> /**</span>
<span class="source-line-no">321</span><span id="line-321"> * Get a namespace descriptor by name</span>
<span class="source-line-no">322</span><span id="line-322"> * @param name name of namespace descriptor</span>
<span class="source-line-no">323</span><span id="line-323"> * @return A descriptor wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">324</span><span id="line-324"> */</span>
<span class="source-line-no">325</span><span id="line-325"> CompletableFuture&lt;NamespaceDescriptor&gt; getNamespaceDescriptor(String name);</span>
<span class="source-line-no">326</span><span id="line-326"></span>
<span class="source-line-no">327</span><span id="line-327"> /**</span>
<span class="source-line-no">328</span><span id="line-328"> * List available namespaces</span>
<span class="source-line-no">329</span><span id="line-329"> * @return List of namespaces wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">330</span><span id="line-330"> */</span>
<span class="source-line-no">331</span><span id="line-331"> CompletableFuture&lt;List&lt;String&gt;&gt; listNamespaces();</span>
<span class="source-line-no">332</span><span id="line-332"></span>
<span class="source-line-no">333</span><span id="line-333"> /**</span>
<span class="source-line-no">334</span><span id="line-334"> * List available namespace descriptors</span>
<span class="source-line-no">335</span><span id="line-335"> * @return List of descriptors wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">336</span><span id="line-336"> */</span>
<span class="source-line-no">337</span><span id="line-337"> CompletableFuture&lt;List&lt;NamespaceDescriptor&gt;&gt; listNamespaceDescriptors();</span>
<span class="source-line-no">338</span><span id="line-338"></span>
<span class="source-line-no">339</span><span id="line-339"> /**</span>
<span class="source-line-no">340</span><span id="line-340"> * Get all the online regions on a region server.</span>
<span class="source-line-no">341</span><span id="line-341"> */</span>
<span class="source-line-no">342</span><span id="line-342"> CompletableFuture&lt;List&lt;RegionInfo&gt;&gt; getRegions(ServerName serverName);</span>
<span class="source-line-no">343</span><span id="line-343"></span>
<span class="source-line-no">344</span><span id="line-344"> /**</span>
<span class="source-line-no">345</span><span id="line-345"> * Get the regions of a given table.</span>
<span class="source-line-no">346</span><span id="line-346"> */</span>
<span class="source-line-no">347</span><span id="line-347"> CompletableFuture&lt;List&lt;RegionInfo&gt;&gt; getRegions(TableName tableName);</span>
<span class="source-line-no">348</span><span id="line-348"></span>
<span class="source-line-no">349</span><span id="line-349"> /**</span>
<span class="source-line-no">350</span><span id="line-350"> * Flush a table.</span>
<span class="source-line-no">351</span><span id="line-351"> * @param tableName table to flush</span>
<span class="source-line-no">352</span><span id="line-352"> */</span>
<span class="source-line-no">353</span><span id="line-353"> CompletableFuture&lt;Void&gt; flush(TableName tableName);</span>
<span class="source-line-no">354</span><span id="line-354"></span>
<span class="source-line-no">355</span><span id="line-355"> /**</span>
<span class="source-line-no">356</span><span id="line-356"> * Flush the specified column family stores on all regions of the passed table. This runs as a</span>
<span class="source-line-no">357</span><span id="line-357"> * synchronous operation.</span>
<span class="source-line-no">358</span><span id="line-358"> * @param tableName table to flush</span>
<span class="source-line-no">359</span><span id="line-359"> * @param columnFamily column family within a table</span>
<span class="source-line-no">360</span><span id="line-360"> */</span>
<span class="source-line-no">361</span><span id="line-361"> CompletableFuture&lt;Void&gt; flush(TableName tableName, byte[] columnFamily);</span>
<span class="source-line-no">362</span><span id="line-362"></span>
<span class="source-line-no">363</span><span id="line-363"> /**</span>
<span class="source-line-no">364</span><span id="line-364"> * Flush the specified column family stores on all regions of the passed table. This runs as a</span>
<span class="source-line-no">365</span><span id="line-365"> * synchronous operation.</span>
<span class="source-line-no">366</span><span id="line-366"> * @param tableName table to flush</span>
<span class="source-line-no">367</span><span id="line-367"> * @param columnFamilies column families within a table</span>
<span class="source-line-no">368</span><span id="line-368"> */</span>
<span class="source-line-no">369</span><span id="line-369"> CompletableFuture&lt;Void&gt; flush(TableName tableName, List&lt;byte[]&gt; columnFamilies);</span>
<span class="source-line-no">370</span><span id="line-370"></span>
<span class="source-line-no">371</span><span id="line-371"> /**</span>
<span class="source-line-no">372</span><span id="line-372"> * Flush an individual region.</span>
<span class="source-line-no">373</span><span id="line-373"> * @param regionName region to flush</span>
<span class="source-line-no">374</span><span id="line-374"> */</span>
<span class="source-line-no">375</span><span id="line-375"> CompletableFuture&lt;Void&gt; flushRegion(byte[] regionName);</span>
<span class="source-line-no">376</span><span id="line-376"></span>
<span class="source-line-no">377</span><span id="line-377"> /**</span>
<span class="source-line-no">378</span><span id="line-378"> * Flush a column family within a region.</span>
<span class="source-line-no">379</span><span id="line-379"> * @param regionName region to flush</span>
<span class="source-line-no">380</span><span id="line-380"> * @param columnFamily column family within a region. If not present, flush the region's all</span>
<span class="source-line-no">381</span><span id="line-381"> * column families.</span>
<span class="source-line-no">382</span><span id="line-382"> */</span>
<span class="source-line-no">383</span><span id="line-383"> CompletableFuture&lt;Void&gt; flushRegion(byte[] regionName, byte[] columnFamily);</span>
<span class="source-line-no">384</span><span id="line-384"></span>
<span class="source-line-no">385</span><span id="line-385"> /**</span>
<span class="source-line-no">386</span><span id="line-386"> * Flush all region on the region server.</span>
<span class="source-line-no">387</span><span id="line-387"> * @param serverName server to flush</span>
<span class="source-line-no">388</span><span id="line-388"> */</span>
<span class="source-line-no">389</span><span id="line-389"> CompletableFuture&lt;Void&gt; flushRegionServer(ServerName serverName);</span>
<span class="source-line-no">390</span><span id="line-390"></span>
<span class="source-line-no">391</span><span id="line-391"> /**</span>
<span class="source-line-no">392</span><span id="line-392"> * Compact a table. When the returned CompletableFuture is done, it only means the compact request</span>
<span class="source-line-no">393</span><span id="line-393"> * was sent to HBase and may need some time to finish the compact operation. Throws</span>
<span class="source-line-no">394</span><span id="line-394"> * {@link org.apache.hadoop.hbase.TableNotFoundException} if table not found.</span>
<span class="source-line-no">395</span><span id="line-395"> * @param tableName table to compact</span>
<span class="source-line-no">396</span><span id="line-396"> */</span>
<span class="source-line-no">397</span><span id="line-397"> default CompletableFuture&lt;Void&gt; compact(TableName tableName) {</span>
<span class="source-line-no">398</span><span id="line-398"> return compact(tableName, CompactType.NORMAL);</span>
<span class="source-line-no">399</span><span id="line-399"> }</span>
<span class="source-line-no">400</span><span id="line-400"></span>
<span class="source-line-no">401</span><span id="line-401"> /**</span>
<span class="source-line-no">402</span><span id="line-402"> * Compact a column family within a table. When the returned CompletableFuture is done, it only</span>
<span class="source-line-no">403</span><span id="line-403"> * means the compact request was sent to HBase and may need some time to finish the compact</span>
<span class="source-line-no">404</span><span id="line-404"> * operation. Throws {@link org.apache.hadoop.hbase.TableNotFoundException} if table not found.</span>
<span class="source-line-no">405</span><span id="line-405"> * @param tableName table to compact</span>
<span class="source-line-no">406</span><span id="line-406"> * @param columnFamily column family within a table. If not present, compact the table's all</span>
<span class="source-line-no">407</span><span id="line-407"> * column families.</span>
<span class="source-line-no">408</span><span id="line-408"> */</span>
<span class="source-line-no">409</span><span id="line-409"> default CompletableFuture&lt;Void&gt; compact(TableName tableName, byte[] columnFamily) {</span>
<span class="source-line-no">410</span><span id="line-410"> return compact(tableName, columnFamily, CompactType.NORMAL);</span>
<span class="source-line-no">411</span><span id="line-411"> }</span>
<span class="source-line-no">412</span><span id="line-412"></span>
<span class="source-line-no">413</span><span id="line-413"> /**</span>
<span class="source-line-no">414</span><span id="line-414"> * Compact a table. When the returned CompletableFuture is done, it only means the compact request</span>
<span class="source-line-no">415</span><span id="line-415"> * was sent to HBase and may need some time to finish the compact operation. Throws</span>
<span class="source-line-no">416</span><span id="line-416"> * {@link org.apache.hadoop.hbase.TableNotFoundException} if table not found for normal compaction</span>
<span class="source-line-no">417</span><span id="line-417"> * type.</span>
<span class="source-line-no">418</span><span id="line-418"> * @param tableName table to compact</span>
<span class="source-line-no">419</span><span id="line-419"> * @param compactType {@link org.apache.hadoop.hbase.client.CompactType}</span>
<span class="source-line-no">420</span><span id="line-420"> */</span>
<span class="source-line-no">421</span><span id="line-421"> CompletableFuture&lt;Void&gt; compact(TableName tableName, CompactType compactType);</span>
<span class="source-line-no">422</span><span id="line-422"></span>
<span class="source-line-no">423</span><span id="line-423"> /**</span>
<span class="source-line-no">424</span><span id="line-424"> * Compact a column family within a table. When the returned CompletableFuture is done, it only</span>
<span class="source-line-no">425</span><span id="line-425"> * means the compact request was sent to HBase and may need some time to finish the compact</span>
<span class="source-line-no">426</span><span id="line-426"> * operation. Throws {@link org.apache.hadoop.hbase.TableNotFoundException} if table not found for</span>
<span class="source-line-no">427</span><span id="line-427"> * normal compaction type.</span>
<span class="source-line-no">428</span><span id="line-428"> * @param tableName table to compact</span>
<span class="source-line-no">429</span><span id="line-429"> * @param columnFamily column family within a table</span>
<span class="source-line-no">430</span><span id="line-430"> * @param compactType {@link org.apache.hadoop.hbase.client.CompactType}</span>
<span class="source-line-no">431</span><span id="line-431"> */</span>
<span class="source-line-no">432</span><span id="line-432"> CompletableFuture&lt;Void&gt; compact(TableName tableName, byte[] columnFamily,</span>
<span class="source-line-no">433</span><span id="line-433"> CompactType compactType);</span>
<span class="source-line-no">434</span><span id="line-434"></span>
<span class="source-line-no">435</span><span id="line-435"> /**</span>
<span class="source-line-no">436</span><span id="line-436"> * Compact an individual region. When the returned CompletableFuture is done, it only means the</span>
<span class="source-line-no">437</span><span id="line-437"> * compact request was sent to HBase and may need some time to finish the compact operation.</span>
<span class="source-line-no">438</span><span id="line-438"> * @param regionName region to compact</span>
<span class="source-line-no">439</span><span id="line-439"> */</span>
<span class="source-line-no">440</span><span id="line-440"> CompletableFuture&lt;Void&gt; compactRegion(byte[] regionName);</span>
<span class="source-line-no">441</span><span id="line-441"></span>
<span class="source-line-no">442</span><span id="line-442"> /**</span>
<span class="source-line-no">443</span><span id="line-443"> * Compact a column family within a region. When the returned CompletableFuture is done, it only</span>
<span class="source-line-no">444</span><span id="line-444"> * means the compact request was sent to HBase and may need some time to finish the compact</span>
<span class="source-line-no">445</span><span id="line-445"> * operation.</span>
<span class="source-line-no">446</span><span id="line-446"> * @param regionName region to compact</span>
<span class="source-line-no">447</span><span id="line-447"> * @param columnFamily column family within a region. If not present, compact the region's all</span>
<span class="source-line-no">448</span><span id="line-448"> * column families.</span>
<span class="source-line-no">449</span><span id="line-449"> */</span>
<span class="source-line-no">450</span><span id="line-450"> CompletableFuture&lt;Void&gt; compactRegion(byte[] regionName, byte[] columnFamily);</span>
<span class="source-line-no">451</span><span id="line-451"></span>
<span class="source-line-no">452</span><span id="line-452"> /**</span>
<span class="source-line-no">453</span><span id="line-453"> * Major compact a table. When the returned CompletableFuture is done, it only means the compact</span>
<span class="source-line-no">454</span><span id="line-454"> * request was sent to HBase and may need some time to finish the compact operation. Throws</span>
<span class="source-line-no">455</span><span id="line-455"> * {@link org.apache.hadoop.hbase.TableNotFoundException} if table not found.</span>
<span class="source-line-no">456</span><span id="line-456"> * @param tableName table to major compact</span>
<span class="source-line-no">457</span><span id="line-457"> */</span>
<span class="source-line-no">458</span><span id="line-458"> default CompletableFuture&lt;Void&gt; majorCompact(TableName tableName) {</span>
<span class="source-line-no">459</span><span id="line-459"> return majorCompact(tableName, CompactType.NORMAL);</span>
<span class="source-line-no">460</span><span id="line-460"> }</span>
<span class="source-line-no">461</span><span id="line-461"></span>
<span class="source-line-no">462</span><span id="line-462"> /**</span>
<span class="source-line-no">463</span><span id="line-463"> * Major compact a column family within a table. When the returned CompletableFuture is done, it</span>
<span class="source-line-no">464</span><span id="line-464"> * only means the compact request was sent to HBase and may need some time to finish the compact</span>
<span class="source-line-no">465</span><span id="line-465"> * operation. Throws {@link org.apache.hadoop.hbase.TableNotFoundException} if table not found for</span>
<span class="source-line-no">466</span><span id="line-466"> * normal compaction. type.</span>
<span class="source-line-no">467</span><span id="line-467"> * @param tableName table to major compact</span>
<span class="source-line-no">468</span><span id="line-468"> * @param columnFamily column family within a table. If not present, major compact the table's all</span>
<span class="source-line-no">469</span><span id="line-469"> * column families.</span>
<span class="source-line-no">470</span><span id="line-470"> */</span>
<span class="source-line-no">471</span><span id="line-471"> default CompletableFuture&lt;Void&gt; majorCompact(TableName tableName, byte[] columnFamily) {</span>
<span class="source-line-no">472</span><span id="line-472"> return majorCompact(tableName, columnFamily, CompactType.NORMAL);</span>
<span class="source-line-no">473</span><span id="line-473"> }</span>
<span class="source-line-no">474</span><span id="line-474"></span>
<span class="source-line-no">475</span><span id="line-475"> /**</span>
<span class="source-line-no">476</span><span id="line-476"> * Major compact a table. When the returned CompletableFuture is done, it only means the compact</span>
<span class="source-line-no">477</span><span id="line-477"> * request was sent to HBase and may need some time to finish the compact operation. Throws</span>
<span class="source-line-no">478</span><span id="line-478"> * {@link org.apache.hadoop.hbase.TableNotFoundException} if table not found for normal compaction</span>
<span class="source-line-no">479</span><span id="line-479"> * type.</span>
<span class="source-line-no">480</span><span id="line-480"> * @param tableName table to major compact</span>
<span class="source-line-no">481</span><span id="line-481"> * @param compactType {@link org.apache.hadoop.hbase.client.CompactType}</span>
<span class="source-line-no">482</span><span id="line-482"> */</span>
<span class="source-line-no">483</span><span id="line-483"> CompletableFuture&lt;Void&gt; majorCompact(TableName tableName, CompactType compactType);</span>
<span class="source-line-no">484</span><span id="line-484"></span>
<span class="source-line-no">485</span><span id="line-485"> /**</span>
<span class="source-line-no">486</span><span id="line-486"> * Major compact a column family within a table. When the returned CompletableFuture is done, it</span>
<span class="source-line-no">487</span><span id="line-487"> * only means the compact request was sent to HBase and may need some time to finish the compact</span>
<span class="source-line-no">488</span><span id="line-488"> * operation. Throws {@link org.apache.hadoop.hbase.TableNotFoundException} if table not found.</span>
<span class="source-line-no">489</span><span id="line-489"> * @param tableName table to major compact</span>
<span class="source-line-no">490</span><span id="line-490"> * @param columnFamily column family within a table. If not present, major compact the table's all</span>
<span class="source-line-no">491</span><span id="line-491"> * column families.</span>
<span class="source-line-no">492</span><span id="line-492"> * @param compactType {@link org.apache.hadoop.hbase.client.CompactType}</span>
<span class="source-line-no">493</span><span id="line-493"> */</span>
<span class="source-line-no">494</span><span id="line-494"> CompletableFuture&lt;Void&gt; majorCompact(TableName tableName, byte[] columnFamily,</span>
<span class="source-line-no">495</span><span id="line-495"> CompactType compactType);</span>
<span class="source-line-no">496</span><span id="line-496"></span>
<span class="source-line-no">497</span><span id="line-497"> /**</span>
<span class="source-line-no">498</span><span id="line-498"> * Major compact a region. When the returned CompletableFuture is done, it only means the compact</span>
<span class="source-line-no">499</span><span id="line-499"> * request was sent to HBase and may need some time to finish the compact operation.</span>
<span class="source-line-no">500</span><span id="line-500"> * @param regionName region to major compact</span>
<span class="source-line-no">501</span><span id="line-501"> */</span>
<span class="source-line-no">502</span><span id="line-502"> CompletableFuture&lt;Void&gt; majorCompactRegion(byte[] regionName);</span>
<span class="source-line-no">503</span><span id="line-503"></span>
<span class="source-line-no">504</span><span id="line-504"> /**</span>
<span class="source-line-no">505</span><span id="line-505"> * Major compact a column family within region. When the returned CompletableFuture is done, it</span>
<span class="source-line-no">506</span><span id="line-506"> * only means the compact request was sent to HBase and may need some time to finish the compact</span>
<span class="source-line-no">507</span><span id="line-507"> * operation.</span>
<span class="source-line-no">508</span><span id="line-508"> * @param regionName region to major compact</span>
<span class="source-line-no">509</span><span id="line-509"> * @param columnFamily column family within a region. If not present, major compact the region's</span>
<span class="source-line-no">510</span><span id="line-510"> * all column families.</span>
<span class="source-line-no">511</span><span id="line-511"> */</span>
<span class="source-line-no">512</span><span id="line-512"> CompletableFuture&lt;Void&gt; majorCompactRegion(byte[] regionName, byte[] columnFamily);</span>
<span class="source-line-no">513</span><span id="line-513"></span>
<span class="source-line-no">514</span><span id="line-514"> /**</span>
<span class="source-line-no">515</span><span id="line-515"> * Compact all regions on the region server.</span>
<span class="source-line-no">516</span><span id="line-516"> * @param serverName the region server name</span>
<span class="source-line-no">517</span><span id="line-517"> */</span>
<span class="source-line-no">518</span><span id="line-518"> CompletableFuture&lt;Void&gt; compactRegionServer(ServerName serverName);</span>
<span class="source-line-no">519</span><span id="line-519"></span>
<span class="source-line-no">520</span><span id="line-520"> /**</span>
<span class="source-line-no">521</span><span id="line-521"> * Compact all regions on the region server.</span>
<span class="source-line-no">522</span><span id="line-522"> * @param serverName the region server name</span>
<span class="source-line-no">523</span><span id="line-523"> */</span>
<span class="source-line-no">524</span><span id="line-524"> CompletableFuture&lt;Void&gt; majorCompactRegionServer(ServerName serverName);</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"> * Turn the Merge switch on or off.</span>
<span class="source-line-no">528</span><span id="line-528"> * @param enabled enabled or not</span>
<span class="source-line-no">529</span><span id="line-529"> * @return Previous switch value wrapped by a {@link CompletableFuture}</span>
<span class="source-line-no">530</span><span id="line-530"> */</span>
<span class="source-line-no">531</span><span id="line-531"> default CompletableFuture&lt;Boolean&gt; mergeSwitch(boolean enabled) {</span>
<span class="source-line-no">532</span><span id="line-532"> return mergeSwitch(enabled, false);</span>
<span class="source-line-no">533</span><span id="line-533"> }</span>
<span class="source-line-no">534</span><span id="line-534"></span>
<span class="source-line-no">535</span><span id="line-535"> /**</span>
<span class="source-line-no">536</span><span id="line-536"> * Turn the Merge switch on or off.</span>
<span class="source-line-no">537</span><span id="line-537"> * &lt;p/&gt;</span>
<span class="source-line-no">538</span><span id="line-538"> * Notice that, the method itself is always non-blocking, which means it will always return</span>
<span class="source-line-no">539</span><span id="line-539"> * immediately. The {@code drainMerges} parameter only effects when will we complete the returned</span>
<span class="source-line-no">540</span><span id="line-540"> * {@link CompletableFuture}.</span>
<span class="source-line-no">541</span><span id="line-541"> * @param enabled enabled or not</span>
<span class="source-line-no">542</span><span id="line-542"> * @param drainMerges If &lt;code&gt;true&lt;/code&gt;, it waits until current merge() call, if outstanding,</span>
<span class="source-line-no">543</span><span id="line-543"> * to return.</span>
<span class="source-line-no">544</span><span id="line-544"> * @return Previous switch value wrapped by a {@link CompletableFuture}</span>
<span class="source-line-no">545</span><span id="line-545"> */</span>
<span class="source-line-no">546</span><span id="line-546"> CompletableFuture&lt;Boolean&gt; mergeSwitch(boolean enabled, boolean drainMerges);</span>
<span class="source-line-no">547</span><span id="line-547"></span>
<span class="source-line-no">548</span><span id="line-548"> /**</span>
<span class="source-line-no">549</span><span id="line-549"> * Query the current state of the Merge switch.</span>
<span class="source-line-no">550</span><span id="line-550"> * @return true if the switch is on, false otherwise. The return value will be wrapped by a</span>
<span class="source-line-no">551</span><span id="line-551"> * {@link CompletableFuture}</span>
<span class="source-line-no">552</span><span id="line-552"> */</span>
<span class="source-line-no">553</span><span id="line-553"> CompletableFuture&lt;Boolean&gt; isMergeEnabled();</span>
<span class="source-line-no">554</span><span id="line-554"></span>
<span class="source-line-no">555</span><span id="line-555"> /**</span>
<span class="source-line-no">556</span><span id="line-556"> * Turn the Split switch on or off.</span>
<span class="source-line-no">557</span><span id="line-557"> * @param enabled enabled or not</span>
<span class="source-line-no">558</span><span id="line-558"> * @return Previous switch value wrapped by a {@link CompletableFuture}</span>
<span class="source-line-no">559</span><span id="line-559"> */</span>
<span class="source-line-no">560</span><span id="line-560"> default CompletableFuture&lt;Boolean&gt; splitSwitch(boolean enabled) {</span>
<span class="source-line-no">561</span><span id="line-561"> return splitSwitch(enabled, false);</span>
<span class="source-line-no">562</span><span id="line-562"> }</span>
<span class="source-line-no">563</span><span id="line-563"></span>
<span class="source-line-no">564</span><span id="line-564"> /**</span>
<span class="source-line-no">565</span><span id="line-565"> * Turn the Split switch on or off.</span>
<span class="source-line-no">566</span><span id="line-566"> * &lt;p/&gt;</span>
<span class="source-line-no">567</span><span id="line-567"> * Notice that, the method itself is always non-blocking, which means it will always return</span>
<span class="source-line-no">568</span><span id="line-568"> * immediately. The {@code drainSplits} parameter only effects when will we complete the returned</span>
<span class="source-line-no">569</span><span id="line-569"> * {@link CompletableFuture}.</span>
<span class="source-line-no">570</span><span id="line-570"> * @param enabled enabled or not</span>
<span class="source-line-no">571</span><span id="line-571"> * @param drainSplits If &lt;code&gt;true&lt;/code&gt;, it waits until current split() call, if outstanding,</span>
<span class="source-line-no">572</span><span id="line-572"> * to return.</span>
<span class="source-line-no">573</span><span id="line-573"> * @return Previous switch value wrapped by a {@link CompletableFuture}</span>
<span class="source-line-no">574</span><span id="line-574"> */</span>
<span class="source-line-no">575</span><span id="line-575"> CompletableFuture&lt;Boolean&gt; splitSwitch(boolean enabled, boolean drainSplits);</span>
<span class="source-line-no">576</span><span id="line-576"></span>
<span class="source-line-no">577</span><span id="line-577"> /**</span>
<span class="source-line-no">578</span><span id="line-578"> * Query the current state of the Split switch.</span>
<span class="source-line-no">579</span><span id="line-579"> * @return true if the switch is on, false otherwise. The return value will be wrapped by a</span>
<span class="source-line-no">580</span><span id="line-580"> * {@link CompletableFuture}</span>
<span class="source-line-no">581</span><span id="line-581"> */</span>
<span class="source-line-no">582</span><span id="line-582"> CompletableFuture&lt;Boolean&gt; isSplitEnabled();</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"> * Merge two regions.</span>
<span class="source-line-no">586</span><span id="line-586"> * @param nameOfRegionA encoded or full name of region a</span>
<span class="source-line-no">587</span><span id="line-587"> * @param nameOfRegionB encoded or full name of region b</span>
<span class="source-line-no">588</span><span id="line-588"> * @param forcible true if do a compulsory merge, otherwise we will only merge two adjacent</span>
<span class="source-line-no">589</span><span id="line-589"> * regions</span>
<span class="source-line-no">590</span><span id="line-590"> * @deprecated since 2.3.0 and will be removed in 4.0.0.Use {@link #mergeRegions(List, boolean)}</span>
<span class="source-line-no">591</span><span id="line-591"> * instead.</span>
<span class="source-line-no">592</span><span id="line-592"> */</span>
<span class="source-line-no">593</span><span id="line-593"> @Deprecated</span>
<span class="source-line-no">594</span><span id="line-594"> default CompletableFuture&lt;Void&gt; mergeRegions(byte[] nameOfRegionA, byte[] nameOfRegionB,</span>
<span class="source-line-no">595</span><span id="line-595"> boolean forcible) {</span>
<span class="source-line-no">596</span><span id="line-596"> return mergeRegions(Arrays.asList(nameOfRegionA, nameOfRegionB), forcible);</span>
<span class="source-line-no">597</span><span id="line-597"> }</span>
<span class="source-line-no">598</span><span id="line-598"></span>
<span class="source-line-no">599</span><span id="line-599"> /**</span>
<span class="source-line-no">600</span><span id="line-600"> * Merge multiple regions (&gt;=2).</span>
<span class="source-line-no">601</span><span id="line-601"> * @param nameOfRegionsToMerge encoded or full name of daughter regions</span>
<span class="source-line-no">602</span><span id="line-602"> * @param forcible true if do a compulsory merge, otherwise we will only merge two</span>
<span class="source-line-no">603</span><span id="line-603"> * adjacent regions</span>
<span class="source-line-no">604</span><span id="line-604"> */</span>
<span class="source-line-no">605</span><span id="line-605"> CompletableFuture&lt;Void&gt; mergeRegions(List&lt;byte[]&gt; nameOfRegionsToMerge, boolean forcible);</span>
<span class="source-line-no">606</span><span id="line-606"></span>
<span class="source-line-no">607</span><span id="line-607"> /**</span>
<span class="source-line-no">608</span><span id="line-608"> * Split a table. The method will execute split action for each region in table.</span>
<span class="source-line-no">609</span><span id="line-609"> * @param tableName table to split</span>
<span class="source-line-no">610</span><span id="line-610"> */</span>
<span class="source-line-no">611</span><span id="line-611"> CompletableFuture&lt;Void&gt; split(TableName tableName);</span>
<span class="source-line-no">612</span><span id="line-612"></span>
<span class="source-line-no">613</span><span id="line-613"> /**</span>
<span class="source-line-no">614</span><span id="line-614"> * Split an individual region.</span>
<span class="source-line-no">615</span><span id="line-615"> * @param regionName region to split</span>
<span class="source-line-no">616</span><span id="line-616"> */</span>
<span class="source-line-no">617</span><span id="line-617"> CompletableFuture&lt;Void&gt; splitRegion(byte[] regionName);</span>
<span class="source-line-no">618</span><span id="line-618"></span>
<span class="source-line-no">619</span><span id="line-619"> /**</span>
<span class="source-line-no">620</span><span id="line-620"> * Split a table.</span>
<span class="source-line-no">621</span><span id="line-621"> * @param tableName table to split</span>
<span class="source-line-no">622</span><span id="line-622"> * @param splitPoint the explicit position to split on</span>
<span class="source-line-no">623</span><span id="line-623"> */</span>
<span class="source-line-no">624</span><span id="line-624"> CompletableFuture&lt;Void&gt; split(TableName tableName, byte[] splitPoint);</span>
<span class="source-line-no">625</span><span id="line-625"></span>
<span class="source-line-no">626</span><span id="line-626"> /**</span>
<span class="source-line-no">627</span><span id="line-627"> * Split an individual region.</span>
<span class="source-line-no">628</span><span id="line-628"> * @param regionName region to split</span>
<span class="source-line-no">629</span><span id="line-629"> * @param splitPoint the explicit position to split on. If not present, it will decide by region</span>
<span class="source-line-no">630</span><span id="line-630"> * server.</span>
<span class="source-line-no">631</span><span id="line-631"> */</span>
<span class="source-line-no">632</span><span id="line-632"> CompletableFuture&lt;Void&gt; splitRegion(byte[] regionName, byte[] splitPoint);</span>
<span class="source-line-no">633</span><span id="line-633"></span>
<span class="source-line-no">634</span><span id="line-634"> /**</span>
<span class="source-line-no">635</span><span id="line-635"> * Truncate an individual region.</span>
<span class="source-line-no">636</span><span id="line-636"> * @param regionName region to truncate</span>
<span class="source-line-no">637</span><span id="line-637"> */</span>
<span class="source-line-no">638</span><span id="line-638"> CompletableFuture&lt;Void&gt; truncateRegion(byte[] regionName);</span>
<span class="source-line-no">639</span><span id="line-639"></span>
<span class="source-line-no">640</span><span id="line-640"> /**</span>
<span class="source-line-no">641</span><span id="line-641"> * Assign an individual region.</span>
<span class="source-line-no">642</span><span id="line-642"> * @param regionName Encoded or full name of region to assign.</span>
<span class="source-line-no">643</span><span id="line-643"> */</span>
<span class="source-line-no">644</span><span id="line-644"> CompletableFuture&lt;Void&gt; assign(byte[] regionName);</span>
<span class="source-line-no">645</span><span id="line-645"></span>
<span class="source-line-no">646</span><span id="line-646"> /**</span>
<span class="source-line-no">647</span><span id="line-647"> * Unassign a region from current hosting regionserver. Region will then be assigned to a</span>
<span class="source-line-no">648</span><span id="line-648"> * regionserver chosen at random. Region could be reassigned back to the same server. Use</span>
<span class="source-line-no">649</span><span id="line-649"> * {@link #move(byte[], ServerName)} if you want to control the region movement.</span>
<span class="source-line-no">650</span><span id="line-650"> * @param regionName Encoded or full name of region to unassign.</span>
<span class="source-line-no">651</span><span id="line-651"> */</span>
<span class="source-line-no">652</span><span id="line-652"> CompletableFuture&lt;Void&gt; unassign(byte[] regionName);</span>
<span class="source-line-no">653</span><span id="line-653"></span>
<span class="source-line-no">654</span><span id="line-654"> /**</span>
<span class="source-line-no">655</span><span id="line-655"> * Unassign a region from current hosting regionserver. Region will then be assigned to a</span>
<span class="source-line-no">656</span><span id="line-656"> * regionserver chosen at random. Region could be reassigned back to the same server. Use</span>
<span class="source-line-no">657</span><span id="line-657"> * {@link #move(byte[], ServerName)} if you want to control the region movement.</span>
<span class="source-line-no">658</span><span id="line-658"> * @param regionName Encoded or full name of region to unassign. Will clear any existing</span>
<span class="source-line-no">659</span><span id="line-659"> * RegionPlan if one found.</span>
<span class="source-line-no">660</span><span id="line-660"> * @param forcible If true, force unassign (Will remove region from regions-in-transition too if</span>
<span class="source-line-no">661</span><span id="line-661"> * present. If results in double assignment use hbck -fix to resolve. To be used</span>
<span class="source-line-no">662</span><span id="line-662"> * by experts).</span>
<span class="source-line-no">663</span><span id="line-663"> * @deprecated since 2.4.0 and will be removed in 4.0.0. Use {@link #unassign(byte[])} instead.</span>
<span class="source-line-no">664</span><span id="line-664"> * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-24875"&gt;HBASE-24875&lt;/a&gt;</span>
<span class="source-line-no">665</span><span id="line-665"> */</span>
<span class="source-line-no">666</span><span id="line-666"> @Deprecated</span>
<span class="source-line-no">667</span><span id="line-667"> default CompletableFuture&lt;Void&gt; unassign(byte[] regionName, boolean forcible) {</span>
<span class="source-line-no">668</span><span id="line-668"> return unassign(regionName);</span>
<span class="source-line-no">669</span><span id="line-669"> }</span>
<span class="source-line-no">670</span><span id="line-670"></span>
<span class="source-line-no">671</span><span id="line-671"> /**</span>
<span class="source-line-no">672</span><span id="line-672"> * Offline specified region from master's in-memory state. It will not attempt to reassign the</span>
<span class="source-line-no">673</span><span id="line-673"> * region as in unassign. This API can be used when a region not served by any region server and</span>
<span class="source-line-no">674</span><span id="line-674"> * still online as per Master's in memory state. If this API is incorrectly used on active region</span>
<span class="source-line-no">675</span><span id="line-675"> * then master will loose track of that region. This is a special method that should be used by</span>
<span class="source-line-no">676</span><span id="line-676"> * experts or hbck.</span>
<span class="source-line-no">677</span><span id="line-677"> * @param regionName Encoded or full name of region to offline</span>
<span class="source-line-no">678</span><span id="line-678"> */</span>
<span class="source-line-no">679</span><span id="line-679"> CompletableFuture&lt;Void&gt; offline(byte[] regionName);</span>
<span class="source-line-no">680</span><span id="line-680"></span>
<span class="source-line-no">681</span><span id="line-681"> /**</span>
<span class="source-line-no">682</span><span id="line-682"> * Move the region &lt;code&gt;r&lt;/code&gt; to a random server.</span>
<span class="source-line-no">683</span><span id="line-683"> * @param regionName Encoded or full name of region to move.</span>
<span class="source-line-no">684</span><span id="line-684"> */</span>
<span class="source-line-no">685</span><span id="line-685"> CompletableFuture&lt;Void&gt; move(byte[] regionName);</span>
<span class="source-line-no">686</span><span id="line-686"></span>
<span class="source-line-no">687</span><span id="line-687"> /**</span>
<span class="source-line-no">688</span><span id="line-688"> * Move the region &lt;code&gt;r&lt;/code&gt; to &lt;code&gt;dest&lt;/code&gt;.</span>
<span class="source-line-no">689</span><span id="line-689"> * @param regionName Encoded or full name of region to move.</span>
<span class="source-line-no">690</span><span id="line-690"> * @param destServerName The servername of the destination regionserver. If not present, we'll</span>
<span class="source-line-no">691</span><span id="line-691"> * assign to a random server. A server name is made of host, port and</span>
<span class="source-line-no">692</span><span id="line-692"> * startcode. Here is an example:</span>
<span class="source-line-no">693</span><span id="line-693"> * &lt;code&gt; host187.example.com,60020,1289493121758&lt;/code&gt;</span>
<span class="source-line-no">694</span><span id="line-694"> */</span>
<span class="source-line-no">695</span><span id="line-695"> CompletableFuture&lt;Void&gt; move(byte[] regionName, ServerName destServerName);</span>
<span class="source-line-no">696</span><span id="line-696"></span>
<span class="source-line-no">697</span><span id="line-697"> /**</span>
<span class="source-line-no">698</span><span id="line-698"> * Apply the new quota settings.</span>
<span class="source-line-no">699</span><span id="line-699"> * @param quota the quota settings</span>
<span class="source-line-no">700</span><span id="line-700"> */</span>
<span class="source-line-no">701</span><span id="line-701"> CompletableFuture&lt;Void&gt; setQuota(QuotaSettings quota);</span>
<span class="source-line-no">702</span><span id="line-702"></span>
<span class="source-line-no">703</span><span id="line-703"> /**</span>
<span class="source-line-no">704</span><span id="line-704"> * List the quotas based on the filter.</span>
<span class="source-line-no">705</span><span id="line-705"> * @param filter the quota settings filter</span>
<span class="source-line-no">706</span><span id="line-706"> * @return the QuotaSetting list, which wrapped by a CompletableFuture.</span>
<span class="source-line-no">707</span><span id="line-707"> */</span>
<span class="source-line-no">708</span><span id="line-708"> CompletableFuture&lt;List&lt;QuotaSettings&gt;&gt; getQuota(QuotaFilter filter);</span>
<span class="source-line-no">709</span><span id="line-709"></span>
<span class="source-line-no">710</span><span id="line-710"> /**</span>
<span class="source-line-no">711</span><span id="line-711"> * Add a new replication peer for replicating data to slave cluster</span>
<span class="source-line-no">712</span><span id="line-712"> * @param peerId a short name that identifies the peer</span>
<span class="source-line-no">713</span><span id="line-713"> * @param peerConfig configuration for the replication slave cluster</span>
<span class="source-line-no">714</span><span id="line-714"> */</span>
<span class="source-line-no">715</span><span id="line-715"> default CompletableFuture&lt;Void&gt; addReplicationPeer(String peerId,</span>
<span class="source-line-no">716</span><span id="line-716"> ReplicationPeerConfig peerConfig) {</span>
<span class="source-line-no">717</span><span id="line-717"> return addReplicationPeer(peerId, peerConfig, true);</span>
<span class="source-line-no">718</span><span id="line-718"> }</span>
<span class="source-line-no">719</span><span id="line-719"></span>
<span class="source-line-no">720</span><span id="line-720"> /**</span>
<span class="source-line-no">721</span><span id="line-721"> * Add a new replication peer for replicating data to slave cluster</span>
<span class="source-line-no">722</span><span id="line-722"> * @param peerId a short name that identifies the peer</span>
<span class="source-line-no">723</span><span id="line-723"> * @param peerConfig configuration for the replication slave cluster</span>
<span class="source-line-no">724</span><span id="line-724"> * @param enabled peer state, true if ENABLED and false if DISABLED</span>
<span class="source-line-no">725</span><span id="line-725"> */</span>
<span class="source-line-no">726</span><span id="line-726"> CompletableFuture&lt;Void&gt; addReplicationPeer(String peerId, ReplicationPeerConfig peerConfig,</span>
<span class="source-line-no">727</span><span id="line-727"> boolean enabled);</span>
<span class="source-line-no">728</span><span id="line-728"></span>
<span class="source-line-no">729</span><span id="line-729"> /**</span>
<span class="source-line-no">730</span><span id="line-730"> * Remove a peer and stop the replication</span>
<span class="source-line-no">731</span><span id="line-731"> * @param peerId a short name that identifies the peer</span>
<span class="source-line-no">732</span><span id="line-732"> */</span>
<span class="source-line-no">733</span><span id="line-733"> CompletableFuture&lt;Void&gt; removeReplicationPeer(String peerId);</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"> * Restart the replication stream to the specified peer</span>
<span class="source-line-no">737</span><span id="line-737"> * @param peerId a short name that identifies the peer</span>
<span class="source-line-no">738</span><span id="line-738"> */</span>
<span class="source-line-no">739</span><span id="line-739"> CompletableFuture&lt;Void&gt; enableReplicationPeer(String peerId);</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"> * Stop the replication stream to the specified peer</span>
<span class="source-line-no">743</span><span id="line-743"> * @param peerId a short name that identifies the peer</span>
<span class="source-line-no">744</span><span id="line-744"> */</span>
<span class="source-line-no">745</span><span id="line-745"> CompletableFuture&lt;Void&gt; disableReplicationPeer(String peerId);</span>
<span class="source-line-no">746</span><span id="line-746"></span>
<span class="source-line-no">747</span><span id="line-747"> /**</span>
<span class="source-line-no">748</span><span id="line-748"> * Returns the configured ReplicationPeerConfig for the specified peer</span>
<span class="source-line-no">749</span><span id="line-749"> * @param peerId a short name that identifies the peer</span>
<span class="source-line-no">750</span><span id="line-750"> * @return ReplicationPeerConfig for the peer wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">751</span><span id="line-751"> */</span>
<span class="source-line-no">752</span><span id="line-752"> CompletableFuture&lt;ReplicationPeerConfig&gt; getReplicationPeerConfig(String peerId);</span>
<span class="source-line-no">753</span><span id="line-753"></span>
<span class="source-line-no">754</span><span id="line-754"> /**</span>
<span class="source-line-no">755</span><span id="line-755"> * Update the peerConfig for the specified peer</span>
<span class="source-line-no">756</span><span id="line-756"> * @param peerId a short name that identifies the peer</span>
<span class="source-line-no">757</span><span id="line-757"> * @param peerConfig new config for the peer</span>
<span class="source-line-no">758</span><span id="line-758"> */</span>
<span class="source-line-no">759</span><span id="line-759"> CompletableFuture&lt;Void&gt; updateReplicationPeerConfig(String peerId,</span>
<span class="source-line-no">760</span><span id="line-760"> ReplicationPeerConfig peerConfig);</span>
<span class="source-line-no">761</span><span id="line-761"></span>
<span class="source-line-no">762</span><span id="line-762"> /**</span>
<span class="source-line-no">763</span><span id="line-763"> * Transit current cluster to a new state in a synchronous replication peer.</span>
<span class="source-line-no">764</span><span id="line-764"> * @param peerId a short name that identifies the peer</span>
<span class="source-line-no">765</span><span id="line-765"> * @param state a new state of current cluster</span>
<span class="source-line-no">766</span><span id="line-766"> */</span>
<span class="source-line-no">767</span><span id="line-767"> CompletableFuture&lt;Void&gt; transitReplicationPeerSyncReplicationState(String peerId,</span>
<span class="source-line-no">768</span><span id="line-768"> SyncReplicationState state);</span>
<span class="source-line-no">769</span><span id="line-769"></span>
<span class="source-line-no">770</span><span id="line-770"> /**</span>
<span class="source-line-no">771</span><span id="line-771"> * Get the current cluster state in a synchronous replication peer.</span>
<span class="source-line-no">772</span><span id="line-772"> * @param peerId a short name that identifies the peer</span>
<span class="source-line-no">773</span><span id="line-773"> * @return the current cluster state wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">774</span><span id="line-774"> */</span>
<span class="source-line-no">775</span><span id="line-775"> default CompletableFuture&lt;SyncReplicationState&gt;</span>
<span class="source-line-no">776</span><span id="line-776"> getReplicationPeerSyncReplicationState(String peerId) {</span>
<span class="source-line-no">777</span><span id="line-777"> CompletableFuture&lt;SyncReplicationState&gt; future = new CompletableFuture&lt;&gt;();</span>
<span class="source-line-no">778</span><span id="line-778"> addListener(listReplicationPeers(Pattern.compile(peerId)), (peers, error) -&gt; {</span>
<span class="source-line-no">779</span><span id="line-779"> if (error != null) {</span>
<span class="source-line-no">780</span><span id="line-780"> future.completeExceptionally(error);</span>
<span class="source-line-no">781</span><span id="line-781"> } else if (peers.isEmpty() || !peers.get(0).getPeerId().equals(peerId)) {</span>
<span class="source-line-no">782</span><span id="line-782"> future</span>
<span class="source-line-no">783</span><span id="line-783"> .completeExceptionally(new IOException("Replication peer " + peerId + " does not exist"));</span>
<span class="source-line-no">784</span><span id="line-784"> } else {</span>
<span class="source-line-no">785</span><span id="line-785"> future.complete(peers.get(0).getSyncReplicationState());</span>
<span class="source-line-no">786</span><span id="line-786"> }</span>
<span class="source-line-no">787</span><span id="line-787"> });</span>
<span class="source-line-no">788</span><span id="line-788"> return future;</span>
<span class="source-line-no">789</span><span id="line-789"> }</span>
<span class="source-line-no">790</span><span id="line-790"></span>
<span class="source-line-no">791</span><span id="line-791"> /**</span>
<span class="source-line-no">792</span><span id="line-792"> * Append the replicable table-cf config of the specified peer</span>
<span class="source-line-no">793</span><span id="line-793"> * @param peerId a short that identifies the cluster</span>
<span class="source-line-no">794</span><span id="line-794"> * @param tableCfs A map from tableName to column family names</span>
<span class="source-line-no">795</span><span id="line-795"> */</span>
<span class="source-line-no">796</span><span id="line-796"> CompletableFuture&lt;Void&gt; appendReplicationPeerTableCFs(String peerId,</span>
<span class="source-line-no">797</span><span id="line-797"> Map&lt;TableName, List&lt;String&gt;&gt; tableCfs);</span>
<span class="source-line-no">798</span><span id="line-798"></span>
<span class="source-line-no">799</span><span id="line-799"> /**</span>
<span class="source-line-no">800</span><span id="line-800"> * Remove some table-cfs from config of the specified peer</span>
<span class="source-line-no">801</span><span id="line-801"> * @param peerId a short name that identifies the cluster</span>
<span class="source-line-no">802</span><span id="line-802"> * @param tableCfs A map from tableName to column family names</span>
<span class="source-line-no">803</span><span id="line-803"> */</span>
<span class="source-line-no">804</span><span id="line-804"> CompletableFuture&lt;Void&gt; removeReplicationPeerTableCFs(String peerId,</span>
<span class="source-line-no">805</span><span id="line-805"> Map&lt;TableName, List&lt;String&gt;&gt; tableCfs);</span>
<span class="source-line-no">806</span><span id="line-806"></span>
<span class="source-line-no">807</span><span id="line-807"> /**</span>
<span class="source-line-no">808</span><span id="line-808"> * Return a list of replication peers.</span>
<span class="source-line-no">809</span><span id="line-809"> * @return a list of replication peers description. The return value will be wrapped by a</span>
<span class="source-line-no">810</span><span id="line-810"> * {@link CompletableFuture}.</span>
<span class="source-line-no">811</span><span id="line-811"> */</span>
<span class="source-line-no">812</span><span id="line-812"> CompletableFuture&lt;List&lt;ReplicationPeerDescription&gt;&gt; listReplicationPeers();</span>
<span class="source-line-no">813</span><span id="line-813"></span>
<span class="source-line-no">814</span><span id="line-814"> /**</span>
<span class="source-line-no">815</span><span id="line-815"> * Return a list of replication peers.</span>
<span class="source-line-no">816</span><span id="line-816"> * @param pattern The compiled regular expression to match peer id</span>
<span class="source-line-no">817</span><span id="line-817"> * @return a list of replication peers description. The return value will be wrapped by a</span>
<span class="source-line-no">818</span><span id="line-818"> * {@link CompletableFuture}.</span>
<span class="source-line-no">819</span><span id="line-819"> */</span>
<span class="source-line-no">820</span><span id="line-820"> CompletableFuture&lt;List&lt;ReplicationPeerDescription&gt;&gt; listReplicationPeers(Pattern pattern);</span>
<span class="source-line-no">821</span><span id="line-821"></span>
<span class="source-line-no">822</span><span id="line-822"> /**</span>
<span class="source-line-no">823</span><span id="line-823"> * Find all table and column families that are replicated from this cluster</span>
<span class="source-line-no">824</span><span id="line-824"> * @return the replicated table-cfs list of this cluster. The return value will be wrapped by a</span>
<span class="source-line-no">825</span><span id="line-825"> * {@link CompletableFuture}.</span>
<span class="source-line-no">826</span><span id="line-826"> */</span>
<span class="source-line-no">827</span><span id="line-827"> CompletableFuture&lt;List&lt;TableCFs&gt;&gt; listReplicatedTableCFs();</span>
<span class="source-line-no">828</span><span id="line-828"></span>
<span class="source-line-no">829</span><span id="line-829"> /**</span>
<span class="source-line-no">830</span><span id="line-830"> * Enable a table's replication switch.</span>
<span class="source-line-no">831</span><span id="line-831"> * @param tableName name of the table</span>
<span class="source-line-no">832</span><span id="line-832"> */</span>
<span class="source-line-no">833</span><span id="line-833"> CompletableFuture&lt;Void&gt; enableTableReplication(TableName tableName);</span>
<span class="source-line-no">834</span><span id="line-834"></span>
<span class="source-line-no">835</span><span id="line-835"> /**</span>
<span class="source-line-no">836</span><span id="line-836"> * Disable a table's replication switch.</span>
<span class="source-line-no">837</span><span id="line-837"> * @param tableName name of the table</span>
<span class="source-line-no">838</span><span id="line-838"> */</span>
<span class="source-line-no">839</span><span id="line-839"> CompletableFuture&lt;Void&gt; disableTableReplication(TableName tableName);</span>
<span class="source-line-no">840</span><span id="line-840"></span>
<span class="source-line-no">841</span><span id="line-841"> /**</span>
<span class="source-line-no">842</span><span id="line-842"> * Check if a replication peer is enabled.</span>
<span class="source-line-no">843</span><span id="line-843"> * @param peerId id of replication peer to check</span>
<span class="source-line-no">844</span><span id="line-844"> * @return true if replication peer is enabled. The return value will be wrapped by a</span>
<span class="source-line-no">845</span><span id="line-845"> * {@link CompletableFuture}</span>
<span class="source-line-no">846</span><span id="line-846"> */</span>
<span class="source-line-no">847</span><span id="line-847"> CompletableFuture&lt;Boolean&gt; isReplicationPeerEnabled(String peerId);</span>
<span class="source-line-no">848</span><span id="line-848"></span>
<span class="source-line-no">849</span><span id="line-849"> /**</span>
<span class="source-line-no">850</span><span id="line-850"> * Enable or disable replication peer modification.</span>
<span class="source-line-no">851</span><span id="line-851"> * &lt;p/&gt;</span>
<span class="source-line-no">852</span><span id="line-852"> * This is especially useful when you want to change the replication peer storage.</span>
<span class="source-line-no">853</span><span id="line-853"> * @param on {@code true} means enable, otherwise disable</span>
<span class="source-line-no">854</span><span id="line-854"> * @return the previous enable/disable state wrapped by a {@link CompletableFuture}</span>
<span class="source-line-no">855</span><span id="line-855"> */</span>
<span class="source-line-no">856</span><span id="line-856"> default CompletableFuture&lt;Boolean&gt; replicationPeerModificationSwitch(boolean on) {</span>
<span class="source-line-no">857</span><span id="line-857"> return replicationPeerModificationSwitch(on, false);</span>
<span class="source-line-no">858</span><span id="line-858"> }</span>
<span class="source-line-no">859</span><span id="line-859"></span>
<span class="source-line-no">860</span><span id="line-860"> /**</span>
<span class="source-line-no">861</span><span id="line-861"> * Enable or disable replication peer modification.</span>
<span class="source-line-no">862</span><span id="line-862"> * &lt;p/&gt;</span>
<span class="source-line-no">863</span><span id="line-863"> * This is especially useful when you want to change the replication peer storage.</span>
<span class="source-line-no">864</span><span id="line-864"> * @param on {@code true} means enable, otherwise disable</span>
<span class="source-line-no">865</span><span id="line-865"> * @param drainProcedures if {@code true}, will wait until all the running replication peer</span>
<span class="source-line-no">866</span><span id="line-866"> * modification procedures finish</span>
<span class="source-line-no">867</span><span id="line-867"> * @return the previous enable/disable state wrapped by a {@link CompletableFuture}</span>
<span class="source-line-no">868</span><span id="line-868"> */</span>
<span class="source-line-no">869</span><span id="line-869"> CompletableFuture&lt;Boolean&gt; replicationPeerModificationSwitch(boolean on, boolean drainProcedures);</span>
<span class="source-line-no">870</span><span id="line-870"></span>
<span class="source-line-no">871</span><span id="line-871"> /**</span>
<span class="source-line-no">872</span><span id="line-872"> * Check whether replication peer modification is enabled.</span>
<span class="source-line-no">873</span><span id="line-873"> * @return {@code true} if modification is enabled, otherwise {@code false}, wrapped by a</span>
<span class="source-line-no">874</span><span id="line-874"> * {@link CompletableFuture}</span>
<span class="source-line-no">875</span><span id="line-875"> */</span>
<span class="source-line-no">876</span><span id="line-876"> CompletableFuture&lt;Boolean&gt; isReplicationPeerModificationEnabled();</span>
<span class="source-line-no">877</span><span id="line-877"></span>
<span class="source-line-no">878</span><span id="line-878"> /**</span>
<span class="source-line-no">879</span><span id="line-879"> * Take a snapshot for the given table. If the table is enabled, a FLUSH-type snapshot will be</span>
<span class="source-line-no">880</span><span id="line-880"> * taken. If the table is disabled, an offline snapshot is taken. Snapshots are taken sequentially</span>
<span class="source-line-no">881</span><span id="line-881"> * even when requested concurrently, across all tables. Snapshots are considered unique based on</span>
<span class="source-line-no">882</span><span id="line-882"> * &lt;b&gt;the name of the snapshot&lt;/b&gt;. Attempts to take a snapshot with the same name (even a</span>
<span class="source-line-no">883</span><span id="line-883"> * different type or with different parameters) will fail with a</span>
<span class="source-line-no">884</span><span id="line-884"> * {@link org.apache.hadoop.hbase.snapshot.SnapshotCreationException} indicating the duplicate</span>
<span class="source-line-no">885</span><span id="line-885"> * naming. Snapshot names follow the same naming constraints as tables in HBase. See</span>
<span class="source-line-no">886</span><span id="line-886"> * {@link org.apache.hadoop.hbase.TableName#isLegalFullyQualifiedTableName(byte[])}.</span>
<span class="source-line-no">887</span><span id="line-887"> * @param snapshotName name of the snapshot to be created</span>
<span class="source-line-no">888</span><span id="line-888"> * @param tableName name of the table for which snapshot is created</span>
<span class="source-line-no">889</span><span id="line-889"> */</span>
<span class="source-line-no">890</span><span id="line-890"> default CompletableFuture&lt;Void&gt; snapshot(String snapshotName, TableName tableName) {</span>
<span class="source-line-no">891</span><span id="line-891"> return snapshot(snapshotName, tableName, SnapshotType.FLUSH);</span>
<span class="source-line-no">892</span><span id="line-892"> }</span>
<span class="source-line-no">893</span><span id="line-893"></span>
<span class="source-line-no">894</span><span id="line-894"> /**</span>
<span class="source-line-no">895</span><span id="line-895"> * Create typed snapshot of the table. Snapshots are considered unique based on &lt;b&gt;the name of the</span>
<span class="source-line-no">896</span><span id="line-896"> * snapshot&lt;/b&gt;. Snapshots are taken sequentially even when requested concurrently, across all</span>
<span class="source-line-no">897</span><span id="line-897"> * tables. Attempts to take a snapshot with the same name (even a different type or with different</span>
<span class="source-line-no">898</span><span id="line-898"> * parameters) will fail with a {@link org.apache.hadoop.hbase.snapshot.SnapshotCreationException}</span>
<span class="source-line-no">899</span><span id="line-899"> * indicating the duplicate naming. Snapshot names follow the same naming constraints as tables in</span>
<span class="source-line-no">900</span><span id="line-900"> * HBase. See {@link org.apache.hadoop.hbase.TableName#isLegalFullyQualifiedTableName(byte[])}.</span>
<span class="source-line-no">901</span><span id="line-901"> * @param snapshotName name to give the snapshot on the filesystem. Must be unique from all other</span>
<span class="source-line-no">902</span><span id="line-902"> * snapshots stored on the cluster</span>
<span class="source-line-no">903</span><span id="line-903"> * @param tableName name of the table to snapshot</span>
<span class="source-line-no">904</span><span id="line-904"> * @param type type of snapshot to take</span>
<span class="source-line-no">905</span><span id="line-905"> */</span>
<span class="source-line-no">906</span><span id="line-906"> default CompletableFuture&lt;Void&gt; snapshot(String snapshotName, TableName tableName,</span>
<span class="source-line-no">907</span><span id="line-907"> SnapshotType type) {</span>
<span class="source-line-no">908</span><span id="line-908"> return snapshot(new SnapshotDescription(snapshotName, tableName, type));</span>
<span class="source-line-no">909</span><span id="line-909"> }</span>
<span class="source-line-no">910</span><span id="line-910"></span>
<span class="source-line-no">911</span><span id="line-911"> /**</span>
<span class="source-line-no">912</span><span id="line-912"> * Take a snapshot and wait for the server to complete that snapshot asynchronously. Snapshots are</span>
<span class="source-line-no">913</span><span id="line-913"> * taken sequentially even when requested concurrently, across all tables. Snapshots are</span>
<span class="source-line-no">914</span><span id="line-914"> * considered unique based on &lt;b&gt;the name of the snapshot&lt;/b&gt;. Attempts to take a snapshot with</span>
<span class="source-line-no">915</span><span id="line-915"> * the same name (even a different type or with different parameters) will fail with a</span>
<span class="source-line-no">916</span><span id="line-916"> * {@link org.apache.hadoop.hbase.snapshot.SnapshotCreationException} indicating the duplicate</span>
<span class="source-line-no">917</span><span id="line-917"> * naming. Snapshot names follow the same naming constraints as tables in HBase. See</span>
<span class="source-line-no">918</span><span id="line-918"> * {@link org.apache.hadoop.hbase.TableName#isLegalFullyQualifiedTableName(byte[])}. You should</span>
<span class="source-line-no">919</span><span id="line-919"> * probably use {@link #snapshot(String, org.apache.hadoop.hbase.TableName)} unless you are sure</span>
<span class="source-line-no">920</span><span id="line-920"> * about the type of snapshot that you want to take.</span>
<span class="source-line-no">921</span><span id="line-921"> * @param snapshot snapshot to take</span>
<span class="source-line-no">922</span><span id="line-922"> */</span>
<span class="source-line-no">923</span><span id="line-923"> CompletableFuture&lt;Void&gt; snapshot(SnapshotDescription snapshot);</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"> * Check the current state of the passed snapshot. There are three possible states:</span>
<span class="source-line-no">927</span><span id="line-927"> * &lt;ol&gt;</span>
<span class="source-line-no">928</span><span id="line-928"> * &lt;li&gt;running - returns &lt;tt&gt;false&lt;/tt&gt;&lt;/li&gt;</span>
<span class="source-line-no">929</span><span id="line-929"> * &lt;li&gt;finished - returns &lt;tt&gt;true&lt;/tt&gt;&lt;/li&gt;</span>
<span class="source-line-no">930</span><span id="line-930"> * &lt;li&gt;finished with error - throws the exception that caused the snapshot to fail&lt;/li&gt;</span>
<span class="source-line-no">931</span><span id="line-931"> * &lt;/ol&gt;</span>
<span class="source-line-no">932</span><span id="line-932"> * The cluster only knows about the most recent snapshot. Therefore, if another snapshot has been</span>
<span class="source-line-no">933</span><span id="line-933"> * run/started since the snapshot you are checking, you will receive an</span>
<span class="source-line-no">934</span><span id="line-934"> * {@link org.apache.hadoop.hbase.snapshot.UnknownSnapshotException}.</span>
<span class="source-line-no">935</span><span id="line-935"> * @param snapshot description of the snapshot to check</span>
<span class="source-line-no">936</span><span id="line-936"> * @return &lt;tt&gt;true&lt;/tt&gt; if the snapshot is completed, &lt;tt&gt;false&lt;/tt&gt; if the snapshot is still</span>
<span class="source-line-no">937</span><span id="line-937"> * running</span>
<span class="source-line-no">938</span><span id="line-938"> */</span>
<span class="source-line-no">939</span><span id="line-939"> CompletableFuture&lt;Boolean&gt; isSnapshotFinished(SnapshotDescription snapshot);</span>
<span class="source-line-no">940</span><span id="line-940"></span>
<span class="source-line-no">941</span><span id="line-941"> /**</span>
<span class="source-line-no">942</span><span id="line-942"> * Restore the specified snapshot on the original table. (The table must be disabled) If the</span>
<span class="source-line-no">943</span><span id="line-943"> * "hbase.snapshot.restore.take.failsafe.snapshot" configuration property is set to true, a</span>
<span class="source-line-no">944</span><span id="line-944"> * snapshot of the current table is taken before executing the restore operation. In case of</span>
<span class="source-line-no">945</span><span id="line-945"> * restore failure, the failsafe snapshot will be restored. If the restore completes without</span>
<span class="source-line-no">946</span><span id="line-946"> * problem the failsafe snapshot is deleted.</span>
<span class="source-line-no">947</span><span id="line-947"> * @param snapshotName name of the snapshot to restore</span>
<span class="source-line-no">948</span><span id="line-948"> */</span>
<span class="source-line-no">949</span><span id="line-949"> CompletableFuture&lt;Void&gt; restoreSnapshot(String snapshotName);</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"> * Restore the specified snapshot on the original table. (The table must be disabled) If</span>
<span class="source-line-no">953</span><span id="line-953"> * 'takeFailSafeSnapshot' is set to true, a snapshot of the current table is taken before</span>
<span class="source-line-no">954</span><span id="line-954"> * executing the restore operation. In case of restore failure, the failsafe snapshot will be</span>
<span class="source-line-no">955</span><span id="line-955"> * restored. If the restore completes without problem the failsafe snapshot is deleted. The</span>
<span class="source-line-no">956</span><span id="line-956"> * failsafe snapshot name is configurable by using the property</span>
<span class="source-line-no">957</span><span id="line-957"> * "hbase.snapshot.restore.failsafe.name".</span>
<span class="source-line-no">958</span><span id="line-958"> * @param snapshotName name of the snapshot to restore</span>
<span class="source-line-no">959</span><span id="line-959"> * @param takeFailSafeSnapshot true if the failsafe snapshot should be taken</span>
<span class="source-line-no">960</span><span id="line-960"> */</span>
<span class="source-line-no">961</span><span id="line-961"> default CompletableFuture&lt;Void&gt; restoreSnapshot(String snapshotName,</span>
<span class="source-line-no">962</span><span id="line-962"> boolean takeFailSafeSnapshot) {</span>
<span class="source-line-no">963</span><span id="line-963"> return restoreSnapshot(snapshotName, takeFailSafeSnapshot, false);</span>
<span class="source-line-no">964</span><span id="line-964"> }</span>
<span class="source-line-no">965</span><span id="line-965"></span>
<span class="source-line-no">966</span><span id="line-966"> /**</span>
<span class="source-line-no">967</span><span id="line-967"> * Restore the specified snapshot on the original table. (The table must be disabled) If</span>
<span class="source-line-no">968</span><span id="line-968"> * 'takeFailSafeSnapshot' is set to true, a snapshot of the current table is taken before</span>
<span class="source-line-no">969</span><span id="line-969"> * executing the restore operation. In case of restore failure, the failsafe snapshot will be</span>
<span class="source-line-no">970</span><span id="line-970"> * restored. If the restore completes without problem the failsafe snapshot is deleted. The</span>
<span class="source-line-no">971</span><span id="line-971"> * failsafe snapshot name is configurable by using the property</span>
<span class="source-line-no">972</span><span id="line-972"> * "hbase.snapshot.restore.failsafe.name".</span>
<span class="source-line-no">973</span><span id="line-973"> * @param snapshotName name of the snapshot to restore</span>
<span class="source-line-no">974</span><span id="line-974"> * @param takeFailSafeSnapshot true if the failsafe snapshot should be taken</span>
<span class="source-line-no">975</span><span id="line-975"> * @param restoreAcl &lt;code&gt;true&lt;/code&gt; to restore acl of snapshot</span>
<span class="source-line-no">976</span><span id="line-976"> */</span>
<span class="source-line-no">977</span><span id="line-977"> CompletableFuture&lt;Void&gt; restoreSnapshot(String snapshotName, boolean takeFailSafeSnapshot,</span>
<span class="source-line-no">978</span><span id="line-978"> boolean restoreAcl);</span>
<span class="source-line-no">979</span><span id="line-979"></span>
<span class="source-line-no">980</span><span id="line-980"> /**</span>
<span class="source-line-no">981</span><span id="line-981"> * Create a new table by cloning the snapshot content.</span>
<span class="source-line-no">982</span><span id="line-982"> * @param snapshotName name of the snapshot to be cloned</span>
<span class="source-line-no">983</span><span id="line-983"> * @param tableName name of the table where the snapshot will be restored</span>
<span class="source-line-no">984</span><span id="line-984"> */</span>
<span class="source-line-no">985</span><span id="line-985"> default CompletableFuture&lt;Void&gt; cloneSnapshot(String snapshotName, TableName tableName) {</span>
<span class="source-line-no">986</span><span id="line-986"> return cloneSnapshot(snapshotName, tableName, false);</span>
<span class="source-line-no">987</span><span id="line-987"> }</span>
<span class="source-line-no">988</span><span id="line-988"></span>
<span class="source-line-no">989</span><span id="line-989"> /**</span>
<span class="source-line-no">990</span><span id="line-990"> * Create a new table by cloning the snapshot content.</span>
<span class="source-line-no">991</span><span id="line-991"> * @param snapshotName name of the snapshot to be cloned</span>
<span class="source-line-no">992</span><span id="line-992"> * @param tableName name of the table where the snapshot will be restored</span>
<span class="source-line-no">993</span><span id="line-993"> * @param restoreAcl &lt;code&gt;true&lt;/code&gt; to restore acl of snapshot</span>
<span class="source-line-no">994</span><span id="line-994"> */</span>
<span class="source-line-no">995</span><span id="line-995"> default CompletableFuture&lt;Void&gt; cloneSnapshot(String snapshotName, TableName tableName,</span>
<span class="source-line-no">996</span><span id="line-996"> boolean restoreAcl) {</span>
<span class="source-line-no">997</span><span id="line-997"> return cloneSnapshot(snapshotName, tableName, restoreAcl, null);</span>
<span class="source-line-no">998</span><span id="line-998"> }</span>
<span class="source-line-no">999</span><span id="line-999"></span>
<span class="source-line-no">1000</span><span id="line-1000"> /**</span>
<span class="source-line-no">1001</span><span id="line-1001"> * Create a new table by cloning the snapshot content.</span>
<span class="source-line-no">1002</span><span id="line-1002"> * @param snapshotName name of the snapshot to be cloned</span>
<span class="source-line-no">1003</span><span id="line-1003"> * @param tableName name of the table where the snapshot will be restored</span>
<span class="source-line-no">1004</span><span id="line-1004"> * @param restoreAcl &lt;code&gt;true&lt;/code&gt; to restore acl of snapshot</span>
<span class="source-line-no">1005</span><span id="line-1005"> * @param customSFT specify the StroreFileTracker used for the table</span>
<span class="source-line-no">1006</span><span id="line-1006"> */</span>
<span class="source-line-no">1007</span><span id="line-1007"> CompletableFuture&lt;Void&gt; cloneSnapshot(String snapshotName, TableName tableName,</span>
<span class="source-line-no">1008</span><span id="line-1008"> boolean restoreAcl, String customSFT);</span>
<span class="source-line-no">1009</span><span id="line-1009"></span>
<span class="source-line-no">1010</span><span id="line-1010"> /**</span>
<span class="source-line-no">1011</span><span id="line-1011"> * List completed snapshots.</span>
<span class="source-line-no">1012</span><span id="line-1012"> * @return a list of snapshot descriptors for completed snapshots wrapped by a</span>
<span class="source-line-no">1013</span><span id="line-1013"> * {@link CompletableFuture}</span>
<span class="source-line-no">1014</span><span id="line-1014"> */</span>
<span class="source-line-no">1015</span><span id="line-1015"> CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listSnapshots();</span>
<span class="source-line-no">1016</span><span id="line-1016"></span>
<span class="source-line-no">1017</span><span id="line-1017"> /**</span>
<span class="source-line-no">1018</span><span id="line-1018"> * List all the completed snapshots matching the given pattern.</span>
<span class="source-line-no">1019</span><span id="line-1019"> * @param pattern The compiled regular expression to match against</span>
<span class="source-line-no">1020</span><span id="line-1020"> * @return - returns a List of SnapshotDescription wrapped by a {@link CompletableFuture}</span>
<span class="source-line-no">1021</span><span id="line-1021"> */</span>
<span class="source-line-no">1022</span><span id="line-1022"> CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listSnapshots(Pattern pattern);</span>
<span class="source-line-no">1023</span><span id="line-1023"></span>
<span class="source-line-no">1024</span><span id="line-1024"> /**</span>
<span class="source-line-no">1025</span><span id="line-1025"> * List all the completed snapshots matching the given table name pattern.</span>
<span class="source-line-no">1026</span><span id="line-1026"> * @param tableNamePattern The compiled table name regular expression to match against</span>
<span class="source-line-no">1027</span><span id="line-1027"> * @return - returns a List of completed SnapshotDescription wrapped by a</span>
<span class="source-line-no">1028</span><span id="line-1028"> * {@link CompletableFuture}</span>
<span class="source-line-no">1029</span><span id="line-1029"> */</span>
<span class="source-line-no">1030</span><span id="line-1030"> CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listTableSnapshots(Pattern tableNamePattern);</span>
<span class="source-line-no">1031</span><span id="line-1031"></span>
<span class="source-line-no">1032</span><span id="line-1032"> /**</span>
<span class="source-line-no">1033</span><span id="line-1033"> * List all the completed snapshots matching the given table name regular expression and snapshot</span>
<span class="source-line-no">1034</span><span id="line-1034"> * name regular expression.</span>
<span class="source-line-no">1035</span><span id="line-1035"> * @param tableNamePattern The compiled table name regular expression to match against</span>
<span class="source-line-no">1036</span><span id="line-1036"> * @param snapshotNamePattern The compiled snapshot name regular expression to match against</span>
<span class="source-line-no">1037</span><span id="line-1037"> * @return - returns a List of completed SnapshotDescription wrapped by a</span>
<span class="source-line-no">1038</span><span id="line-1038"> * {@link CompletableFuture}</span>
<span class="source-line-no">1039</span><span id="line-1039"> */</span>
<span class="source-line-no">1040</span><span id="line-1040"> CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listTableSnapshots(Pattern tableNamePattern,</span>
<span class="source-line-no">1041</span><span id="line-1041"> Pattern snapshotNamePattern);</span>
<span class="source-line-no">1042</span><span id="line-1042"></span>
<span class="source-line-no">1043</span><span id="line-1043"> /**</span>
<span class="source-line-no">1044</span><span id="line-1044"> * Delete an existing snapshot.</span>
<span class="source-line-no">1045</span><span id="line-1045"> * @param snapshotName name of the snapshot</span>
<span class="source-line-no">1046</span><span id="line-1046"> */</span>
<span class="source-line-no">1047</span><span id="line-1047"> CompletableFuture&lt;Void&gt; deleteSnapshot(String snapshotName);</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"> * Delete all existing snapshots.</span>
<span class="source-line-no">1051</span><span id="line-1051"> */</span>
<span class="source-line-no">1052</span><span id="line-1052"> CompletableFuture&lt;Void&gt; deleteSnapshots();</span>
<span class="source-line-no">1053</span><span id="line-1053"></span>
<span class="source-line-no">1054</span><span id="line-1054"> /**</span>
<span class="source-line-no">1055</span><span id="line-1055"> * Delete existing snapshots whose names match the pattern passed.</span>
<span class="source-line-no">1056</span><span id="line-1056"> * @param pattern pattern for names of the snapshot to match</span>
<span class="source-line-no">1057</span><span id="line-1057"> */</span>
<span class="source-line-no">1058</span><span id="line-1058"> CompletableFuture&lt;Void&gt; deleteSnapshots(Pattern pattern);</span>
<span class="source-line-no">1059</span><span id="line-1059"></span>
<span class="source-line-no">1060</span><span id="line-1060"> /**</span>
<span class="source-line-no">1061</span><span id="line-1061"> * Delete all existing snapshots matching the given table name pattern.</span>
<span class="source-line-no">1062</span><span id="line-1062"> * @param tableNamePattern The compiled table name regular expression to match against</span>
<span class="source-line-no">1063</span><span id="line-1063"> */</span>
<span class="source-line-no">1064</span><span id="line-1064"> CompletableFuture&lt;Void&gt; deleteTableSnapshots(Pattern tableNamePattern);</span>
<span class="source-line-no">1065</span><span id="line-1065"></span>
<span class="source-line-no">1066</span><span id="line-1066"> /**</span>
<span class="source-line-no">1067</span><span id="line-1067"> * Delete all existing snapshots matching the given table name regular expression and snapshot</span>
<span class="source-line-no">1068</span><span id="line-1068"> * name regular expression.</span>
<span class="source-line-no">1069</span><span id="line-1069"> * @param tableNamePattern The compiled table name regular expression to match against</span>
<span class="source-line-no">1070</span><span id="line-1070"> * @param snapshotNamePattern The compiled snapshot name regular expression to match against</span>
<span class="source-line-no">1071</span><span id="line-1071"> */</span>
<span class="source-line-no">1072</span><span id="line-1072"> CompletableFuture&lt;Void&gt; deleteTableSnapshots(Pattern tableNamePattern,</span>
<span class="source-line-no">1073</span><span id="line-1073"> Pattern snapshotNamePattern);</span>
<span class="source-line-no">1074</span><span id="line-1074"></span>
<span class="source-line-no">1075</span><span id="line-1075"> /**</span>
<span class="source-line-no">1076</span><span id="line-1076"> * Execute a distributed procedure on a cluster.</span>
<span class="source-line-no">1077</span><span id="line-1077"> * @param signature A distributed procedure is uniquely identified by its signature (default the</span>
<span class="source-line-no">1078</span><span id="line-1078"> * root ZK node name of the procedure).</span>
<span class="source-line-no">1079</span><span id="line-1079"> * @param instance The instance name of the procedure. For some procedures, this parameter is</span>
<span class="source-line-no">1080</span><span id="line-1080"> * optional.</span>
<span class="source-line-no">1081</span><span id="line-1081"> * @param props Property/Value pairs of properties passing to the procedure</span>
<span class="source-line-no">1082</span><span id="line-1082"> */</span>
<span class="source-line-no">1083</span><span id="line-1083"> CompletableFuture&lt;Void&gt; execProcedure(String signature, String instance,</span>
<span class="source-line-no">1084</span><span id="line-1084"> Map&lt;String, String&gt; props);</span>
<span class="source-line-no">1085</span><span id="line-1085"></span>
<span class="source-line-no">1086</span><span id="line-1086"> /**</span>
<span class="source-line-no">1087</span><span id="line-1087"> * Execute a distributed procedure on a cluster.</span>
<span class="source-line-no">1088</span><span id="line-1088"> * @param signature A distributed procedure is uniquely identified by its signature (default the</span>
<span class="source-line-no">1089</span><span id="line-1089"> * root ZK node name of the procedure).</span>
<span class="source-line-no">1090</span><span id="line-1090"> * @param instance The instance name of the procedure. For some procedures, this parameter is</span>
<span class="source-line-no">1091</span><span id="line-1091"> * optional.</span>
<span class="source-line-no">1092</span><span id="line-1092"> * @param props Property/Value pairs of properties passing to the procedure</span>
<span class="source-line-no">1093</span><span id="line-1093"> * @return data returned after procedure execution. null if no return data.</span>
<span class="source-line-no">1094</span><span id="line-1094"> */</span>
<span class="source-line-no">1095</span><span id="line-1095"> CompletableFuture&lt;byte[]&gt; execProcedureWithReturn(String signature, String instance,</span>
<span class="source-line-no">1096</span><span id="line-1096"> Map&lt;String, String&gt; props);</span>
<span class="source-line-no">1097</span><span id="line-1097"></span>
<span class="source-line-no">1098</span><span id="line-1098"> /**</span>
<span class="source-line-no">1099</span><span id="line-1099"> * Check the current state of the specified procedure. There are three possible states:</span>
<span class="source-line-no">1100</span><span id="line-1100"> * &lt;ol&gt;</span>
<span class="source-line-no">1101</span><span id="line-1101"> * &lt;li&gt;running - returns &lt;tt&gt;false&lt;/tt&gt;&lt;/li&gt;</span>
<span class="source-line-no">1102</span><span id="line-1102"> * &lt;li&gt;finished - returns &lt;tt&gt;true&lt;/tt&gt;&lt;/li&gt;</span>
<span class="source-line-no">1103</span><span id="line-1103"> * &lt;li&gt;finished with error - throws the exception that caused the procedure to fail&lt;/li&gt;</span>
<span class="source-line-no">1104</span><span id="line-1104"> * &lt;/ol&gt;</span>
<span class="source-line-no">1105</span><span id="line-1105"> * @param signature The signature that uniquely identifies a procedure</span>
<span class="source-line-no">1106</span><span id="line-1106"> * @param instance The instance name of the procedure</span>
<span class="source-line-no">1107</span><span id="line-1107"> * @param props Property/Value pairs of properties passing to the procedure</span>
<span class="source-line-no">1108</span><span id="line-1108"> * @return true if the specified procedure is finished successfully, false if it is still running.</span>
<span class="source-line-no">1109</span><span id="line-1109"> * The value is wrapped by {@link CompletableFuture}</span>
<span class="source-line-no">1110</span><span id="line-1110"> */</span>
<span class="source-line-no">1111</span><span id="line-1111"> CompletableFuture&lt;Boolean&gt; isProcedureFinished(String signature, String instance,</span>
<span class="source-line-no">1112</span><span id="line-1112"> Map&lt;String, String&gt; props);</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"> * Abort a procedure Do not use. Usually it is ignored but if not, it can do more damage than</span>
<span class="source-line-no">1116</span><span id="line-1116"> * good. See hbck2.</span>
<span class="source-line-no">1117</span><span id="line-1117"> * @param procId ID of the procedure to abort</span>
<span class="source-line-no">1118</span><span id="line-1118"> * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted?</span>
<span class="source-line-no">1119</span><span id="line-1119"> * @return true if aborted, false if procedure already completed or does not exist. the value is</span>
<span class="source-line-no">1120</span><span id="line-1120"> * wrapped by {@link CompletableFuture}</span>
<span class="source-line-no">1121</span><span id="line-1121"> * @deprecated since 2.1.1 and will be removed in 4.0.0.</span>
<span class="source-line-no">1122</span><span id="line-1122"> * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21223"&gt;HBASE-21223&lt;/a&gt;</span>
<span class="source-line-no">1123</span><span id="line-1123"> */</span>
<span class="source-line-no">1124</span><span id="line-1124"> @Deprecated</span>
<span class="source-line-no">1125</span><span id="line-1125"> CompletableFuture&lt;Boolean&gt; abortProcedure(long procId, boolean mayInterruptIfRunning);</span>
<span class="source-line-no">1126</span><span id="line-1126"></span>
<span class="source-line-no">1127</span><span id="line-1127"> /**</span>
<span class="source-line-no">1128</span><span id="line-1128"> * List procedures</span>
<span class="source-line-no">1129</span><span id="line-1129"> * @return procedure list JSON wrapped by {@link CompletableFuture}</span>
<span class="source-line-no">1130</span><span id="line-1130"> */</span>
<span class="source-line-no">1131</span><span id="line-1131"> CompletableFuture&lt;String&gt; getProcedures();</span>
<span class="source-line-no">1132</span><span id="line-1132"></span>
<span class="source-line-no">1133</span><span id="line-1133"> /**</span>
<span class="source-line-no">1134</span><span id="line-1134"> * List locks.</span>
<span class="source-line-no">1135</span><span id="line-1135"> * @return lock list JSON wrapped by {@link CompletableFuture}</span>
<span class="source-line-no">1136</span><span id="line-1136"> */</span>
<span class="source-line-no">1137</span><span id="line-1137"> CompletableFuture&lt;String&gt; getLocks();</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"> * Mark region server(s) as decommissioned to prevent additional regions from getting assigned to</span>
<span class="source-line-no">1141</span><span id="line-1141"> * them. Optionally unload the regions on the servers. If there are multiple servers to be</span>
<span class="source-line-no">1142</span><span id="line-1142"> * decommissioned, decommissioning them at the same time can prevent wasteful region movements.</span>
<span class="source-line-no">1143</span><span id="line-1143"> * Region unloading is asynchronous.</span>
<span class="source-line-no">1144</span><span id="line-1144"> * @param servers The list of servers to decommission.</span>
<span class="source-line-no">1145</span><span id="line-1145"> * @param offload True to offload the regions from the decommissioned servers</span>
<span class="source-line-no">1146</span><span id="line-1146"> */</span>
<span class="source-line-no">1147</span><span id="line-1147"> CompletableFuture&lt;Void&gt; decommissionRegionServers(List&lt;ServerName&gt; servers, boolean offload);</span>
<span class="source-line-no">1148</span><span id="line-1148"></span>
<span class="source-line-no">1149</span><span id="line-1149"> /**</span>
<span class="source-line-no">1150</span><span id="line-1150"> * List region servers marked as decommissioned, which can not be assigned regions.</span>
<span class="source-line-no">1151</span><span id="line-1151"> * @return List of decommissioned region servers wrapped by {@link CompletableFuture}</span>
<span class="source-line-no">1152</span><span id="line-1152"> */</span>
<span class="source-line-no">1153</span><span id="line-1153"> CompletableFuture&lt;List&lt;ServerName&gt;&gt; listDecommissionedRegionServers();</span>
<span class="source-line-no">1154</span><span id="line-1154"></span>
<span class="source-line-no">1155</span><span id="line-1155"> /**</span>
<span class="source-line-no">1156</span><span id="line-1156"> * Remove decommission marker from a region server to allow regions assignments. Load regions onto</span>
<span class="source-line-no">1157</span><span id="line-1157"> * the server if a list of regions is given. Region loading is asynchronous.</span>
<span class="source-line-no">1158</span><span id="line-1158"> * @param server The server to recommission.</span>
<span class="source-line-no">1159</span><span id="line-1159"> * @param encodedRegionNames Regions to load onto the server.</span>
<span class="source-line-no">1160</span><span id="line-1160"> */</span>
<span class="source-line-no">1161</span><span id="line-1161"> CompletableFuture&lt;Void&gt; recommissionRegionServer(ServerName server,</span>
<span class="source-line-no">1162</span><span id="line-1162"> List&lt;byte[]&gt; encodedRegionNames);</span>
<span class="source-line-no">1163</span><span id="line-1163"></span>
<span class="source-line-no">1164</span><span id="line-1164"> /** Returns cluster status wrapped by {@link CompletableFuture} */</span>
<span class="source-line-no">1165</span><span id="line-1165"> CompletableFuture&lt;ClusterMetrics&gt; getClusterMetrics();</span>
<span class="source-line-no">1166</span><span id="line-1166"></span>
<span class="source-line-no">1167</span><span id="line-1167"> /** Returns cluster status wrapped by {@link CompletableFuture} */</span>
<span class="source-line-no">1168</span><span id="line-1168"> CompletableFuture&lt;ClusterMetrics&gt; getClusterMetrics(EnumSet&lt;Option&gt; options);</span>
<span class="source-line-no">1169</span><span id="line-1169"></span>
<span class="source-line-no">1170</span><span id="line-1170"> /** Returns current master server name wrapped by {@link CompletableFuture} */</span>
<span class="source-line-no">1171</span><span id="line-1171"> default CompletableFuture&lt;ServerName&gt; getMaster() {</span>
<span class="source-line-no">1172</span><span id="line-1172"> return getClusterMetrics(EnumSet.of(Option.MASTER)).thenApply(ClusterMetrics::getMasterName);</span>
<span class="source-line-no">1173</span><span id="line-1173"> }</span>
<span class="source-line-no">1174</span><span id="line-1174"></span>
<span class="source-line-no">1175</span><span id="line-1175"> /** Returns current backup master list wrapped by {@link CompletableFuture} */</span>
<span class="source-line-no">1176</span><span id="line-1176"> default CompletableFuture&lt;Collection&lt;ServerName&gt;&gt; getBackupMasters() {</span>
<span class="source-line-no">1177</span><span id="line-1177"> return getClusterMetrics(EnumSet.of(Option.BACKUP_MASTERS))</span>
<span class="source-line-no">1178</span><span id="line-1178"> .thenApply(ClusterMetrics::getBackupMasterNames);</span>
<span class="source-line-no">1179</span><span id="line-1179"> }</span>
<span class="source-line-no">1180</span><span id="line-1180"></span>
<span class="source-line-no">1181</span><span id="line-1181"> /** Returns current live region servers list wrapped by {@link CompletableFuture} */</span>
<span class="source-line-no">1182</span><span id="line-1182"> default CompletableFuture&lt;Collection&lt;ServerName&gt;&gt; getRegionServers() {</span>
<span class="source-line-no">1183</span><span id="line-1183"> return getClusterMetrics(EnumSet.of(Option.SERVERS_NAME))</span>
<span class="source-line-no">1184</span><span id="line-1184"> .thenApply(ClusterMetrics::getServersName);</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"> default CompletableFuture&lt;Collection&lt;ServerName&gt;&gt;</span>
<span class="source-line-no">1188</span><span id="line-1188"> getRegionServers(boolean excludeDecommissionedRS) {</span>
<span class="source-line-no">1189</span><span id="line-1189"> CompletableFuture&lt;Collection&lt;ServerName&gt;&gt; future = new CompletableFuture&lt;&gt;();</span>
<span class="source-line-no">1190</span><span id="line-1190"> addListener(</span>
<span class="source-line-no">1191</span><span id="line-1191"> getClusterMetrics(EnumSet.of(Option.SERVERS_NAME)).thenApply(ClusterMetrics::getServersName),</span>
<span class="source-line-no">1192</span><span id="line-1192"> (allServers, err) -&gt; {</span>
<span class="source-line-no">1193</span><span id="line-1193"> if (err != null) {</span>
<span class="source-line-no">1194</span><span id="line-1194"> future.completeExceptionally(err);</span>
<span class="source-line-no">1195</span><span id="line-1195"> } else {</span>
<span class="source-line-no">1196</span><span id="line-1196"> if (!excludeDecommissionedRS) {</span>
<span class="source-line-no">1197</span><span id="line-1197"> future.complete(allServers);</span>
<span class="source-line-no">1198</span><span id="line-1198"> } else {</span>
<span class="source-line-no">1199</span><span id="line-1199"> addListener(listDecommissionedRegionServers(), (decomServers, decomErr) -&gt; {</span>
<span class="source-line-no">1200</span><span id="line-1200"> if (decomErr != null) {</span>
<span class="source-line-no">1201</span><span id="line-1201"> future.completeExceptionally(decomErr);</span>
<span class="source-line-no">1202</span><span id="line-1202"> } else {</span>
<span class="source-line-no">1203</span><span id="line-1203"> future.complete(allServers.stream().filter(s -&gt; !decomServers.contains(s))</span>
<span class="source-line-no">1204</span><span id="line-1204"> .collect(ImmutableList.toImmutableList()));</span>
<span class="source-line-no">1205</span><span id="line-1205"> }</span>
<span class="source-line-no">1206</span><span id="line-1206"> });</span>
<span class="source-line-no">1207</span><span id="line-1207"> }</span>
<span class="source-line-no">1208</span><span id="line-1208"> }</span>
<span class="source-line-no">1209</span><span id="line-1209"> });</span>
<span class="source-line-no">1210</span><span id="line-1210"> return future;</span>
<span class="source-line-no">1211</span><span id="line-1211"> }</span>
<span class="source-line-no">1212</span><span id="line-1212"></span>
<span class="source-line-no">1213</span><span id="line-1213"> /** Returns a list of master coprocessors wrapped by {@link CompletableFuture} */</span>
<span class="source-line-no">1214</span><span id="line-1214"> default CompletableFuture&lt;List&lt;String&gt;&gt; getMasterCoprocessorNames() {</span>
<span class="source-line-no">1215</span><span id="line-1215"> return getClusterMetrics(EnumSet.of(Option.MASTER_COPROCESSORS))</span>
<span class="source-line-no">1216</span><span id="line-1216"> .thenApply(ClusterMetrics::getMasterCoprocessorNames);</span>
<span class="source-line-no">1217</span><span id="line-1217"> }</span>
<span class="source-line-no">1218</span><span id="line-1218"></span>
<span class="source-line-no">1219</span><span id="line-1219"> /**</span>
<span class="source-line-no">1220</span><span id="line-1220"> * Get the info port of the current master if one is available.</span>
<span class="source-line-no">1221</span><span id="line-1221"> * @return master info port</span>
<span class="source-line-no">1222</span><span id="line-1222"> */</span>
<span class="source-line-no">1223</span><span id="line-1223"> default CompletableFuture&lt;Integer&gt; getMasterInfoPort() {</span>
<span class="source-line-no">1224</span><span id="line-1224"> return getClusterMetrics(EnumSet.of(Option.MASTER_INFO_PORT))</span>
<span class="source-line-no">1225</span><span id="line-1225"> .thenApply(ClusterMetrics::getMasterInfoPort);</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"> * Shuts down the HBase cluster.</span>
<span class="source-line-no">1230</span><span id="line-1230"> */</span>
<span class="source-line-no">1231</span><span id="line-1231"> CompletableFuture&lt;Void&gt; shutdown();</span>
<span class="source-line-no">1232</span><span id="line-1232"></span>
<span class="source-line-no">1233</span><span id="line-1233"> /**</span>
<span class="source-line-no">1234</span><span id="line-1234"> * Shuts down the current HBase master only.</span>
<span class="source-line-no">1235</span><span id="line-1235"> */</span>
<span class="source-line-no">1236</span><span id="line-1236"> CompletableFuture&lt;Void&gt; stopMaster();</span>
<span class="source-line-no">1237</span><span id="line-1237"></span>
<span class="source-line-no">1238</span><span id="line-1238"> /**</span>
<span class="source-line-no">1239</span><span id="line-1239"> * Stop the designated regionserver.</span>
<span class="source-line-no">1240</span><span id="line-1240"> */</span>
<span class="source-line-no">1241</span><span id="line-1241"> CompletableFuture&lt;Void&gt; stopRegionServer(ServerName serverName);</span>
<span class="source-line-no">1242</span><span id="line-1242"></span>
<span class="source-line-no">1243</span><span id="line-1243"> /**</span>
<span class="source-line-no">1244</span><span id="line-1244"> * Update the configuration and trigger an online config change on the regionserver.</span>
<span class="source-line-no">1245</span><span id="line-1245"> * @param serverName : The server whose config needs to be updated.</span>
<span class="source-line-no">1246</span><span id="line-1246"> */</span>
<span class="source-line-no">1247</span><span id="line-1247"> CompletableFuture&lt;Void&gt; updateConfiguration(ServerName serverName);</span>
<span class="source-line-no">1248</span><span id="line-1248"></span>
<span class="source-line-no">1249</span><span id="line-1249"> /**</span>
<span class="source-line-no">1250</span><span id="line-1250"> * Update the configuration and trigger an online config change on all the masters and</span>
<span class="source-line-no">1251</span><span id="line-1251"> * regionservers.</span>
<span class="source-line-no">1252</span><span id="line-1252"> */</span>
<span class="source-line-no">1253</span><span id="line-1253"> CompletableFuture&lt;Void&gt; updateConfiguration();</span>
<span class="source-line-no">1254</span><span id="line-1254"></span>
<span class="source-line-no">1255</span><span id="line-1255"> /**</span>
<span class="source-line-no">1256</span><span id="line-1256"> * Update the configuration and trigger an online config change on all the regionservers in the</span>
<span class="source-line-no">1257</span><span id="line-1257"> * RSGroup.</span>
<span class="source-line-no">1258</span><span id="line-1258"> * @param groupName the group name</span>
<span class="source-line-no">1259</span><span id="line-1259"> */</span>
<span class="source-line-no">1260</span><span id="line-1260"> CompletableFuture&lt;Void&gt; updateConfiguration(String groupName);</span>
<span class="source-line-no">1261</span><span id="line-1261"></span>
<span class="source-line-no">1262</span><span id="line-1262"> /**</span>
<span class="source-line-no">1263</span><span id="line-1263"> * Roll the log writer. I.e. for filesystem based write ahead logs, start writing to a new file.</span>
<span class="source-line-no">1264</span><span id="line-1264"> * &lt;p&gt;</span>
<span class="source-line-no">1265</span><span id="line-1265"> * When the returned CompletableFuture is done, it only means the rollWALWriter request was sent</span>
<span class="source-line-no">1266</span><span id="line-1266"> * to the region server and may need some time to finish the rollWALWriter operation. As a side</span>
<span class="source-line-no">1267</span><span id="line-1267"> * effect of this call, the named region server may schedule store flushes at the request of the</span>
<span class="source-line-no">1268</span><span id="line-1268"> * wal.</span>
<span class="source-line-no">1269</span><span id="line-1269"> * @param serverName The servername of the region server.</span>
<span class="source-line-no">1270</span><span id="line-1270"> */</span>
<span class="source-line-no">1271</span><span id="line-1271"> CompletableFuture&lt;Void&gt; rollWALWriter(ServerName serverName);</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"> * Clear compacting queues on a region server.</span>
<span class="source-line-no">1275</span><span id="line-1275"> * @param serverName The servername of the region server.</span>
<span class="source-line-no">1276</span><span id="line-1276"> * @param queues the set of queue name</span>
<span class="source-line-no">1277</span><span id="line-1277"> */</span>
<span class="source-line-no">1278</span><span id="line-1278"> CompletableFuture&lt;Void&gt; clearCompactionQueues(ServerName serverName, Set&lt;String&gt; queues);</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"> * Get a list of {@link RegionMetrics} of all regions hosted on a region server.</span>
<span class="source-line-no">1282</span><span id="line-1282"> * @return list of {@link RegionMetrics} wrapped by {@link CompletableFuture}</span>
<span class="source-line-no">1283</span><span id="line-1283"> */</span>
<span class="source-line-no">1284</span><span id="line-1284"> CompletableFuture&lt;List&lt;RegionMetrics&gt;&gt; getRegionMetrics(ServerName serverName);</span>
<span class="source-line-no">1285</span><span id="line-1285"></span>
<span class="source-line-no">1286</span><span id="line-1286"> /**</span>
<span class="source-line-no">1287</span><span id="line-1287"> * Get a list of {@link RegionMetrics} of all regions hosted on a region server for a table.</span>
<span class="source-line-no">1288</span><span id="line-1288"> * @return a list of {@link RegionMetrics} wrapped by {@link CompletableFuture}</span>
<span class="source-line-no">1289</span><span id="line-1289"> */</span>
<span class="source-line-no">1290</span><span id="line-1290"> CompletableFuture&lt;List&lt;RegionMetrics&gt;&gt; getRegionMetrics(ServerName serverName,</span>
<span class="source-line-no">1291</span><span id="line-1291"> TableName tableName);</span>
<span class="source-line-no">1292</span><span id="line-1292"></span>
<span class="source-line-no">1293</span><span id="line-1293"> /**</span>
<span class="source-line-no">1294</span><span id="line-1294"> * Check whether master is in maintenance mode</span>
<span class="source-line-no">1295</span><span id="line-1295"> * @return true if master is in maintenance mode, false otherwise. The return value will be</span>
<span class="source-line-no">1296</span><span id="line-1296"> * wrapped by a {@link CompletableFuture}</span>
<span class="source-line-no">1297</span><span id="line-1297"> */</span>
<span class="source-line-no">1298</span><span id="line-1298"> CompletableFuture&lt;Boolean&gt; isMasterInMaintenanceMode();</span>
<span class="source-line-no">1299</span><span id="line-1299"></span>
<span class="source-line-no">1300</span><span id="line-1300"> /**</span>
<span class="source-line-no">1301</span><span id="line-1301"> * Get the current compaction state of a table. It could be in a major compaction, a minor</span>
<span class="source-line-no">1302</span><span id="line-1302"> * compaction, both, or none.</span>
<span class="source-line-no">1303</span><span id="line-1303"> * @param tableName table to examine</span>
<span class="source-line-no">1304</span><span id="line-1304"> * @return the current compaction state wrapped by a {@link CompletableFuture}</span>
<span class="source-line-no">1305</span><span id="line-1305"> */</span>
<span class="source-line-no">1306</span><span id="line-1306"> default CompletableFuture&lt;CompactionState&gt; getCompactionState(TableName tableName) {</span>
<span class="source-line-no">1307</span><span id="line-1307"> return getCompactionState(tableName, CompactType.NORMAL);</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"> /**</span>
<span class="source-line-no">1311</span><span id="line-1311"> * Get the current compaction state of a table. It could be in a major compaction, a minor</span>
<span class="source-line-no">1312</span><span id="line-1312"> * compaction, both, or none.</span>
<span class="source-line-no">1313</span><span id="line-1313"> * @param tableName table to examine</span>
<span class="source-line-no">1314</span><span id="line-1314"> * @param compactType {@link org.apache.hadoop.hbase.client.CompactType}</span>
<span class="source-line-no">1315</span><span id="line-1315"> * @return the current compaction state wrapped by a {@link CompletableFuture}</span>
<span class="source-line-no">1316</span><span id="line-1316"> */</span>
<span class="source-line-no">1317</span><span id="line-1317"> CompletableFuture&lt;CompactionState&gt; getCompactionState(TableName tableName,</span>
<span class="source-line-no">1318</span><span id="line-1318"> CompactType compactType);</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"> * Get the current compaction state of region. It could be in a major compaction, a minor</span>
<span class="source-line-no">1322</span><span id="line-1322"> * compaction, both, or none.</span>
<span class="source-line-no">1323</span><span id="line-1323"> * @param regionName region to examine</span>
<span class="source-line-no">1324</span><span id="line-1324"> * @return the current compaction state wrapped by a {@link CompletableFuture}</span>
<span class="source-line-no">1325</span><span id="line-1325"> */</span>
<span class="source-line-no">1326</span><span id="line-1326"> CompletableFuture&lt;CompactionState&gt; getCompactionStateForRegion(byte[] regionName);</span>
<span class="source-line-no">1327</span><span id="line-1327"></span>
<span class="source-line-no">1328</span><span id="line-1328"> /**</span>
<span class="source-line-no">1329</span><span id="line-1329"> * Get the timestamp of the last major compaction for the passed table.</span>
<span class="source-line-no">1330</span><span id="line-1330"> * &lt;p&gt;</span>
<span class="source-line-no">1331</span><span id="line-1331"> * The timestamp of the oldest HFile resulting from a major compaction of that table, or not</span>
<span class="source-line-no">1332</span><span id="line-1332"> * present if no such HFile could be found.</span>
<span class="source-line-no">1333</span><span id="line-1333"> * @param tableName table to examine</span>
<span class="source-line-no">1334</span><span id="line-1334"> * @return the last major compaction timestamp wrapped by a {@link CompletableFuture}</span>
<span class="source-line-no">1335</span><span id="line-1335"> */</span>
<span class="source-line-no">1336</span><span id="line-1336"> CompletableFuture&lt;Optional&lt;Long&gt;&gt; getLastMajorCompactionTimestamp(TableName tableName);</span>
<span class="source-line-no">1337</span><span id="line-1337"></span>
<span class="source-line-no">1338</span><span id="line-1338"> /**</span>
<span class="source-line-no">1339</span><span id="line-1339"> * Get the timestamp of the last major compaction for the passed region.</span>
<span class="source-line-no">1340</span><span id="line-1340"> * &lt;p&gt;</span>
<span class="source-line-no">1341</span><span id="line-1341"> * The timestamp of the oldest HFile resulting from a major compaction of that region, or not</span>
<span class="source-line-no">1342</span><span id="line-1342"> * present if no such HFile could be found.</span>
<span class="source-line-no">1343</span><span id="line-1343"> * @param regionName region to examine</span>
<span class="source-line-no">1344</span><span id="line-1344"> * @return the last major compaction timestamp wrapped by a {@link CompletableFuture}</span>
<span class="source-line-no">1345</span><span id="line-1345"> */</span>
<span class="source-line-no">1346</span><span id="line-1346"> CompletableFuture&lt;Optional&lt;Long&gt;&gt; getLastMajorCompactionTimestampForRegion(byte[] regionName);</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"> * Returns the list of supported security capabilities. The return value will be wrapped by a</span>
<span class="source-line-no">1350</span><span id="line-1350"> * {@link CompletableFuture}.</span>
<span class="source-line-no">1351</span><span id="line-1351"> */</span>
<span class="source-line-no">1352</span><span id="line-1352"> CompletableFuture&lt;List&lt;SecurityCapability&gt;&gt; getSecurityCapabilities();</span>
<span class="source-line-no">1353</span><span id="line-1353"></span>
<span class="source-line-no">1354</span><span id="line-1354"> /**</span>
<span class="source-line-no">1355</span><span id="line-1355"> * Turn the load balancer on or off.</span>
<span class="source-line-no">1356</span><span id="line-1356"> * @param on Set to &lt;code&gt;true&lt;/code&gt; to enable, &lt;code&gt;false&lt;/code&gt; to disable.</span>
<span class="source-line-no">1357</span><span id="line-1357"> * @return Previous balancer value wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">1358</span><span id="line-1358"> */</span>
<span class="source-line-no">1359</span><span id="line-1359"> default CompletableFuture&lt;Boolean&gt; balancerSwitch(boolean on) {</span>
<span class="source-line-no">1360</span><span id="line-1360"> return balancerSwitch(on, false);</span>
<span class="source-line-no">1361</span><span id="line-1361"> }</span>
<span class="source-line-no">1362</span><span id="line-1362"></span>
<span class="source-line-no">1363</span><span id="line-1363"> /**</span>
<span class="source-line-no">1364</span><span id="line-1364"> * Turn the load balancer on or off.</span>
<span class="source-line-no">1365</span><span id="line-1365"> * &lt;p/&gt;</span>
<span class="source-line-no">1366</span><span id="line-1366"> * Notice that, the method itself is always non-blocking, which means it will always return</span>
<span class="source-line-no">1367</span><span id="line-1367"> * immediately. The {@code drainRITs} parameter only effects when will we complete the returned</span>
<span class="source-line-no">1368</span><span id="line-1368"> * {@link CompletableFuture}.</span>
<span class="source-line-no">1369</span><span id="line-1369"> * @param on Set to &lt;code&gt;true&lt;/code&gt; to enable, &lt;code&gt;false&lt;/code&gt; to disable.</span>
<span class="source-line-no">1370</span><span id="line-1370"> * @param drainRITs If &lt;code&gt;true&lt;/code&gt;, it waits until current balance() call, if outstanding,</span>
<span class="source-line-no">1371</span><span id="line-1371"> * to return.</span>
<span class="source-line-no">1372</span><span id="line-1372"> * @return Previous balancer value wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">1373</span><span id="line-1373"> */</span>
<span class="source-line-no">1374</span><span id="line-1374"> CompletableFuture&lt;Boolean&gt; balancerSwitch(boolean on, boolean drainRITs);</span>
<span class="source-line-no">1375</span><span id="line-1375"></span>
<span class="source-line-no">1376</span><span id="line-1376"> /**</span>
<span class="source-line-no">1377</span><span id="line-1377"> * Invoke the balancer. Will run the balancer and if regions to move, it will go ahead and do the</span>
<span class="source-line-no">1378</span><span id="line-1378"> * reassignments. Can NOT run for various reasons. Check logs.</span>
<span class="source-line-no">1379</span><span id="line-1379"> * @return True if balancer ran, false otherwise. The return value will be wrapped by a</span>
<span class="source-line-no">1380</span><span id="line-1380"> * {@link CompletableFuture}.</span>
<span class="source-line-no">1381</span><span id="line-1381"> */</span>
<span class="source-line-no">1382</span><span id="line-1382"> default CompletableFuture&lt;Boolean&gt; balance() {</span>
<span class="source-line-no">1383</span><span id="line-1383"> return balance(BalanceRequest.defaultInstance()).thenApply(BalanceResponse::isBalancerRan);</span>
<span class="source-line-no">1384</span><span id="line-1384"> }</span>
<span class="source-line-no">1385</span><span id="line-1385"></span>
<span class="source-line-no">1386</span><span id="line-1386"> /**</span>
<span class="source-line-no">1387</span><span id="line-1387"> * Invoke the balancer. Will run the balancer and if regions to move, it will go ahead and do the</span>
<span class="source-line-no">1388</span><span id="line-1388"> * reassignments. If there is region in transition, force parameter of true would still run</span>
<span class="source-line-no">1389</span><span id="line-1389"> * balancer. Can *not* run for other reasons. Check logs.</span>
<span class="source-line-no">1390</span><span id="line-1390"> * @param forcible whether we should force balance even if there is region in transition.</span>
<span class="source-line-no">1391</span><span id="line-1391"> * @return True if balancer ran, false otherwise. The return value will be wrapped by a</span>
<span class="source-line-no">1392</span><span id="line-1392"> * {@link CompletableFuture}.</span>
<span class="source-line-no">1393</span><span id="line-1393"> * @deprecated Since 2.5.0. Will be removed in 4.0.0. Use {@link #balance(BalanceRequest)}</span>
<span class="source-line-no">1394</span><span id="line-1394"> * instead.</span>
<span class="source-line-no">1395</span><span id="line-1395"> */</span>
<span class="source-line-no">1396</span><span id="line-1396"> @Deprecated</span>
<span class="source-line-no">1397</span><span id="line-1397"> default CompletableFuture&lt;Boolean&gt; balance(boolean forcible) {</span>
<span class="source-line-no">1398</span><span id="line-1398"> return balance(BalanceRequest.newBuilder().setIgnoreRegionsInTransition(forcible).build())</span>
<span class="source-line-no">1399</span><span id="line-1399"> .thenApply(BalanceResponse::isBalancerRan);</span>
<span class="source-line-no">1400</span><span id="line-1400"> }</span>
<span class="source-line-no">1401</span><span id="line-1401"></span>
<span class="source-line-no">1402</span><span id="line-1402"> /**</span>
<span class="source-line-no">1403</span><span id="line-1403"> * Invoke the balancer with the given balance request. The BalanceRequest defines how the balancer</span>
<span class="source-line-no">1404</span><span id="line-1404"> * will run. See {@link BalanceRequest} for more details.</span>
<span class="source-line-no">1405</span><span id="line-1405"> * @param request defines how the balancer should run</span>
<span class="source-line-no">1406</span><span id="line-1406"> * @return {@link BalanceResponse} with details about the results of the invocation.</span>
<span class="source-line-no">1407</span><span id="line-1407"> */</span>
<span class="source-line-no">1408</span><span id="line-1408"> CompletableFuture&lt;BalanceResponse&gt; balance(BalanceRequest request);</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"> * Query the current state of the balancer.</span>
<span class="source-line-no">1412</span><span id="line-1412"> * @return true if the balance switch is on, false otherwise. The return value will be wrapped by</span>
<span class="source-line-no">1413</span><span id="line-1413"> * a {@link CompletableFuture}.</span>
<span class="source-line-no">1414</span><span id="line-1414"> */</span>
<span class="source-line-no">1415</span><span id="line-1415"> CompletableFuture&lt;Boolean&gt; isBalancerEnabled();</span>
<span class="source-line-no">1416</span><span id="line-1416"></span>
<span class="source-line-no">1417</span><span id="line-1417"> /**</span>
<span class="source-line-no">1418</span><span id="line-1418"> * Set region normalizer on/off.</span>
<span class="source-line-no">1419</span><span id="line-1419"> * @param on whether normalizer should be on or off</span>
<span class="source-line-no">1420</span><span id="line-1420"> * @return Previous normalizer value wrapped by a {@link CompletableFuture}</span>
<span class="source-line-no">1421</span><span id="line-1421"> */</span>
<span class="source-line-no">1422</span><span id="line-1422"> CompletableFuture&lt;Boolean&gt; normalizerSwitch(boolean on);</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"> * Query the current state of the region normalizer</span>
<span class="source-line-no">1426</span><span id="line-1426"> * @return true if region normalizer is on, false otherwise. The return value will be wrapped by a</span>
<span class="source-line-no">1427</span><span id="line-1427"> * {@link CompletableFuture}</span>
<span class="source-line-no">1428</span><span id="line-1428"> */</span>
<span class="source-line-no">1429</span><span id="line-1429"> CompletableFuture&lt;Boolean&gt; isNormalizerEnabled();</span>
<span class="source-line-no">1430</span><span id="line-1430"></span>
<span class="source-line-no">1431</span><span id="line-1431"> /**</span>
<span class="source-line-no">1432</span><span id="line-1432"> * Invoke region normalizer. Can NOT run for various reasons. Check logs.</span>
<span class="source-line-no">1433</span><span id="line-1433"> * @return true if region normalizer ran, false otherwise. The return value will be wrapped by a</span>
<span class="source-line-no">1434</span><span id="line-1434"> * {@link CompletableFuture}</span>
<span class="source-line-no">1435</span><span id="line-1435"> */</span>
<span class="source-line-no">1436</span><span id="line-1436"> default CompletableFuture&lt;Boolean&gt; normalize() {</span>
<span class="source-line-no">1437</span><span id="line-1437"> return normalize(new NormalizeTableFilterParams.Builder().build());</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"> /**</span>
<span class="source-line-no">1441</span><span id="line-1441"> * Invoke region normalizer. Can NOT run for various reasons. Check logs.</span>
<span class="source-line-no">1442</span><span id="line-1442"> * @param ntfp limit to tables matching the specified filter.</span>
<span class="source-line-no">1443</span><span id="line-1443"> * @return true if region normalizer ran, false otherwise. The return value will be wrapped by a</span>
<span class="source-line-no">1444</span><span id="line-1444"> * {@link CompletableFuture}</span>
<span class="source-line-no">1445</span><span id="line-1445"> */</span>
<span class="source-line-no">1446</span><span id="line-1446"> CompletableFuture&lt;Boolean&gt; normalize(NormalizeTableFilterParams ntfp);</span>
<span class="source-line-no">1447</span><span id="line-1447"></span>
<span class="source-line-no">1448</span><span id="line-1448"> /**</span>
<span class="source-line-no">1449</span><span id="line-1449"> * Turn the cleaner chore on/off.</span>
<span class="source-line-no">1450</span><span id="line-1450"> * @return Previous cleaner state wrapped by a {@link CompletableFuture}</span>
<span class="source-line-no">1451</span><span id="line-1451"> */</span>
<span class="source-line-no">1452</span><span id="line-1452"> CompletableFuture&lt;Boolean&gt; cleanerChoreSwitch(boolean on);</span>
<span class="source-line-no">1453</span><span id="line-1453"></span>
<span class="source-line-no">1454</span><span id="line-1454"> /**</span>
<span class="source-line-no">1455</span><span id="line-1455"> * Query the current state of the cleaner chore.</span>
<span class="source-line-no">1456</span><span id="line-1456"> * @return true if cleaner chore is on, false otherwise. The return value will be wrapped by a</span>
<span class="source-line-no">1457</span><span id="line-1457"> * {@link CompletableFuture}</span>
<span class="source-line-no">1458</span><span id="line-1458"> */</span>
<span class="source-line-no">1459</span><span id="line-1459"> CompletableFuture&lt;Boolean&gt; isCleanerChoreEnabled();</span>
<span class="source-line-no">1460</span><span id="line-1460"></span>
<span class="source-line-no">1461</span><span id="line-1461"> /**</span>
<span class="source-line-no">1462</span><span id="line-1462"> * Ask for cleaner chore to run.</span>
<span class="source-line-no">1463</span><span id="line-1463"> * @return true if cleaner chore ran, false otherwise. The return value will be wrapped by a</span>
<span class="source-line-no">1464</span><span id="line-1464"> * {@link CompletableFuture}</span>
<span class="source-line-no">1465</span><span id="line-1465"> */</span>
<span class="source-line-no">1466</span><span id="line-1466"> CompletableFuture&lt;Boolean&gt; runCleanerChore();</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"> * Turn the catalog janitor on/off.</span>
<span class="source-line-no">1470</span><span id="line-1470"> * @return the previous state wrapped by a {@link CompletableFuture}</span>
<span class="source-line-no">1471</span><span id="line-1471"> */</span>
<span class="source-line-no">1472</span><span id="line-1472"> CompletableFuture&lt;Boolean&gt; catalogJanitorSwitch(boolean on);</span>
<span class="source-line-no">1473</span><span id="line-1473"></span>
<span class="source-line-no">1474</span><span id="line-1474"> /**</span>
<span class="source-line-no">1475</span><span id="line-1475"> * Query on the catalog janitor state.</span>
<span class="source-line-no">1476</span><span id="line-1476"> * @return true if the catalog janitor is on, false otherwise. The return value will be wrapped by</span>
<span class="source-line-no">1477</span><span id="line-1477"> * a {@link CompletableFuture}</span>
<span class="source-line-no">1478</span><span id="line-1478"> */</span>
<span class="source-line-no">1479</span><span id="line-1479"> CompletableFuture&lt;Boolean&gt; isCatalogJanitorEnabled();</span>
<span class="source-line-no">1480</span><span id="line-1480"></span>
<span class="source-line-no">1481</span><span id="line-1481"> /**</span>
<span class="source-line-no">1482</span><span id="line-1482"> * Ask for a scan of the catalog table.</span>
<span class="source-line-no">1483</span><span id="line-1483"> * @return the number of entries cleaned. The return value will be wrapped by a</span>
<span class="source-line-no">1484</span><span id="line-1484"> * {@link CompletableFuture}</span>
<span class="source-line-no">1485</span><span id="line-1485"> */</span>
<span class="source-line-no">1486</span><span id="line-1486"> CompletableFuture&lt;Integer&gt; runCatalogJanitor();</span>
<span class="source-line-no">1487</span><span id="line-1487"></span>
<span class="source-line-no">1488</span><span id="line-1488"> /**</span>
<span class="source-line-no">1489</span><span id="line-1489"> * Execute the given coprocessor call on the master.</span>
<span class="source-line-no">1490</span><span id="line-1490"> * &lt;p&gt;</span>
<span class="source-line-no">1491</span><span id="line-1491"> * The {@code stubMaker} is just a delegation to the {@code newStub} call. Usually it is only a</span>
<span class="source-line-no">1492</span><span id="line-1492"> * one line lambda expression, like:</span>
<span class="source-line-no">1493</span><span id="line-1493"> *</span>
<span class="source-line-no">1494</span><span id="line-1494"> * &lt;pre&gt;</span>
<span class="source-line-no">1495</span><span id="line-1495"> * channel -&amp;gt; xxxService.newStub(channel)</span>
<span class="source-line-no">1496</span><span id="line-1496"> * &lt;/pre&gt;</span>
<span class="source-line-no">1497</span><span id="line-1497"> *</span>
<span class="source-line-no">1498</span><span id="line-1498"> * @param stubMaker a delegation to the actual {@code newStub} call.</span>
<span class="source-line-no">1499</span><span id="line-1499"> * @param callable a delegation to the actual protobuf rpc call. See the comment of</span>
<span class="source-line-no">1500</span><span id="line-1500"> * {@link ServiceCaller} for more details.</span>
<span class="source-line-no">1501</span><span id="line-1501"> * @param &lt;S&gt; the type of the asynchronous stub</span>
<span class="source-line-no">1502</span><span id="line-1502"> * @param &lt;R&gt; the type of the return value</span>
<span class="source-line-no">1503</span><span id="line-1503"> * @return the return value of the protobuf rpc call, wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">1504</span><span id="line-1504"> * @see ServiceCaller</span>
<span class="source-line-no">1505</span><span id="line-1505"> */</span>
<span class="source-line-no">1506</span><span id="line-1506"> &lt;S, R&gt; CompletableFuture&lt;R&gt; coprocessorService(Function&lt;RpcChannel, S&gt; stubMaker,</span>
<span class="source-line-no">1507</span><span id="line-1507"> ServiceCaller&lt;S, R&gt; callable);</span>
<span class="source-line-no">1508</span><span id="line-1508"></span>
<span class="source-line-no">1509</span><span id="line-1509"> /**</span>
<span class="source-line-no">1510</span><span id="line-1510"> * Execute the given coprocessor call on the given region server.</span>
<span class="source-line-no">1511</span><span id="line-1511"> * &lt;p&gt;</span>
<span class="source-line-no">1512</span><span id="line-1512"> * The {@code stubMaker} is just a delegation to the {@code newStub} call. Usually it is only a</span>
<span class="source-line-no">1513</span><span id="line-1513"> * one line lambda expression, like:</span>
<span class="source-line-no">1514</span><span id="line-1514"> *</span>
<span class="source-line-no">1515</span><span id="line-1515"> * &lt;pre&gt;</span>
<span class="source-line-no">1516</span><span id="line-1516"> * channel -&amp;gt; xxxService.newStub(channel)</span>
<span class="source-line-no">1517</span><span id="line-1517"> * &lt;/pre&gt;</span>
<span class="source-line-no">1518</span><span id="line-1518"> *</span>
<span class="source-line-no">1519</span><span id="line-1519"> * @param stubMaker a delegation to the actual {@code newStub} call.</span>
<span class="source-line-no">1520</span><span id="line-1520"> * @param callable a delegation to the actual protobuf rpc call. See the comment of</span>
<span class="source-line-no">1521</span><span id="line-1521"> * {@link ServiceCaller} for more details.</span>
<span class="source-line-no">1522</span><span id="line-1522"> * @param serverName the given region server</span>
<span class="source-line-no">1523</span><span id="line-1523"> * @param &lt;S&gt; the type of the asynchronous stub</span>
<span class="source-line-no">1524</span><span id="line-1524"> * @param &lt;R&gt; the type of the return value</span>
<span class="source-line-no">1525</span><span id="line-1525"> * @return the return value of the protobuf rpc call, wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">1526</span><span id="line-1526"> * @see ServiceCaller</span>
<span class="source-line-no">1527</span><span id="line-1527"> */</span>
<span class="source-line-no">1528</span><span id="line-1528"> &lt;S, R&gt; CompletableFuture&lt;R&gt; coprocessorService(Function&lt;RpcChannel, S&gt; stubMaker,</span>
<span class="source-line-no">1529</span><span id="line-1529"> ServiceCaller&lt;S, R&gt; callable, ServerName serverName);</span>
<span class="source-line-no">1530</span><span id="line-1530"></span>
<span class="source-line-no">1531</span><span id="line-1531"> /**</span>
<span class="source-line-no">1532</span><span id="line-1532"> * List all the dead region servers.</span>
<span class="source-line-no">1533</span><span id="line-1533"> */</span>
<span class="source-line-no">1534</span><span id="line-1534"> default CompletableFuture&lt;List&lt;ServerName&gt;&gt; listDeadServers() {</span>
<span class="source-line-no">1535</span><span id="line-1535"> return this.getClusterMetrics(EnumSet.of(Option.DEAD_SERVERS))</span>
<span class="source-line-no">1536</span><span id="line-1536"> .thenApply(ClusterMetrics::getDeadServerNames);</span>
<span class="source-line-no">1537</span><span id="line-1537"> }</span>
<span class="source-line-no">1538</span><span id="line-1538"></span>
<span class="source-line-no">1539</span><span id="line-1539"> /**</span>
<span class="source-line-no">1540</span><span id="line-1540"> * List all the unknown region servers.</span>
<span class="source-line-no">1541</span><span id="line-1541"> */</span>
<span class="source-line-no">1542</span><span id="line-1542"> default CompletableFuture&lt;List&lt;ServerName&gt;&gt; listUnknownServers() {</span>
<span class="source-line-no">1543</span><span id="line-1543"> return this.getClusterMetrics(EnumSet.of(Option.UNKNOWN_SERVERS))</span>
<span class="source-line-no">1544</span><span id="line-1544"> .thenApply(ClusterMetrics::getUnknownServerNames);</span>
<span class="source-line-no">1545</span><span id="line-1545"> }</span>
<span class="source-line-no">1546</span><span id="line-1546"></span>
<span class="source-line-no">1547</span><span id="line-1547"> /**</span>
<span class="source-line-no">1548</span><span id="line-1548"> * Clear dead region servers from master.</span>
<span class="source-line-no">1549</span><span id="line-1549"> * @param servers list of dead region servers.</span>
<span class="source-line-no">1550</span><span id="line-1550"> * @return - returns a list of servers that not cleared wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">1551</span><span id="line-1551"> */</span>
<span class="source-line-no">1552</span><span id="line-1552"> CompletableFuture&lt;List&lt;ServerName&gt;&gt; clearDeadServers(final List&lt;ServerName&gt; servers);</span>
<span class="source-line-no">1553</span><span id="line-1553"></span>
<span class="source-line-no">1554</span><span id="line-1554"> /**</span>
<span class="source-line-no">1555</span><span id="line-1555"> * Clear all the blocks corresponding to this table from BlockCache. For expert-admins. Calling</span>
<span class="source-line-no">1556</span><span id="line-1556"> * this API will drop all the cached blocks specific to a table from BlockCache. This can</span>
<span class="source-line-no">1557</span><span id="line-1557"> * significantly impact the query performance as the subsequent queries will have to retrieve the</span>
<span class="source-line-no">1558</span><span id="line-1558"> * blocks from underlying filesystem.</span>
<span class="source-line-no">1559</span><span id="line-1559"> * @param tableName table to clear block cache</span>
<span class="source-line-no">1560</span><span id="line-1560"> * @return CacheEvictionStats related to the eviction wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">1561</span><span id="line-1561"> */</span>
<span class="source-line-no">1562</span><span id="line-1562"> CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(final TableName tableName);</span>
<span class="source-line-no">1563</span><span id="line-1563"></span>
<span class="source-line-no">1564</span><span id="line-1564"> /**</span>
<span class="source-line-no">1565</span><span id="line-1565"> * Create a new table by cloning the existent table schema.</span>
<span class="source-line-no">1566</span><span id="line-1566"> * @param tableName name of the table to be cloned</span>
<span class="source-line-no">1567</span><span id="line-1567"> * @param newTableName name of the new table where the table will be created</span>
<span class="source-line-no">1568</span><span id="line-1568"> * @param preserveSplits True if the splits should be preserved</span>
<span class="source-line-no">1569</span><span id="line-1569"> */</span>
<span class="source-line-no">1570</span><span id="line-1570"> CompletableFuture&lt;Void&gt; cloneTableSchema(final TableName tableName, final TableName newTableName,</span>
<span class="source-line-no">1571</span><span id="line-1571"> final boolean preserveSplits);</span>
<span class="source-line-no">1572</span><span id="line-1572"></span>
<span class="source-line-no">1573</span><span id="line-1573"> /**</span>
<span class="source-line-no">1574</span><span id="line-1574"> * Turn the compaction on or off. Disabling compactions will also interrupt any currently ongoing</span>
<span class="source-line-no">1575</span><span id="line-1575"> * compactions. This state is ephemeral. The setting will be lost on restart. Compaction can also</span>
<span class="source-line-no">1576</span><span id="line-1576"> * be enabled/disabled by modifying configuration hbase.regionserver.compaction.enabled in</span>
<span class="source-line-no">1577</span><span id="line-1577"> * hbase-site.xml.</span>
<span class="source-line-no">1578</span><span id="line-1578"> * @param switchState Set to &lt;code&gt;true&lt;/code&gt; to enable, &lt;code&gt;false&lt;/code&gt; to disable.</span>
<span class="source-line-no">1579</span><span id="line-1579"> * @param serverNamesList list of region servers.</span>
<span class="source-line-no">1580</span><span id="line-1580"> * @return Previous compaction states for region servers</span>
<span class="source-line-no">1581</span><span id="line-1581"> */</span>
<span class="source-line-no">1582</span><span id="line-1582"> CompletableFuture&lt;Map&lt;ServerName, Boolean&gt;&gt; compactionSwitch(boolean switchState,</span>
<span class="source-line-no">1583</span><span id="line-1583"> List&lt;String&gt; serverNamesList);</span>
<span class="source-line-no">1584</span><span id="line-1584"></span>
<span class="source-line-no">1585</span><span id="line-1585"> /**</span>
<span class="source-line-no">1586</span><span id="line-1586"> * Switch the rpc throttle enabled state.</span>
<span class="source-line-no">1587</span><span id="line-1587"> * @param enable Set to &lt;code&gt;true&lt;/code&gt; to enable, &lt;code&gt;false&lt;/code&gt; to disable.</span>
<span class="source-line-no">1588</span><span id="line-1588"> * @return Previous rpc throttle enabled value</span>
<span class="source-line-no">1589</span><span id="line-1589"> */</span>
<span class="source-line-no">1590</span><span id="line-1590"> CompletableFuture&lt;Boolean&gt; switchRpcThrottle(boolean enable);</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"> * Get if the rpc throttle is enabled.</span>
<span class="source-line-no">1594</span><span id="line-1594"> * @return True if rpc throttle is enabled</span>
<span class="source-line-no">1595</span><span id="line-1595"> */</span>
<span class="source-line-no">1596</span><span id="line-1596"> CompletableFuture&lt;Boolean&gt; isRpcThrottleEnabled();</span>
<span class="source-line-no">1597</span><span id="line-1597"></span>
<span class="source-line-no">1598</span><span id="line-1598"> /**</span>
<span class="source-line-no">1599</span><span id="line-1599"> * Switch the exceed throttle quota. If enabled, user/table/namespace throttle quota can be</span>
<span class="source-line-no">1600</span><span id="line-1600"> * exceeded if region server has availble quota.</span>
<span class="source-line-no">1601</span><span id="line-1601"> * @param enable Set to &lt;code&gt;true&lt;/code&gt; to enable, &lt;code&gt;false&lt;/code&gt; to disable.</span>
<span class="source-line-no">1602</span><span id="line-1602"> * @return Previous exceed throttle enabled value</span>
<span class="source-line-no">1603</span><span id="line-1603"> */</span>
<span class="source-line-no">1604</span><span id="line-1604"> CompletableFuture&lt;Boolean&gt; exceedThrottleQuotaSwitch(boolean enable);</span>
<span class="source-line-no">1605</span><span id="line-1605"></span>
<span class="source-line-no">1606</span><span id="line-1606"> /**</span>
<span class="source-line-no">1607</span><span id="line-1607"> * Fetches the table sizes on the filesystem as tracked by the HBase Master.</span>
<span class="source-line-no">1608</span><span id="line-1608"> */</span>
<span class="source-line-no">1609</span><span id="line-1609"> CompletableFuture&lt;Map&lt;TableName, Long&gt;&gt; getSpaceQuotaTableSizes();</span>
<span class="source-line-no">1610</span><span id="line-1610"></span>
<span class="source-line-no">1611</span><span id="line-1611"> /**</span>
<span class="source-line-no">1612</span><span id="line-1612"> * Fetches the observed {@link SpaceQuotaSnapshotView}s observed by a RegionServer.</span>
<span class="source-line-no">1613</span><span id="line-1613"> */</span>
<span class="source-line-no">1614</span><span id="line-1614"> CompletableFuture&lt;? extends Map&lt;TableName, ? extends SpaceQuotaSnapshotView&gt;&gt;</span>
<span class="source-line-no">1615</span><span id="line-1615"> getRegionServerSpaceQuotaSnapshots(ServerName serverName);</span>
<span class="source-line-no">1616</span><span id="line-1616"></span>
<span class="source-line-no">1617</span><span id="line-1617"> /**</span>
<span class="source-line-no">1618</span><span id="line-1618"> * Returns the Master's view of a quota on the given {@code namespace} or null if the Master has</span>
<span class="source-line-no">1619</span><span id="line-1619"> * no quota information on that namespace.</span>
<span class="source-line-no">1620</span><span id="line-1620"> */</span>
<span class="source-line-no">1621</span><span id="line-1621"> CompletableFuture&lt;? extends SpaceQuotaSnapshotView&gt;</span>
<span class="source-line-no">1622</span><span id="line-1622"> getCurrentSpaceQuotaSnapshot(String namespace);</span>
<span class="source-line-no">1623</span><span id="line-1623"></span>
<span class="source-line-no">1624</span><span id="line-1624"> /**</span>
<span class="source-line-no">1625</span><span id="line-1625"> * Returns the Master's view of a quota on the given {@code tableName} or null if the Master has</span>
<span class="source-line-no">1626</span><span id="line-1626"> * no quota information on that table.</span>
<span class="source-line-no">1627</span><span id="line-1627"> */</span>
<span class="source-line-no">1628</span><span id="line-1628"> CompletableFuture&lt;? extends SpaceQuotaSnapshotView&gt;</span>
<span class="source-line-no">1629</span><span id="line-1629"> getCurrentSpaceQuotaSnapshot(TableName tableName);</span>
<span class="source-line-no">1630</span><span id="line-1630"></span>
<span class="source-line-no">1631</span><span id="line-1631"> /**</span>
<span class="source-line-no">1632</span><span id="line-1632"> * Grants user specific permissions</span>
<span class="source-line-no">1633</span><span id="line-1633"> * @param userPermission user name and the specific permission</span>
<span class="source-line-no">1634</span><span id="line-1634"> * @param mergeExistingPermissions If set to false, later granted permissions will override</span>
<span class="source-line-no">1635</span><span id="line-1635"> * previous granted permissions. otherwise, it'll merge with</span>
<span class="source-line-no">1636</span><span id="line-1636"> * previous granted permissions.</span>
<span class="source-line-no">1637</span><span id="line-1637"> */</span>
<span class="source-line-no">1638</span><span id="line-1638"> CompletableFuture&lt;Void&gt; grant(UserPermission userPermission, boolean mergeExistingPermissions);</span>
<span class="source-line-no">1639</span><span id="line-1639"></span>
<span class="source-line-no">1640</span><span id="line-1640"> /**</span>
<span class="source-line-no">1641</span><span id="line-1641"> * Revokes user specific permissions</span>
<span class="source-line-no">1642</span><span id="line-1642"> * @param userPermission user name and the specific permission</span>
<span class="source-line-no">1643</span><span id="line-1643"> */</span>
<span class="source-line-no">1644</span><span id="line-1644"> CompletableFuture&lt;Void&gt; revoke(UserPermission userPermission);</span>
<span class="source-line-no">1645</span><span id="line-1645"></span>
<span class="source-line-no">1646</span><span id="line-1646"> /**</span>
<span class="source-line-no">1647</span><span id="line-1647"> * Get the global/namespace/table permissions for user</span>
<span class="source-line-no">1648</span><span id="line-1648"> * @param getUserPermissionsRequest A request contains which user, global, namespace or table</span>
<span class="source-line-no">1649</span><span id="line-1649"> * permissions needed</span>
<span class="source-line-no">1650</span><span id="line-1650"> * @return The user and permission list</span>
<span class="source-line-no">1651</span><span id="line-1651"> */</span>
<span class="source-line-no">1652</span><span id="line-1652"> CompletableFuture&lt;List&lt;UserPermission&gt;&gt;</span>
<span class="source-line-no">1653</span><span id="line-1653"> getUserPermissions(GetUserPermissionsRequest getUserPermissionsRequest);</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"> * Check if the user has specific permissions</span>
<span class="source-line-no">1657</span><span id="line-1657"> * @param userName the user name</span>
<span class="source-line-no">1658</span><span id="line-1658"> * @param permissions the specific permission list</span>
<span class="source-line-no">1659</span><span id="line-1659"> * @return True if user has the specific permissions</span>
<span class="source-line-no">1660</span><span id="line-1660"> */</span>
<span class="source-line-no">1661</span><span id="line-1661"> CompletableFuture&lt;List&lt;Boolean&gt;&gt; hasUserPermissions(String userName,</span>
<span class="source-line-no">1662</span><span id="line-1662"> List&lt;Permission&gt; permissions);</span>
<span class="source-line-no">1663</span><span id="line-1663"></span>
<span class="source-line-no">1664</span><span id="line-1664"> /**</span>
<span class="source-line-no">1665</span><span id="line-1665"> * Check if call user has specific permissions</span>
<span class="source-line-no">1666</span><span id="line-1666"> * @param permissions the specific permission list</span>
<span class="source-line-no">1667</span><span id="line-1667"> * @return True if user has the specific permissions</span>
<span class="source-line-no">1668</span><span id="line-1668"> */</span>
<span class="source-line-no">1669</span><span id="line-1669"> default CompletableFuture&lt;List&lt;Boolean&gt;&gt; hasUserPermissions(List&lt;Permission&gt; permissions) {</span>
<span class="source-line-no">1670</span><span id="line-1670"> return hasUserPermissions(null, permissions);</span>
<span class="source-line-no">1671</span><span id="line-1671"> }</span>
<span class="source-line-no">1672</span><span id="line-1672"></span>
<span class="source-line-no">1673</span><span id="line-1673"> /**</span>
<span class="source-line-no">1674</span><span id="line-1674"> * Turn on or off the auto snapshot cleanup based on TTL.</span>
<span class="source-line-no">1675</span><span id="line-1675"> * &lt;p/&gt;</span>
<span class="source-line-no">1676</span><span id="line-1676"> * Notice that, the method itself is always non-blocking, which means it will always return</span>
<span class="source-line-no">1677</span><span id="line-1677"> * immediately. The {@code sync} parameter only effects when will we complete the returned</span>
<span class="source-line-no">1678</span><span id="line-1678"> * {@link CompletableFuture}.</span>
<span class="source-line-no">1679</span><span id="line-1679"> * @param on Set to &lt;code&gt;true&lt;/code&gt; to enable, &lt;code&gt;false&lt;/code&gt; to disable.</span>
<span class="source-line-no">1680</span><span id="line-1680"> * @param sync If &lt;code&gt;true&lt;/code&gt;, it waits until current snapshot cleanup is completed, if</span>
<span class="source-line-no">1681</span><span id="line-1681"> * outstanding.</span>
<span class="source-line-no">1682</span><span id="line-1682"> * @return Previous auto snapshot cleanup value wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">1683</span><span id="line-1683"> */</span>
<span class="source-line-no">1684</span><span id="line-1684"> CompletableFuture&lt;Boolean&gt; snapshotCleanupSwitch(boolean on, boolean sync);</span>
<span class="source-line-no">1685</span><span id="line-1685"></span>
<span class="source-line-no">1686</span><span id="line-1686"> /**</span>
<span class="source-line-no">1687</span><span id="line-1687"> * Query the current state of the auto snapshot cleanup based on TTL.</span>
<span class="source-line-no">1688</span><span id="line-1688"> * @return true if the auto snapshot cleanup is enabled, false otherwise. The return value will be</span>
<span class="source-line-no">1689</span><span id="line-1689"> * wrapped by a {@link CompletableFuture}.</span>
<span class="source-line-no">1690</span><span id="line-1690"> */</span>
<span class="source-line-no">1691</span><span id="line-1691"> CompletableFuture&lt;Boolean&gt; isSnapshotCleanupEnabled();</span>
<span class="source-line-no">1692</span><span id="line-1692"></span>
<span class="source-line-no">1693</span><span id="line-1693"> /**</span>
<span class="source-line-no">1694</span><span id="line-1694"> * Retrieves online slow RPC logs from the provided list of RegionServers</span>
<span class="source-line-no">1695</span><span id="line-1695"> * @param serverNames Server names to get slowlog responses from</span>
<span class="source-line-no">1696</span><span id="line-1696"> * @param logQueryFilter filter to be used if provided</span>
<span class="source-line-no">1697</span><span id="line-1697"> * @return Online slowlog response list. The return value wrapped by a {@link CompletableFuture}</span>
<span class="source-line-no">1698</span><span id="line-1698"> * @deprecated since 2.4.0 and will be removed in 4.0.0. Use</span>
<span class="source-line-no">1699</span><span id="line-1699"> * {@link #getLogEntries(Set, String, ServerType, int, Map)} instead.</span>
<span class="source-line-no">1700</span><span id="line-1700"> */</span>
<span class="source-line-no">1701</span><span id="line-1701"> @Deprecated</span>
<span class="source-line-no">1702</span><span id="line-1702"> default CompletableFuture&lt;List&lt;OnlineLogRecord&gt;&gt;</span>
<span class="source-line-no">1703</span><span id="line-1703"> getSlowLogResponses(final Set&lt;ServerName&gt; serverNames, final LogQueryFilter logQueryFilter) {</span>
<span class="source-line-no">1704</span><span id="line-1704"> String logType;</span>
<span class="source-line-no">1705</span><span id="line-1705"> if (LogQueryFilter.Type.LARGE_LOG.equals(logQueryFilter.getType())) {</span>
<span class="source-line-no">1706</span><span id="line-1706"> logType = "LARGE_LOG";</span>
<span class="source-line-no">1707</span><span id="line-1707"> } else {</span>
<span class="source-line-no">1708</span><span id="line-1708"> logType = "SLOW_LOG";</span>
<span class="source-line-no">1709</span><span id="line-1709"> }</span>
<span class="source-line-no">1710</span><span id="line-1710"> Map&lt;String, Object&gt; filterParams = new HashMap&lt;&gt;();</span>
<span class="source-line-no">1711</span><span id="line-1711"> filterParams.put("regionName", logQueryFilter.getRegionName());</span>
<span class="source-line-no">1712</span><span id="line-1712"> filterParams.put("clientAddress", logQueryFilter.getClientAddress());</span>
<span class="source-line-no">1713</span><span id="line-1713"> filterParams.put("tableName", logQueryFilter.getTableName());</span>
<span class="source-line-no">1714</span><span id="line-1714"> filterParams.put("userName", logQueryFilter.getUserName());</span>
<span class="source-line-no">1715</span><span id="line-1715"> filterParams.put("filterByOperator", logQueryFilter.getFilterByOperator().toString());</span>
<span class="source-line-no">1716</span><span id="line-1716"> CompletableFuture&lt;List&lt;LogEntry&gt;&gt; logEntries = getLogEntries(serverNames, logType,</span>
<span class="source-line-no">1717</span><span id="line-1717"> ServerType.REGION_SERVER, logQueryFilter.getLimit(), filterParams);</span>
<span class="source-line-no">1718</span><span id="line-1718"> return logEntries.thenApply(logEntryList -&gt; logEntryList.stream()</span>
<span class="source-line-no">1719</span><span id="line-1719"> .map(logEntry -&gt; (OnlineLogRecord) logEntry).collect(Collectors.toList()));</span>
<span class="source-line-no">1720</span><span id="line-1720"> }</span>
<span class="source-line-no">1721</span><span id="line-1721"></span>
<span class="source-line-no">1722</span><span id="line-1722"> /**</span>
<span class="source-line-no">1723</span><span id="line-1723"> * Clears online slow RPC logs from the provided list of RegionServers</span>
<span class="source-line-no">1724</span><span id="line-1724"> * @param serverNames Set of Server names to clean slowlog responses from</span>
<span class="source-line-no">1725</span><span id="line-1725"> * @return List of booleans representing if online slowlog response buffer is cleaned from each</span>
<span class="source-line-no">1726</span><span id="line-1726"> * RegionServer. The return value wrapped by a {@link CompletableFuture}</span>
<span class="source-line-no">1727</span><span id="line-1727"> */</span>
<span class="source-line-no">1728</span><span id="line-1728"> CompletableFuture&lt;List&lt;Boolean&gt;&gt; clearSlowLogResponses(final Set&lt;ServerName&gt; serverNames);</span>
<span class="source-line-no">1729</span><span id="line-1729"></span>
<span class="source-line-no">1730</span><span id="line-1730"> /**</span>
<span class="source-line-no">1731</span><span id="line-1731"> * Creates a new RegionServer group with the given name</span>
<span class="source-line-no">1732</span><span id="line-1732"> * @param groupName the name of the group</span>
<span class="source-line-no">1733</span><span id="line-1733"> */</span>
<span class="source-line-no">1734</span><span id="line-1734"> CompletableFuture&lt;Void&gt; addRSGroup(String groupName);</span>
<span class="source-line-no">1735</span><span id="line-1735"></span>
<span class="source-line-no">1736</span><span id="line-1736"> /**</span>
<span class="source-line-no">1737</span><span id="line-1737"> * Get group info for the given group name</span>
<span class="source-line-no">1738</span><span id="line-1738"> * @param groupName the group name</span>
<span class="source-line-no">1739</span><span id="line-1739"> * @return group info</span>
<span class="source-line-no">1740</span><span id="line-1740"> */</span>
<span class="source-line-no">1741</span><span id="line-1741"> CompletableFuture&lt;RSGroupInfo&gt; getRSGroup(String groupName);</span>
<span class="source-line-no">1742</span><span id="line-1742"></span>
<span class="source-line-no">1743</span><span id="line-1743"> /**</span>
<span class="source-line-no">1744</span><span id="line-1744"> * Get group info for the given hostPort</span>
<span class="source-line-no">1745</span><span id="line-1745"> * @param hostPort HostPort to get RSGroupInfo for</span>
<span class="source-line-no">1746</span><span id="line-1746"> */</span>
<span class="source-line-no">1747</span><span id="line-1747"> CompletableFuture&lt;RSGroupInfo&gt; getRSGroup(Address hostPort);</span>
<span class="source-line-no">1748</span><span id="line-1748"></span>
<span class="source-line-no">1749</span><span id="line-1749"> /**</span>
<span class="source-line-no">1750</span><span id="line-1750"> * Get group info for the given table</span>
<span class="source-line-no">1751</span><span id="line-1751"> * @param tableName table name to get RSGroupInfo for</span>
<span class="source-line-no">1752</span><span id="line-1752"> */</span>
<span class="source-line-no">1753</span><span id="line-1753"> CompletableFuture&lt;RSGroupInfo&gt; getRSGroup(TableName tableName);</span>
<span class="source-line-no">1754</span><span id="line-1754"></span>
<span class="source-line-no">1755</span><span id="line-1755"> /**</span>
<span class="source-line-no">1756</span><span id="line-1756"> * Lists current set of RegionServer groups</span>
<span class="source-line-no">1757</span><span id="line-1757"> */</span>
<span class="source-line-no">1758</span><span id="line-1758"> CompletableFuture&lt;List&lt;RSGroupInfo&gt;&gt; listRSGroups();</span>
<span class="source-line-no">1759</span><span id="line-1759"></span>
<span class="source-line-no">1760</span><span id="line-1760"> /**</span>
<span class="source-line-no">1761</span><span id="line-1761"> * Get all tables in this RegionServer group.</span>
<span class="source-line-no">1762</span><span id="line-1762"> * @param groupName the group name</span>
<span class="source-line-no">1763</span><span id="line-1763"> * @see #getConfiguredNamespacesAndTablesInRSGroup(String)</span>
<span class="source-line-no">1764</span><span id="line-1764"> */</span>
<span class="source-line-no">1765</span><span id="line-1765"> CompletableFuture&lt;List&lt;TableName&gt;&gt; listTablesInRSGroup(String groupName);</span>
<span class="source-line-no">1766</span><span id="line-1766"></span>
<span class="source-line-no">1767</span><span id="line-1767"> /**</span>
<span class="source-line-no">1768</span><span id="line-1768"> * Get the namespaces and tables which have this RegionServer group in descriptor.</span>
<span class="source-line-no">1769</span><span id="line-1769"> * &lt;p/&gt;</span>
<span class="source-line-no">1770</span><span id="line-1770"> * The difference between this method and {@link #listTablesInRSGroup(String)} is that, this</span>
<span class="source-line-no">1771</span><span id="line-1771"> * method will not include the table which is actually in this RegionServr group but without the</span>
<span class="source-line-no">1772</span><span id="line-1772"> * RegionServer group configuration in its {@link TableDescriptor}. For example, we have a group</span>
<span class="source-line-no">1773</span><span id="line-1773"> * 'A', and we make namespace 'nsA' in this group, then all the tables under this namespace will</span>
<span class="source-line-no">1774</span><span id="line-1774"> * in the group 'A', but this method will not return these tables but only the namespace 'nsA',</span>
<span class="source-line-no">1775</span><span id="line-1775"> * while the {@link #listTablesInRSGroup(String)} will return all these tables.</span>
<span class="source-line-no">1776</span><span id="line-1776"> * @param groupName the group name</span>
<span class="source-line-no">1777</span><span id="line-1777"> * @see #listTablesInRSGroup(String)</span>
<span class="source-line-no">1778</span><span id="line-1778"> */</span>
<span class="source-line-no">1779</span><span id="line-1779"> CompletableFuture&lt;Pair&lt;List&lt;String&gt;, List&lt;TableName&gt;&gt;&gt;</span>
<span class="source-line-no">1780</span><span id="line-1780"> getConfiguredNamespacesAndTablesInRSGroup(String groupName);</span>
<span class="source-line-no">1781</span><span id="line-1781"></span>
<span class="source-line-no">1782</span><span id="line-1782"> /**</span>
<span class="source-line-no">1783</span><span id="line-1783"> * Remove RegionServer group associated with the given name</span>
<span class="source-line-no">1784</span><span id="line-1784"> * @param groupName the group name</span>
<span class="source-line-no">1785</span><span id="line-1785"> */</span>
<span class="source-line-no">1786</span><span id="line-1786"> CompletableFuture&lt;Void&gt; removeRSGroup(String groupName);</span>
<span class="source-line-no">1787</span><span id="line-1787"></span>
<span class="source-line-no">1788</span><span id="line-1788"> /**</span>
<span class="source-line-no">1789</span><span id="line-1789"> * Remove decommissioned servers from group 1. Sometimes we may find the server aborted due to</span>
<span class="source-line-no">1790</span><span id="line-1790"> * some hardware failure and we must offline the server for repairing. Or we need to move some</span>
<span class="source-line-no">1791</span><span id="line-1791"> * servers to join other clusters. So we need to remove these servers from the group. 2.</span>
<span class="source-line-no">1792</span><span id="line-1792"> * Dead/recovering/live servers will be disallowed.</span>
<span class="source-line-no">1793</span><span id="line-1793"> * @param servers set of servers to remove</span>
<span class="source-line-no">1794</span><span id="line-1794"> */</span>
<span class="source-line-no">1795</span><span id="line-1795"> CompletableFuture&lt;Void&gt; removeServersFromRSGroup(Set&lt;Address&gt; servers);</span>
<span class="source-line-no">1796</span><span id="line-1796"></span>
<span class="source-line-no">1797</span><span id="line-1797"> /**</span>
<span class="source-line-no">1798</span><span id="line-1798"> * Move given set of servers to the specified target RegionServer group</span>
<span class="source-line-no">1799</span><span id="line-1799"> * @param servers set of servers to move</span>
<span class="source-line-no">1800</span><span id="line-1800"> * @param groupName the group to move servers to</span>
<span class="source-line-no">1801</span><span id="line-1801"> */</span>
<span class="source-line-no">1802</span><span id="line-1802"> CompletableFuture&lt;Void&gt; moveServersToRSGroup(Set&lt;Address&gt; servers, String groupName);</span>
<span class="source-line-no">1803</span><span id="line-1803"></span>
<span class="source-line-no">1804</span><span id="line-1804"> /**</span>
<span class="source-line-no">1805</span><span id="line-1805"> * Set the RegionServer group for tables</span>
<span class="source-line-no">1806</span><span id="line-1806"> * @param tables tables to set group for</span>
<span class="source-line-no">1807</span><span id="line-1807"> * @param groupName group name for tables</span>
<span class="source-line-no">1808</span><span id="line-1808"> */</span>
<span class="source-line-no">1809</span><span id="line-1809"> CompletableFuture&lt;Void&gt; setRSGroup(Set&lt;TableName&gt; tables, String groupName);</span>
<span class="source-line-no">1810</span><span id="line-1810"></span>
<span class="source-line-no">1811</span><span id="line-1811"> /**</span>
<span class="source-line-no">1812</span><span id="line-1812"> * Balance regions in the given RegionServer group</span>
<span class="source-line-no">1813</span><span id="line-1813"> * @param groupName the group name</span>
<span class="source-line-no">1814</span><span id="line-1814"> * @return BalanceResponse details about the balancer run</span>
<span class="source-line-no">1815</span><span id="line-1815"> */</span>
<span class="source-line-no">1816</span><span id="line-1816"> default CompletableFuture&lt;BalanceResponse&gt; balanceRSGroup(String groupName) {</span>
<span class="source-line-no">1817</span><span id="line-1817"> return balanceRSGroup(groupName, BalanceRequest.defaultInstance());</span>
<span class="source-line-no">1818</span><span id="line-1818"> }</span>
<span class="source-line-no">1819</span><span id="line-1819"></span>
<span class="source-line-no">1820</span><span id="line-1820"> /**</span>
<span class="source-line-no">1821</span><span id="line-1821"> * Balance regions in the given RegionServer group</span>
<span class="source-line-no">1822</span><span id="line-1822"> * @param groupName the group name</span>
<span class="source-line-no">1823</span><span id="line-1823"> * @param request options to define how the balancer should run</span>
<span class="source-line-no">1824</span><span id="line-1824"> * @return BalanceResponse details about the balancer run</span>
<span class="source-line-no">1825</span><span id="line-1825"> */</span>
<span class="source-line-no">1826</span><span id="line-1826"> CompletableFuture&lt;BalanceResponse&gt; balanceRSGroup(String groupName, BalanceRequest request);</span>
<span class="source-line-no">1827</span><span id="line-1827"></span>
<span class="source-line-no">1828</span><span id="line-1828"> /**</span>
<span class="source-line-no">1829</span><span id="line-1829"> * Rename rsgroup</span>
<span class="source-line-no">1830</span><span id="line-1830"> * @param oldName old rsgroup name</span>
<span class="source-line-no">1831</span><span id="line-1831"> * @param newName new rsgroup name</span>
<span class="source-line-no">1832</span><span id="line-1832"> */</span>
<span class="source-line-no">1833</span><span id="line-1833"> CompletableFuture&lt;Void&gt; renameRSGroup(String oldName, String newName);</span>
<span class="source-line-no">1834</span><span id="line-1834"></span>
<span class="source-line-no">1835</span><span id="line-1835"> /**</span>
<span class="source-line-no">1836</span><span id="line-1836"> * Update RSGroup configuration</span>
<span class="source-line-no">1837</span><span id="line-1837"> * @param groupName the group name</span>
<span class="source-line-no">1838</span><span id="line-1838"> * @param configuration new configuration of the group name to be set</span>
<span class="source-line-no">1839</span><span id="line-1839"> */</span>
<span class="source-line-no">1840</span><span id="line-1840"> CompletableFuture&lt;Void&gt; updateRSGroupConfig(String groupName, Map&lt;String, String&gt; configuration);</span>
<span class="source-line-no">1841</span><span id="line-1841"></span>
<span class="source-line-no">1842</span><span id="line-1842"> /**</span>
<span class="source-line-no">1843</span><span id="line-1843"> * Retrieve recent online records from HMaster / RegionServers. Examples include slow/large RPC</span>
<span class="source-line-no">1844</span><span id="line-1844"> * logs, balancer decisions by master.</span>
<span class="source-line-no">1845</span><span id="line-1845"> * @param serverNames servers to retrieve records from, useful in case of records maintained by</span>
<span class="source-line-no">1846</span><span id="line-1846"> * RegionServer as we can select specific server. In case of</span>
<span class="source-line-no">1847</span><span id="line-1847"> * servertype=MASTER, logs will only come from the currently active master.</span>
<span class="source-line-no">1848</span><span id="line-1848"> * @param logType string representing type of log records</span>
<span class="source-line-no">1849</span><span id="line-1849"> * @param serverType enum for server type: HMaster or RegionServer</span>
<span class="source-line-no">1850</span><span id="line-1850"> * @param limit put a limit to list of records that server should send in response</span>
<span class="source-line-no">1851</span><span id="line-1851"> * @param filterParams additional filter params</span>
<span class="source-line-no">1852</span><span id="line-1852"> */</span>
<span class="source-line-no">1853</span><span id="line-1853"> CompletableFuture&lt;List&lt;LogEntry&gt;&gt; getLogEntries(Set&lt;ServerName&gt; serverNames, String logType,</span>
<span class="source-line-no">1854</span><span id="line-1854"> ServerType serverType, int limit, Map&lt;String, Object&gt; filterParams);</span>
<span class="source-line-no">1855</span><span id="line-1855"></span>
<span class="source-line-no">1856</span><span id="line-1856"> /**</span>
<span class="source-line-no">1857</span><span id="line-1857"> * Flush master local region</span>
<span class="source-line-no">1858</span><span id="line-1858"> */</span>
<span class="source-line-no">1859</span><span id="line-1859"> CompletableFuture&lt;Void&gt; flushMasterStore();</span>
<span class="source-line-no">1860</span><span id="line-1860"></span>
<span class="source-line-no">1861</span><span id="line-1861"> /**</span>
<span class="source-line-no">1862</span><span id="line-1862"> * Get the list of cached files</span>
<span class="source-line-no">1863</span><span id="line-1863"> */</span>
<span class="source-line-no">1864</span><span id="line-1864"> CompletableFuture&lt;List&lt;String&gt;&gt; getCachedFilesList(ServerName serverName);</span>
<span class="source-line-no">1865</span><span id="line-1865">}</span>
</pre>
</div>
</main>
</body>
</html>