<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
<span class="sourceLineNo">017</span> */<a name="line.17"></a>
<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master;<a name="line.18"></a>
<span class="sourceLineNo">019</span><a name="line.19"></a>
<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import java.lang.reflect.InvocationTargetException;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.util.List;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.util.Map;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.util.Set;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.MetaMutationAnnotation;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.ServerName;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.TableName;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.client.BalanceRequest;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.client.BalanceResponse;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.SharedConnection;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.SnapshotDescription;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.coprocessor.BaseEnvironment;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.coprocessor.CoreCoprocessor;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.coprocessor.HasMasterServices;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessor;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.coprocessor.MasterObserver;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.coprocessor.MetricsCoprocessor;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.locking.LockProcedure;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.metrics.MetricRegistry;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.net.Address;<a name="line.51"></a>
<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.procedure2.LockType;<a name="line.52"></a>
<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.procedure2.LockedResource;<a name="line.53"></a>
<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.54"></a>
<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.55"></a>
<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.quotas.GlobalQuotaSettings;<a name="line.56"></a>
<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.57"></a>
<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.security.User;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.security.access.Permission;<a name="line.60"></a>
<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.security.access.UserPermission;<a name="line.61"></a>
<span class="sourceLineNo">062</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.62"></a>
<span class="sourceLineNo">063</span>import org.slf4j.Logger;<a name="line.63"></a>
<span class="sourceLineNo">064</span>import org.slf4j.LoggerFactory;<a name="line.64"></a>
<span class="sourceLineNo">065</span><a name="line.65"></a>
<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.com.google.protobuf.Service;<a name="line.66"></a>
<span class="sourceLineNo">067</span><a name="line.67"></a>
<span class="sourceLineNo">068</span>/**<a name="line.68"></a>
<span class="sourceLineNo">069</span> * Provides the coprocessor framework and environment for master oriented operations.<a name="line.69"></a>
<span class="sourceLineNo">070</span> * {@link HMaster} interacts with the loaded coprocessors through this class.<a name="line.70"></a>
<span class="sourceLineNo">071</span> */<a name="line.71"></a>
<span class="sourceLineNo">072</span>@InterfaceAudience.Private<a name="line.72"></a>
<span class="sourceLineNo">073</span>public class MasterCoprocessorHost<a name="line.73"></a>
<span class="sourceLineNo">074</span>  extends CoprocessorHost&lt;MasterCoprocessor, MasterCoprocessorEnvironment&gt; {<a name="line.74"></a>
<span class="sourceLineNo">075</span><a name="line.75"></a>
<span class="sourceLineNo">076</span>  private static final Logger LOG = LoggerFactory.getLogger(MasterCoprocessorHost.class);<a name="line.76"></a>
<span class="sourceLineNo">077</span><a name="line.77"></a>
<span class="sourceLineNo">078</span>  /**<a name="line.78"></a>
<span class="sourceLineNo">079</span>   * Coprocessor environment extension providing access to master related services.<a name="line.79"></a>
<span class="sourceLineNo">080</span>   */<a name="line.80"></a>
<span class="sourceLineNo">081</span>  private static class MasterEnvironment extends BaseEnvironment&lt;MasterCoprocessor&gt;<a name="line.81"></a>
<span class="sourceLineNo">082</span>    implements MasterCoprocessorEnvironment {<a name="line.82"></a>
<span class="sourceLineNo">083</span>    private final MetricRegistry metricRegistry;<a name="line.83"></a>
<span class="sourceLineNo">084</span>    private final MasterServices services;<a name="line.84"></a>
<span class="sourceLineNo">085</span><a name="line.85"></a>
<span class="sourceLineNo">086</span>    public MasterEnvironment(final MasterCoprocessor impl, final int priority, final int seq,<a name="line.86"></a>
<span class="sourceLineNo">087</span>      final Configuration conf, final MasterServices services) {<a name="line.87"></a>
<span class="sourceLineNo">088</span>      super(impl, priority, seq, conf);<a name="line.88"></a>
<span class="sourceLineNo">089</span>      this.services = services;<a name="line.89"></a>
<span class="sourceLineNo">090</span>      this.metricRegistry =<a name="line.90"></a>
<span class="sourceLineNo">091</span>        MetricsCoprocessor.createRegistryForMasterCoprocessor(impl.getClass().getName());<a name="line.91"></a>
<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
<span class="sourceLineNo">093</span><a name="line.93"></a>
<span class="sourceLineNo">094</span>    @Override<a name="line.94"></a>
<span class="sourceLineNo">095</span>    public ServerName getServerName() {<a name="line.95"></a>
<span class="sourceLineNo">096</span>      return this.services.getServerName();<a name="line.96"></a>
<span class="sourceLineNo">097</span>    }<a name="line.97"></a>
<span class="sourceLineNo">098</span><a name="line.98"></a>
<span class="sourceLineNo">099</span>    @Override<a name="line.99"></a>
<span class="sourceLineNo">100</span>    public Connection getConnection() {<a name="line.100"></a>
<span class="sourceLineNo">101</span>      return new SharedConnection(this.services.getConnection());<a name="line.101"></a>
<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
<span class="sourceLineNo">103</span><a name="line.103"></a>
<span class="sourceLineNo">104</span>    @Override<a name="line.104"></a>
<span class="sourceLineNo">105</span>    public Connection createConnection(Configuration conf) throws IOException {<a name="line.105"></a>
<span class="sourceLineNo">106</span>      return this.services.createConnection(conf);<a name="line.106"></a>
<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
<span class="sourceLineNo">108</span><a name="line.108"></a>
<span class="sourceLineNo">109</span>    @Override<a name="line.109"></a>
<span class="sourceLineNo">110</span>    public MetricRegistry getMetricRegistryForMaster() {<a name="line.110"></a>
<span class="sourceLineNo">111</span>      return metricRegistry;<a name="line.111"></a>
<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
<span class="sourceLineNo">113</span><a name="line.113"></a>
<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
<span class="sourceLineNo">115</span>    public void shutdown() {<a name="line.115"></a>
<span class="sourceLineNo">116</span>      super.shutdown();<a name="line.116"></a>
<span class="sourceLineNo">117</span>      MetricsCoprocessor.removeRegistry(this.metricRegistry);<a name="line.117"></a>
<span class="sourceLineNo">118</span>    }<a name="line.118"></a>
<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
<span class="sourceLineNo">120</span><a name="line.120"></a>
<span class="sourceLineNo">121</span>  /**<a name="line.121"></a>
<span class="sourceLineNo">122</span>   * Special version of MasterEnvironment that exposes MasterServices for Core Coprocessors only.<a name="line.122"></a>
<span class="sourceLineNo">123</span>   * Temporary hack until Core Coprocessors are integrated into Core.<a name="line.123"></a>
<span class="sourceLineNo">124</span>   */<a name="line.124"></a>
<span class="sourceLineNo">125</span>  private static class MasterEnvironmentForCoreCoprocessors extends MasterEnvironment<a name="line.125"></a>
<span class="sourceLineNo">126</span>    implements HasMasterServices {<a name="line.126"></a>
<span class="sourceLineNo">127</span>    private final MasterServices masterServices;<a name="line.127"></a>
<span class="sourceLineNo">128</span><a name="line.128"></a>
<span class="sourceLineNo">129</span>    public MasterEnvironmentForCoreCoprocessors(final MasterCoprocessor impl, final int priority,<a name="line.129"></a>
<span class="sourceLineNo">130</span>      final int seq, final Configuration conf, final MasterServices services) {<a name="line.130"></a>
<span class="sourceLineNo">131</span>      super(impl, priority, seq, conf, services);<a name="line.131"></a>
<span class="sourceLineNo">132</span>      this.masterServices = services;<a name="line.132"></a>
<span class="sourceLineNo">133</span>    }<a name="line.133"></a>
<span class="sourceLineNo">134</span><a name="line.134"></a>
<span class="sourceLineNo">135</span>    /**<a name="line.135"></a>
<span class="sourceLineNo">136</span>     * @return An instance of MasterServices, an object NOT for general user-space Coprocessor<a name="line.136"></a>
<span class="sourceLineNo">137</span>     *         consumption.<a name="line.137"></a>
<span class="sourceLineNo">138</span>     */<a name="line.138"></a>
<span class="sourceLineNo">139</span>    @Override<a name="line.139"></a>
<span class="sourceLineNo">140</span>    public MasterServices getMasterServices() {<a name="line.140"></a>
<span class="sourceLineNo">141</span>      return this.masterServices;<a name="line.141"></a>
<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
<span class="sourceLineNo">144</span><a name="line.144"></a>
<span class="sourceLineNo">145</span>  private MasterServices masterServices;<a name="line.145"></a>
<span class="sourceLineNo">146</span><a name="line.146"></a>
<span class="sourceLineNo">147</span>  public MasterCoprocessorHost(final MasterServices services, final Configuration conf) {<a name="line.147"></a>
<span class="sourceLineNo">148</span>    super(services);<a name="line.148"></a>
<span class="sourceLineNo">149</span>    this.conf = conf;<a name="line.149"></a>
<span class="sourceLineNo">150</span>    this.masterServices = services;<a name="line.150"></a>
<span class="sourceLineNo">151</span>    // Log the state of coprocessor loading here; should appear only once or<a name="line.151"></a>
<span class="sourceLineNo">152</span>    // twice in the daemon log, depending on HBase version, because there is<a name="line.152"></a>
<span class="sourceLineNo">153</span>    // only one MasterCoprocessorHost instance in the master process<a name="line.153"></a>
<span class="sourceLineNo">154</span>    boolean coprocessorsEnabled =<a name="line.154"></a>
<span class="sourceLineNo">155</span>      conf.getBoolean(COPROCESSORS_ENABLED_CONF_KEY, DEFAULT_COPROCESSORS_ENABLED);<a name="line.155"></a>
<span class="sourceLineNo">156</span>    LOG.trace("System coprocessor loading is {}", (coprocessorsEnabled ? "enabled" : "disabled"));<a name="line.156"></a>
<span class="sourceLineNo">157</span>    loadSystemCoprocessors(conf, MASTER_COPROCESSOR_CONF_KEY);<a name="line.157"></a>
<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
<span class="sourceLineNo">159</span><a name="line.159"></a>
<span class="sourceLineNo">160</span>  @Override<a name="line.160"></a>
<span class="sourceLineNo">161</span>  public MasterEnvironment createEnvironment(final MasterCoprocessor instance, final int priority,<a name="line.161"></a>
<span class="sourceLineNo">162</span>    final int seq, final Configuration conf) {<a name="line.162"></a>
<span class="sourceLineNo">163</span>    // If coprocessor exposes any services, register them.<a name="line.163"></a>
<span class="sourceLineNo">164</span>    for (Service service : instance.getServices()) {<a name="line.164"></a>
<span class="sourceLineNo">165</span>      masterServices.registerService(service);<a name="line.165"></a>
<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
<span class="sourceLineNo">167</span>    // If a CoreCoprocessor, return a 'richer' environment, one laden with MasterServices.<a name="line.167"></a>
<span class="sourceLineNo">168</span>    return instance.getClass().isAnnotationPresent(CoreCoprocessor.class)<a name="line.168"></a>
<span class="sourceLineNo">169</span>      ? new MasterEnvironmentForCoreCoprocessors(instance, priority, seq, conf, masterServices)<a name="line.169"></a>
<span class="sourceLineNo">170</span>      : new MasterEnvironment(instance, priority, seq, conf, masterServices);<a name="line.170"></a>
<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
<span class="sourceLineNo">172</span><a name="line.172"></a>
<span class="sourceLineNo">173</span>  @Override<a name="line.173"></a>
<span class="sourceLineNo">174</span>  public MasterCoprocessor checkAndGetInstance(Class&lt;?&gt; implClass)<a name="line.174"></a>
<span class="sourceLineNo">175</span>    throws InstantiationException, IllegalAccessException {<a name="line.175"></a>
<span class="sourceLineNo">176</span>    try {<a name="line.176"></a>
<span class="sourceLineNo">177</span>      if (MasterCoprocessor.class.isAssignableFrom(implClass)) {<a name="line.177"></a>
<span class="sourceLineNo">178</span>        return implClass.asSubclass(MasterCoprocessor.class).getDeclaredConstructor().newInstance();<a name="line.178"></a>
<span class="sourceLineNo">179</span>      } else {<a name="line.179"></a>
<span class="sourceLineNo">180</span>        LOG.error("{} is not of type MasterCoprocessor. Check the configuration of {}",<a name="line.180"></a>
<span class="sourceLineNo">181</span>          implClass.getName(), CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY);<a name="line.181"></a>
<span class="sourceLineNo">182</span>        return null;<a name="line.182"></a>
<span class="sourceLineNo">183</span>      }<a name="line.183"></a>
<span class="sourceLineNo">184</span>    } catch (NoSuchMethodException | InvocationTargetException e) {<a name="line.184"></a>
<span class="sourceLineNo">185</span>      throw (InstantiationException) new InstantiationException(implClass.getName()).initCause(e);<a name="line.185"></a>
<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
<span class="sourceLineNo">188</span><a name="line.188"></a>
<span class="sourceLineNo">189</span>  private ObserverGetter&lt;MasterCoprocessor, MasterObserver&gt; masterObserverGetter =<a name="line.189"></a>
<span class="sourceLineNo">190</span>    MasterCoprocessor::getMasterObserver;<a name="line.190"></a>
<span class="sourceLineNo">191</span><a name="line.191"></a>
<span class="sourceLineNo">192</span>  abstract class MasterObserverOperation extends ObserverOperationWithoutResult&lt;MasterObserver&gt; {<a name="line.192"></a>
<span class="sourceLineNo">193</span>    public MasterObserverOperation() {<a name="line.193"></a>
<span class="sourceLineNo">194</span>      super(masterObserverGetter);<a name="line.194"></a>
<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
<span class="sourceLineNo">196</span><a name="line.196"></a>
<span class="sourceLineNo">197</span>    public MasterObserverOperation(boolean bypassable) {<a name="line.197"></a>
<span class="sourceLineNo">198</span>      this(null, bypassable);<a name="line.198"></a>
<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
<span class="sourceLineNo">200</span><a name="line.200"></a>
<span class="sourceLineNo">201</span>    public MasterObserverOperation(User user) {<a name="line.201"></a>
<span class="sourceLineNo">202</span>      super(masterObserverGetter, user);<a name="line.202"></a>
<span class="sourceLineNo">203</span>    }<a name="line.203"></a>
<span class="sourceLineNo">204</span><a name="line.204"></a>
<span class="sourceLineNo">205</span>    public MasterObserverOperation(User user, boolean bypassable) {<a name="line.205"></a>
<span class="sourceLineNo">206</span>      super(masterObserverGetter, user, bypassable);<a name="line.206"></a>
<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
<span class="sourceLineNo">208</span>  }<a name="line.208"></a>
<span class="sourceLineNo">209</span><a name="line.209"></a>
<span class="sourceLineNo">210</span>  //////////////////////////////////////////////////////////////////////////////////////////////////<a name="line.210"></a>
<span class="sourceLineNo">211</span>  // MasterObserver operations<a name="line.211"></a>
<span class="sourceLineNo">212</span>  //////////////////////////////////////////////////////////////////////////////////////////////////<a name="line.212"></a>
<span class="sourceLineNo">213</span><a name="line.213"></a>
<span class="sourceLineNo">214</span>  public void preCreateNamespace(final NamespaceDescriptor ns) throws IOException {<a name="line.214"></a>
<span class="sourceLineNo">215</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.215"></a>
<span class="sourceLineNo">216</span>      @Override<a name="line.216"></a>
<span class="sourceLineNo">217</span>      public void call(MasterObserver observer) throws IOException {<a name="line.217"></a>
<span class="sourceLineNo">218</span>        observer.preCreateNamespace(this, ns);<a name="line.218"></a>
<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
<span class="sourceLineNo">220</span>    });<a name="line.220"></a>
<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
<span class="sourceLineNo">222</span><a name="line.222"></a>
<span class="sourceLineNo">223</span>  public void postCreateNamespace(final NamespaceDescriptor ns) throws IOException {<a name="line.223"></a>
<span class="sourceLineNo">224</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.224"></a>
<span class="sourceLineNo">225</span>      @Override<a name="line.225"></a>
<span class="sourceLineNo">226</span>      public void call(MasterObserver observer) throws IOException {<a name="line.226"></a>
<span class="sourceLineNo">227</span>        observer.postCreateNamespace(this, ns);<a name="line.227"></a>
<span class="sourceLineNo">228</span>      }<a name="line.228"></a>
<span class="sourceLineNo">229</span>    });<a name="line.229"></a>
<span class="sourceLineNo">230</span>  }<a name="line.230"></a>
<span class="sourceLineNo">231</span><a name="line.231"></a>
<span class="sourceLineNo">232</span>  public void preDeleteNamespace(final String namespaceName) throws IOException {<a name="line.232"></a>
<span class="sourceLineNo">233</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.233"></a>
<span class="sourceLineNo">234</span>      @Override<a name="line.234"></a>
<span class="sourceLineNo">235</span>      public void call(MasterObserver observer) throws IOException {<a name="line.235"></a>
<span class="sourceLineNo">236</span>        observer.preDeleteNamespace(this, namespaceName);<a name="line.236"></a>
<span class="sourceLineNo">237</span>      }<a name="line.237"></a>
<span class="sourceLineNo">238</span>    });<a name="line.238"></a>
<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
<span class="sourceLineNo">240</span><a name="line.240"></a>
<span class="sourceLineNo">241</span>  public void postDeleteNamespace(final String namespaceName) throws IOException {<a name="line.241"></a>
<span class="sourceLineNo">242</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.242"></a>
<span class="sourceLineNo">243</span>      @Override<a name="line.243"></a>
<span class="sourceLineNo">244</span>      public void call(MasterObserver observer) throws IOException {<a name="line.244"></a>
<span class="sourceLineNo">245</span>        observer.postDeleteNamespace(this, namespaceName);<a name="line.245"></a>
<span class="sourceLineNo">246</span>      }<a name="line.246"></a>
<span class="sourceLineNo">247</span>    });<a name="line.247"></a>
<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
<span class="sourceLineNo">249</span><a name="line.249"></a>
<span class="sourceLineNo">250</span>  public void preModifyNamespace(final NamespaceDescriptor currentNsDescriptor,<a name="line.250"></a>
<span class="sourceLineNo">251</span>    final NamespaceDescriptor newNsDescriptor) throws IOException {<a name="line.251"></a>
<span class="sourceLineNo">252</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.252"></a>
<span class="sourceLineNo">253</span>      @Override<a name="line.253"></a>
<span class="sourceLineNo">254</span>      public void call(MasterObserver observer) throws IOException {<a name="line.254"></a>
<span class="sourceLineNo">255</span>        observer.preModifyNamespace(this, currentNsDescriptor, newNsDescriptor);<a name="line.255"></a>
<span class="sourceLineNo">256</span>      }<a name="line.256"></a>
<span class="sourceLineNo">257</span>    });<a name="line.257"></a>
<span class="sourceLineNo">258</span>  }<a name="line.258"></a>
<span class="sourceLineNo">259</span><a name="line.259"></a>
<span class="sourceLineNo">260</span>  public void postModifyNamespace(final NamespaceDescriptor oldNsDescriptor,<a name="line.260"></a>
<span class="sourceLineNo">261</span>    final NamespaceDescriptor currentNsDescriptor) throws IOException {<a name="line.261"></a>
<span class="sourceLineNo">262</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.262"></a>
<span class="sourceLineNo">263</span>      @Override<a name="line.263"></a>
<span class="sourceLineNo">264</span>      public void call(MasterObserver observer) throws IOException {<a name="line.264"></a>
<span class="sourceLineNo">265</span>        observer.postModifyNamespace(this, oldNsDescriptor, currentNsDescriptor);<a name="line.265"></a>
<span class="sourceLineNo">266</span>      }<a name="line.266"></a>
<span class="sourceLineNo">267</span>    });<a name="line.267"></a>
<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
<span class="sourceLineNo">269</span><a name="line.269"></a>
<span class="sourceLineNo">270</span>  public void preGetNamespaceDescriptor(final String namespaceName) throws IOException {<a name="line.270"></a>
<span class="sourceLineNo">271</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.271"></a>
<span class="sourceLineNo">272</span>      @Override<a name="line.272"></a>
<span class="sourceLineNo">273</span>      public void call(MasterObserver observer) throws IOException {<a name="line.273"></a>
<span class="sourceLineNo">274</span>        observer.preGetNamespaceDescriptor(this, namespaceName);<a name="line.274"></a>
<span class="sourceLineNo">275</span>      }<a name="line.275"></a>
<span class="sourceLineNo">276</span>    });<a name="line.276"></a>
<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
<span class="sourceLineNo">278</span><a name="line.278"></a>
<span class="sourceLineNo">279</span>  public void postGetNamespaceDescriptor(final NamespaceDescriptor ns) throws IOException {<a name="line.279"></a>
<span class="sourceLineNo">280</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.280"></a>
<span class="sourceLineNo">281</span>      @Override<a name="line.281"></a>
<span class="sourceLineNo">282</span>      public void call(MasterObserver observer) throws IOException {<a name="line.282"></a>
<span class="sourceLineNo">283</span>        observer.postGetNamespaceDescriptor(this, ns);<a name="line.283"></a>
<span class="sourceLineNo">284</span>      }<a name="line.284"></a>
<span class="sourceLineNo">285</span>    });<a name="line.285"></a>
<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
<span class="sourceLineNo">287</span><a name="line.287"></a>
<span class="sourceLineNo">288</span>  public void preListNamespaces(final List&lt;String&gt; namespaces) throws IOException {<a name="line.288"></a>
<span class="sourceLineNo">289</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.289"></a>
<span class="sourceLineNo">290</span>      @Override<a name="line.290"></a>
<span class="sourceLineNo">291</span>      public void call(MasterObserver oserver) throws IOException {<a name="line.291"></a>
<span class="sourceLineNo">292</span>        oserver.preListNamespaces(this, namespaces);<a name="line.292"></a>
<span class="sourceLineNo">293</span>      }<a name="line.293"></a>
<span class="sourceLineNo">294</span>    });<a name="line.294"></a>
<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
<span class="sourceLineNo">296</span><a name="line.296"></a>
<span class="sourceLineNo">297</span>  public void postListNamespaces(final List&lt;String&gt; namespaces) throws IOException {<a name="line.297"></a>
<span class="sourceLineNo">298</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.298"></a>
<span class="sourceLineNo">299</span>      @Override<a name="line.299"></a>
<span class="sourceLineNo">300</span>      public void call(MasterObserver oserver) throws IOException {<a name="line.300"></a>
<span class="sourceLineNo">301</span>        oserver.postListNamespaces(this, namespaces);<a name="line.301"></a>
<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
<span class="sourceLineNo">303</span>    });<a name="line.303"></a>
<span class="sourceLineNo">304</span>  }<a name="line.304"></a>
<span class="sourceLineNo">305</span><a name="line.305"></a>
<span class="sourceLineNo">306</span>  public void preListNamespaceDescriptors(final List&lt;NamespaceDescriptor&gt; descriptors)<a name="line.306"></a>
<span class="sourceLineNo">307</span>    throws IOException {<a name="line.307"></a>
<span class="sourceLineNo">308</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.308"></a>
<span class="sourceLineNo">309</span>      @Override<a name="line.309"></a>
<span class="sourceLineNo">310</span>      public void call(MasterObserver observer) throws IOException {<a name="line.310"></a>
<span class="sourceLineNo">311</span>        observer.preListNamespaceDescriptors(this, descriptors);<a name="line.311"></a>
<span class="sourceLineNo">312</span>      }<a name="line.312"></a>
<span class="sourceLineNo">313</span>    });<a name="line.313"></a>
<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
<span class="sourceLineNo">315</span><a name="line.315"></a>
<span class="sourceLineNo">316</span>  public void postListNamespaceDescriptors(final List&lt;NamespaceDescriptor&gt; descriptors)<a name="line.316"></a>
<span class="sourceLineNo">317</span>    throws IOException {<a name="line.317"></a>
<span class="sourceLineNo">318</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.318"></a>
<span class="sourceLineNo">319</span>      @Override<a name="line.319"></a>
<span class="sourceLineNo">320</span>      public void call(MasterObserver observer) throws IOException {<a name="line.320"></a>
<span class="sourceLineNo">321</span>        observer.postListNamespaceDescriptors(this, descriptors);<a name="line.321"></a>
<span class="sourceLineNo">322</span>      }<a name="line.322"></a>
<span class="sourceLineNo">323</span>    });<a name="line.323"></a>
<span class="sourceLineNo">324</span>  }<a name="line.324"></a>
<span class="sourceLineNo">325</span><a name="line.325"></a>
<span class="sourceLineNo">326</span>  /* Implementation of hooks for invoking MasterObservers */<a name="line.326"></a>
<span class="sourceLineNo">327</span><a name="line.327"></a>
<span class="sourceLineNo">328</span>  public TableDescriptor preCreateTableRegionsInfos(TableDescriptor desc) throws IOException {<a name="line.328"></a>
<span class="sourceLineNo">329</span>    if (coprocEnvironments.isEmpty()) {<a name="line.329"></a>
<span class="sourceLineNo">330</span>      return desc;<a name="line.330"></a>
<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
<span class="sourceLineNo">332</span>    return execOperationWithResult(<a name="line.332"></a>
<span class="sourceLineNo">333</span>      new ObserverOperationWithResult&lt;MasterObserver, TableDescriptor&gt;(masterObserverGetter, desc) {<a name="line.333"></a>
<span class="sourceLineNo">334</span><a name="line.334"></a>
<span class="sourceLineNo">335</span>        @Override<a name="line.335"></a>
<span class="sourceLineNo">336</span>        protected TableDescriptor call(MasterObserver observer) throws IOException {<a name="line.336"></a>
<span class="sourceLineNo">337</span>          return observer.preCreateTableRegionsInfos(this, getResult());<a name="line.337"></a>
<span class="sourceLineNo">338</span>        }<a name="line.338"></a>
<span class="sourceLineNo">339</span>      });<a name="line.339"></a>
<span class="sourceLineNo">340</span>  }<a name="line.340"></a>
<span class="sourceLineNo">341</span><a name="line.341"></a>
<span class="sourceLineNo">342</span>  public void preCreateTable(final TableDescriptor htd, final RegionInfo[] regions)<a name="line.342"></a>
<span class="sourceLineNo">343</span>    throws IOException {<a name="line.343"></a>
<span class="sourceLineNo">344</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.344"></a>
<span class="sourceLineNo">345</span>      @Override<a name="line.345"></a>
<span class="sourceLineNo">346</span>      public void call(MasterObserver observer) throws IOException {<a name="line.346"></a>
<span class="sourceLineNo">347</span>        observer.preCreateTable(this, htd, regions);<a name="line.347"></a>
<span class="sourceLineNo">348</span>      }<a name="line.348"></a>
<span class="sourceLineNo">349</span>    });<a name="line.349"></a>
<span class="sourceLineNo">350</span>  }<a name="line.350"></a>
<span class="sourceLineNo">351</span><a name="line.351"></a>
<span class="sourceLineNo">352</span>  public void postCreateTable(final TableDescriptor htd, final RegionInfo[] regions)<a name="line.352"></a>
<span class="sourceLineNo">353</span>    throws IOException {<a name="line.353"></a>
<span class="sourceLineNo">354</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.354"></a>
<span class="sourceLineNo">355</span>      @Override<a name="line.355"></a>
<span class="sourceLineNo">356</span>      public void call(MasterObserver observer) throws IOException {<a name="line.356"></a>
<span class="sourceLineNo">357</span>        observer.postCreateTable(this, htd, regions);<a name="line.357"></a>
<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
<span class="sourceLineNo">359</span>    });<a name="line.359"></a>
<span class="sourceLineNo">360</span>  }<a name="line.360"></a>
<span class="sourceLineNo">361</span><a name="line.361"></a>
<span class="sourceLineNo">362</span>  public void preCreateTableAction(final TableDescriptor htd, final RegionInfo[] regions,<a name="line.362"></a>
<span class="sourceLineNo">363</span>    final User user) throws IOException {<a name="line.363"></a>
<span class="sourceLineNo">364</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.364"></a>
<span class="sourceLineNo">365</span>      @Override<a name="line.365"></a>
<span class="sourceLineNo">366</span>      public void call(MasterObserver observer) throws IOException {<a name="line.366"></a>
<span class="sourceLineNo">367</span>        observer.preCreateTableAction(this, htd, regions);<a name="line.367"></a>
<span class="sourceLineNo">368</span>      }<a name="line.368"></a>
<span class="sourceLineNo">369</span>    });<a name="line.369"></a>
<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
<span class="sourceLineNo">371</span><a name="line.371"></a>
<span class="sourceLineNo">372</span>  public void postCompletedCreateTableAction(final TableDescriptor htd, final RegionInfo[] regions,<a name="line.372"></a>
<span class="sourceLineNo">373</span>    final User user) throws IOException {<a name="line.373"></a>
<span class="sourceLineNo">374</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.374"></a>
<span class="sourceLineNo">375</span>      @Override<a name="line.375"></a>
<span class="sourceLineNo">376</span>      public void call(MasterObserver observer) throws IOException {<a name="line.376"></a>
<span class="sourceLineNo">377</span>        observer.postCompletedCreateTableAction(this, htd, regions);<a name="line.377"></a>
<span class="sourceLineNo">378</span>      }<a name="line.378"></a>
<span class="sourceLineNo">379</span>    });<a name="line.379"></a>
<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
<span class="sourceLineNo">381</span><a name="line.381"></a>
<span class="sourceLineNo">382</span>  public void preDeleteTable(final TableName tableName) throws IOException {<a name="line.382"></a>
<span class="sourceLineNo">383</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.383"></a>
<span class="sourceLineNo">384</span>      @Override<a name="line.384"></a>
<span class="sourceLineNo">385</span>      public void call(MasterObserver observer) throws IOException {<a name="line.385"></a>
<span class="sourceLineNo">386</span>        observer.preDeleteTable(this, tableName);<a name="line.386"></a>
<span class="sourceLineNo">387</span>      }<a name="line.387"></a>
<span class="sourceLineNo">388</span>    });<a name="line.388"></a>
<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
<span class="sourceLineNo">390</span><a name="line.390"></a>
<span class="sourceLineNo">391</span>  public void postDeleteTable(final TableName tableName) throws IOException {<a name="line.391"></a>
<span class="sourceLineNo">392</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.392"></a>
<span class="sourceLineNo">393</span>      @Override<a name="line.393"></a>
<span class="sourceLineNo">394</span>      public void call(MasterObserver observer) throws IOException {<a name="line.394"></a>
<span class="sourceLineNo">395</span>        observer.postDeleteTable(this, tableName);<a name="line.395"></a>
<span class="sourceLineNo">396</span>      }<a name="line.396"></a>
<span class="sourceLineNo">397</span>    });<a name="line.397"></a>
<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
<span class="sourceLineNo">399</span><a name="line.399"></a>
<span class="sourceLineNo">400</span>  public void preDeleteTableAction(final TableName tableName, final User user) throws IOException {<a name="line.400"></a>
<span class="sourceLineNo">401</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.401"></a>
<span class="sourceLineNo">402</span>      @Override<a name="line.402"></a>
<span class="sourceLineNo">403</span>      public void call(MasterObserver observer) throws IOException {<a name="line.403"></a>
<span class="sourceLineNo">404</span>        observer.preDeleteTableAction(this, tableName);<a name="line.404"></a>
<span class="sourceLineNo">405</span>      }<a name="line.405"></a>
<span class="sourceLineNo">406</span>    });<a name="line.406"></a>
<span class="sourceLineNo">407</span>  }<a name="line.407"></a>
<span class="sourceLineNo">408</span><a name="line.408"></a>
<span class="sourceLineNo">409</span>  public void postCompletedDeleteTableAction(final TableName tableName, final User user)<a name="line.409"></a>
<span class="sourceLineNo">410</span>    throws IOException {<a name="line.410"></a>
<span class="sourceLineNo">411</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.411"></a>
<span class="sourceLineNo">412</span>      @Override<a name="line.412"></a>
<span class="sourceLineNo">413</span>      public void call(MasterObserver observer) throws IOException {<a name="line.413"></a>
<span class="sourceLineNo">414</span>        observer.postCompletedDeleteTableAction(this, tableName);<a name="line.414"></a>
<span class="sourceLineNo">415</span>      }<a name="line.415"></a>
<span class="sourceLineNo">416</span>    });<a name="line.416"></a>
<span class="sourceLineNo">417</span>  }<a name="line.417"></a>
<span class="sourceLineNo">418</span><a name="line.418"></a>
<span class="sourceLineNo">419</span>  public void preTruncateTable(final TableName tableName) throws IOException {<a name="line.419"></a>
<span class="sourceLineNo">420</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.420"></a>
<span class="sourceLineNo">421</span>      @Override<a name="line.421"></a>
<span class="sourceLineNo">422</span>      public void call(MasterObserver observer) throws IOException {<a name="line.422"></a>
<span class="sourceLineNo">423</span>        observer.preTruncateTable(this, tableName);<a name="line.423"></a>
<span class="sourceLineNo">424</span>      }<a name="line.424"></a>
<span class="sourceLineNo">425</span>    });<a name="line.425"></a>
<span class="sourceLineNo">426</span>  }<a name="line.426"></a>
<span class="sourceLineNo">427</span><a name="line.427"></a>
<span class="sourceLineNo">428</span>  public void postTruncateTable(final TableName tableName) throws IOException {<a name="line.428"></a>
<span class="sourceLineNo">429</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.429"></a>
<span class="sourceLineNo">430</span>      @Override<a name="line.430"></a>
<span class="sourceLineNo">431</span>      public void call(MasterObserver observer) throws IOException {<a name="line.431"></a>
<span class="sourceLineNo">432</span>        observer.postTruncateTable(this, tableName);<a name="line.432"></a>
<span class="sourceLineNo">433</span>      }<a name="line.433"></a>
<span class="sourceLineNo">434</span>    });<a name="line.434"></a>
<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
<span class="sourceLineNo">436</span><a name="line.436"></a>
<span class="sourceLineNo">437</span>  public void preTruncateTableAction(final TableName tableName, final User user)<a name="line.437"></a>
<span class="sourceLineNo">438</span>    throws IOException {<a name="line.438"></a>
<span class="sourceLineNo">439</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.439"></a>
<span class="sourceLineNo">440</span>      @Override<a name="line.440"></a>
<span class="sourceLineNo">441</span>      public void call(MasterObserver observer) throws IOException {<a name="line.441"></a>
<span class="sourceLineNo">442</span>        observer.preTruncateTableAction(this, tableName);<a name="line.442"></a>
<span class="sourceLineNo">443</span>      }<a name="line.443"></a>
<span class="sourceLineNo">444</span>    });<a name="line.444"></a>
<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
<span class="sourceLineNo">446</span><a name="line.446"></a>
<span class="sourceLineNo">447</span>  public void postCompletedTruncateTableAction(final TableName tableName, final User user)<a name="line.447"></a>
<span class="sourceLineNo">448</span>    throws IOException {<a name="line.448"></a>
<span class="sourceLineNo">449</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.449"></a>
<span class="sourceLineNo">450</span>      @Override<a name="line.450"></a>
<span class="sourceLineNo">451</span>      public void call(MasterObserver observer) throws IOException {<a name="line.451"></a>
<span class="sourceLineNo">452</span>        observer.postCompletedTruncateTableAction(this, tableName);<a name="line.452"></a>
<span class="sourceLineNo">453</span>      }<a name="line.453"></a>
<span class="sourceLineNo">454</span>    });<a name="line.454"></a>
<span class="sourceLineNo">455</span>  }<a name="line.455"></a>
<span class="sourceLineNo">456</span><a name="line.456"></a>
<span class="sourceLineNo">457</span>  public TableDescriptor preModifyTable(final TableName tableName,<a name="line.457"></a>
<span class="sourceLineNo">458</span>    final TableDescriptor currentDescriptor, final TableDescriptor newDescriptor)<a name="line.458"></a>
<span class="sourceLineNo">459</span>    throws IOException {<a name="line.459"></a>
<span class="sourceLineNo">460</span>    if (coprocEnvironments.isEmpty()) {<a name="line.460"></a>
<span class="sourceLineNo">461</span>      return newDescriptor;<a name="line.461"></a>
<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
<span class="sourceLineNo">463</span>    return execOperationWithResult(new ObserverOperationWithResult&lt;MasterObserver, TableDescriptor&gt;(<a name="line.463"></a>
<span class="sourceLineNo">464</span>      masterObserverGetter, newDescriptor) {<a name="line.464"></a>
<span class="sourceLineNo">465</span>      @Override<a name="line.465"></a>
<span class="sourceLineNo">466</span>      protected TableDescriptor call(MasterObserver observer) throws IOException {<a name="line.466"></a>
<span class="sourceLineNo">467</span>        return observer.preModifyTable(this, tableName, currentDescriptor, getResult());<a name="line.467"></a>
<span class="sourceLineNo">468</span>      }<a name="line.468"></a>
<span class="sourceLineNo">469</span>    });<a name="line.469"></a>
<span class="sourceLineNo">470</span>  }<a name="line.470"></a>
<span class="sourceLineNo">471</span><a name="line.471"></a>
<span class="sourceLineNo">472</span>  public void postModifyTable(final TableName tableName, final TableDescriptor oldDescriptor,<a name="line.472"></a>
<span class="sourceLineNo">473</span>    final TableDescriptor currentDescriptor) throws IOException {<a name="line.473"></a>
<span class="sourceLineNo">474</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.474"></a>
<span class="sourceLineNo">475</span>      @Override<a name="line.475"></a>
<span class="sourceLineNo">476</span>      public void call(MasterObserver observer) throws IOException {<a name="line.476"></a>
<span class="sourceLineNo">477</span>        observer.postModifyTable(this, tableName, oldDescriptor, currentDescriptor);<a name="line.477"></a>
<span class="sourceLineNo">478</span>      }<a name="line.478"></a>
<span class="sourceLineNo">479</span>    });<a name="line.479"></a>
<span class="sourceLineNo">480</span>  }<a name="line.480"></a>
<span class="sourceLineNo">481</span><a name="line.481"></a>
<span class="sourceLineNo">482</span>  public String preModifyTableStoreFileTracker(final TableName tableName, final String dstSFT)<a name="line.482"></a>
<span class="sourceLineNo">483</span>    throws IOException {<a name="line.483"></a>
<span class="sourceLineNo">484</span>    if (coprocEnvironments.isEmpty()) {<a name="line.484"></a>
<span class="sourceLineNo">485</span>      return dstSFT;<a name="line.485"></a>
<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
<span class="sourceLineNo">487</span>    return execOperationWithResult(<a name="line.487"></a>
<span class="sourceLineNo">488</span>      new ObserverOperationWithResult&lt;MasterObserver, String&gt;(masterObserverGetter, dstSFT) {<a name="line.488"></a>
<span class="sourceLineNo">489</span>        @Override<a name="line.489"></a>
<span class="sourceLineNo">490</span>        protected String call(MasterObserver observer) throws IOException {<a name="line.490"></a>
<span class="sourceLineNo">491</span>          return observer.preModifyTableStoreFileTracker(this, tableName, getResult());<a name="line.491"></a>
<span class="sourceLineNo">492</span>        }<a name="line.492"></a>
<span class="sourceLineNo">493</span>      });<a name="line.493"></a>
<span class="sourceLineNo">494</span>  }<a name="line.494"></a>
<span class="sourceLineNo">495</span><a name="line.495"></a>
<span class="sourceLineNo">496</span>  public void postModifyTableStoreFileTracker(final TableName tableName, final String dstSFT)<a name="line.496"></a>
<span class="sourceLineNo">497</span>    throws IOException {<a name="line.497"></a>
<span class="sourceLineNo">498</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.498"></a>
<span class="sourceLineNo">499</span>      @Override<a name="line.499"></a>
<span class="sourceLineNo">500</span>      public void call(MasterObserver observer) throws IOException {<a name="line.500"></a>
<span class="sourceLineNo">501</span>        observer.postModifyTableStoreFileTracker(this, tableName, dstSFT);<a name="line.501"></a>
<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
<span class="sourceLineNo">503</span>    });<a name="line.503"></a>
<span class="sourceLineNo">504</span>  }<a name="line.504"></a>
<span class="sourceLineNo">505</span><a name="line.505"></a>
<span class="sourceLineNo">506</span>  public String preModifyColumnFamilyStoreFileTracker(final TableName tableName,<a name="line.506"></a>
<span class="sourceLineNo">507</span>    final byte[] family, final String dstSFT) throws IOException {<a name="line.507"></a>
<span class="sourceLineNo">508</span>    if (coprocEnvironments.isEmpty()) {<a name="line.508"></a>
<span class="sourceLineNo">509</span>      return dstSFT;<a name="line.509"></a>
<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
<span class="sourceLineNo">511</span>    return execOperationWithResult(<a name="line.511"></a>
<span class="sourceLineNo">512</span>      new ObserverOperationWithResult&lt;MasterObserver, String&gt;(masterObserverGetter, dstSFT) {<a name="line.512"></a>
<span class="sourceLineNo">513</span>        @Override<a name="line.513"></a>
<span class="sourceLineNo">514</span>        protected String call(MasterObserver observer) throws IOException {<a name="line.514"></a>
<span class="sourceLineNo">515</span>          return observer.preModifyColumnFamilyStoreFileTracker(this, tableName, family,<a name="line.515"></a>
<span class="sourceLineNo">516</span>            getResult());<a name="line.516"></a>
<span class="sourceLineNo">517</span>        }<a name="line.517"></a>
<span class="sourceLineNo">518</span>      });<a name="line.518"></a>
<span class="sourceLineNo">519</span>  }<a name="line.519"></a>
<span class="sourceLineNo">520</span><a name="line.520"></a>
<span class="sourceLineNo">521</span>  public void postModifyColumnFamilyStoreFileTracker(final TableName tableName, final byte[] family,<a name="line.521"></a>
<span class="sourceLineNo">522</span>    final String dstSFT) throws IOException {<a name="line.522"></a>
<span class="sourceLineNo">523</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.523"></a>
<span class="sourceLineNo">524</span>      @Override<a name="line.524"></a>
<span class="sourceLineNo">525</span>      public void call(MasterObserver observer) throws IOException {<a name="line.525"></a>
<span class="sourceLineNo">526</span>        observer.postModifyColumnFamilyStoreFileTracker(this, tableName, family, dstSFT);<a name="line.526"></a>
<span class="sourceLineNo">527</span>      }<a name="line.527"></a>
<span class="sourceLineNo">528</span>    });<a name="line.528"></a>
<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
<span class="sourceLineNo">530</span><a name="line.530"></a>
<span class="sourceLineNo">531</span>  public void preModifyTableAction(final TableName tableName,<a name="line.531"></a>
<span class="sourceLineNo">532</span>    final TableDescriptor currentDescriptor, final TableDescriptor newDescriptor, final User user)<a name="line.532"></a>
<span class="sourceLineNo">533</span>    throws IOException {<a name="line.533"></a>
<span class="sourceLineNo">534</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.534"></a>
<span class="sourceLineNo">535</span>      @Override<a name="line.535"></a>
<span class="sourceLineNo">536</span>      public void call(MasterObserver observer) throws IOException {<a name="line.536"></a>
<span class="sourceLineNo">537</span>        observer.preModifyTableAction(this, tableName, currentDescriptor, newDescriptor);<a name="line.537"></a>
<span class="sourceLineNo">538</span>      }<a name="line.538"></a>
<span class="sourceLineNo">539</span>    });<a name="line.539"></a>
<span class="sourceLineNo">540</span>  }<a name="line.540"></a>
<span class="sourceLineNo">541</span><a name="line.541"></a>
<span class="sourceLineNo">542</span>  public void postCompletedModifyTableAction(final TableName tableName,<a name="line.542"></a>
<span class="sourceLineNo">543</span>    final TableDescriptor oldDescriptor, final TableDescriptor currentDescriptor, final User user)<a name="line.543"></a>
<span class="sourceLineNo">544</span>    throws IOException {<a name="line.544"></a>
<span class="sourceLineNo">545</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.545"></a>
<span class="sourceLineNo">546</span>      @Override<a name="line.546"></a>
<span class="sourceLineNo">547</span>      public void call(MasterObserver observer) throws IOException {<a name="line.547"></a>
<span class="sourceLineNo">548</span>        observer.postCompletedModifyTableAction(this, tableName, oldDescriptor, currentDescriptor);<a name="line.548"></a>
<span class="sourceLineNo">549</span>      }<a name="line.549"></a>
<span class="sourceLineNo">550</span>    });<a name="line.550"></a>
<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
<span class="sourceLineNo">552</span><a name="line.552"></a>
<span class="sourceLineNo">553</span>  public void preEnableTable(final TableName tableName) throws IOException {<a name="line.553"></a>
<span class="sourceLineNo">554</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.554"></a>
<span class="sourceLineNo">555</span>      @Override<a name="line.555"></a>
<span class="sourceLineNo">556</span>      public void call(MasterObserver observer) throws IOException {<a name="line.556"></a>
<span class="sourceLineNo">557</span>        observer.preEnableTable(this, tableName);<a name="line.557"></a>
<span class="sourceLineNo">558</span>      }<a name="line.558"></a>
<span class="sourceLineNo">559</span>    });<a name="line.559"></a>
<span class="sourceLineNo">560</span>  }<a name="line.560"></a>
<span class="sourceLineNo">561</span><a name="line.561"></a>
<span class="sourceLineNo">562</span>  public void postEnableTable(final TableName tableName) throws IOException {<a name="line.562"></a>
<span class="sourceLineNo">563</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.563"></a>
<span class="sourceLineNo">564</span>      @Override<a name="line.564"></a>
<span class="sourceLineNo">565</span>      public void call(MasterObserver observer) throws IOException {<a name="line.565"></a>
<span class="sourceLineNo">566</span>        observer.postEnableTable(this, tableName);<a name="line.566"></a>
<span class="sourceLineNo">567</span>      }<a name="line.567"></a>
<span class="sourceLineNo">568</span>    });<a name="line.568"></a>
<span class="sourceLineNo">569</span>  }<a name="line.569"></a>
<span class="sourceLineNo">570</span><a name="line.570"></a>
<span class="sourceLineNo">571</span>  public void preEnableTableAction(final TableName tableName, final User user) throws IOException {<a name="line.571"></a>
<span class="sourceLineNo">572</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.572"></a>
<span class="sourceLineNo">573</span>      @Override<a name="line.573"></a>
<span class="sourceLineNo">574</span>      public void call(MasterObserver observer) throws IOException {<a name="line.574"></a>
<span class="sourceLineNo">575</span>        observer.preEnableTableAction(this, tableName);<a name="line.575"></a>
<span class="sourceLineNo">576</span>      }<a name="line.576"></a>
<span class="sourceLineNo">577</span>    });<a name="line.577"></a>
<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
<span class="sourceLineNo">579</span><a name="line.579"></a>
<span class="sourceLineNo">580</span>  public void postCompletedEnableTableAction(final TableName tableName, final User user)<a name="line.580"></a>
<span class="sourceLineNo">581</span>    throws IOException {<a name="line.581"></a>
<span class="sourceLineNo">582</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.582"></a>
<span class="sourceLineNo">583</span>      @Override<a name="line.583"></a>
<span class="sourceLineNo">584</span>      public void call(MasterObserver observer) throws IOException {<a name="line.584"></a>
<span class="sourceLineNo">585</span>        observer.postCompletedEnableTableAction(this, tableName);<a name="line.585"></a>
<span class="sourceLineNo">586</span>      }<a name="line.586"></a>
<span class="sourceLineNo">587</span>    });<a name="line.587"></a>
<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
<span class="sourceLineNo">589</span><a name="line.589"></a>
<span class="sourceLineNo">590</span>  public void preDisableTable(final TableName tableName) throws IOException {<a name="line.590"></a>
<span class="sourceLineNo">591</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.591"></a>
<span class="sourceLineNo">592</span>      @Override<a name="line.592"></a>
<span class="sourceLineNo">593</span>      public void call(MasterObserver observer) throws IOException {<a name="line.593"></a>
<span class="sourceLineNo">594</span>        observer.preDisableTable(this, tableName);<a name="line.594"></a>
<span class="sourceLineNo">595</span>      }<a name="line.595"></a>
<span class="sourceLineNo">596</span>    });<a name="line.596"></a>
<span class="sourceLineNo">597</span>  }<a name="line.597"></a>
<span class="sourceLineNo">598</span><a name="line.598"></a>
<span class="sourceLineNo">599</span>  public void postDisableTable(final TableName tableName) throws IOException {<a name="line.599"></a>
<span class="sourceLineNo">600</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.600"></a>
<span class="sourceLineNo">601</span>      @Override<a name="line.601"></a>
<span class="sourceLineNo">602</span>      public void call(MasterObserver observer) throws IOException {<a name="line.602"></a>
<span class="sourceLineNo">603</span>        observer.postDisableTable(this, tableName);<a name="line.603"></a>
<span class="sourceLineNo">604</span>      }<a name="line.604"></a>
<span class="sourceLineNo">605</span>    });<a name="line.605"></a>
<span class="sourceLineNo">606</span>  }<a name="line.606"></a>
<span class="sourceLineNo">607</span><a name="line.607"></a>
<span class="sourceLineNo">608</span>  public void preDisableTableAction(final TableName tableName, final User user) throws IOException {<a name="line.608"></a>
<span class="sourceLineNo">609</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.609"></a>
<span class="sourceLineNo">610</span>      @Override<a name="line.610"></a>
<span class="sourceLineNo">611</span>      public void call(MasterObserver observer) throws IOException {<a name="line.611"></a>
<span class="sourceLineNo">612</span>        observer.preDisableTableAction(this, tableName);<a name="line.612"></a>
<span class="sourceLineNo">613</span>      }<a name="line.613"></a>
<span class="sourceLineNo">614</span>    });<a name="line.614"></a>
<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
<span class="sourceLineNo">616</span><a name="line.616"></a>
<span class="sourceLineNo">617</span>  public void postCompletedDisableTableAction(final TableName tableName, final User user)<a name="line.617"></a>
<span class="sourceLineNo">618</span>    throws IOException {<a name="line.618"></a>
<span class="sourceLineNo">619</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.619"></a>
<span class="sourceLineNo">620</span>      @Override<a name="line.620"></a>
<span class="sourceLineNo">621</span>      public void call(MasterObserver observer) throws IOException {<a name="line.621"></a>
<span class="sourceLineNo">622</span>        observer.postCompletedDisableTableAction(this, tableName);<a name="line.622"></a>
<span class="sourceLineNo">623</span>      }<a name="line.623"></a>
<span class="sourceLineNo">624</span>    });<a name="line.624"></a>
<span class="sourceLineNo">625</span>  }<a name="line.625"></a>
<span class="sourceLineNo">626</span><a name="line.626"></a>
<span class="sourceLineNo">627</span>  public void preAbortProcedure(final ProcedureExecutor&lt;MasterProcedureEnv&gt; procEnv,<a name="line.627"></a>
<span class="sourceLineNo">628</span>    final long procId) throws IOException {<a name="line.628"></a>
<span class="sourceLineNo">629</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.629"></a>
<span class="sourceLineNo">630</span>      @Override<a name="line.630"></a>
<span class="sourceLineNo">631</span>      public void call(MasterObserver observer) throws IOException {<a name="line.631"></a>
<span class="sourceLineNo">632</span>        observer.preAbortProcedure(this, procId);<a name="line.632"></a>
<span class="sourceLineNo">633</span>      }<a name="line.633"></a>
<span class="sourceLineNo">634</span>    });<a name="line.634"></a>
<span class="sourceLineNo">635</span>  }<a name="line.635"></a>
<span class="sourceLineNo">636</span><a name="line.636"></a>
<span class="sourceLineNo">637</span>  public void postAbortProcedure() throws IOException {<a name="line.637"></a>
<span class="sourceLineNo">638</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.638"></a>
<span class="sourceLineNo">639</span>      @Override<a name="line.639"></a>
<span class="sourceLineNo">640</span>      public void call(MasterObserver observer) throws IOException {<a name="line.640"></a>
<span class="sourceLineNo">641</span>        observer.postAbortProcedure(this);<a name="line.641"></a>
<span class="sourceLineNo">642</span>      }<a name="line.642"></a>
<span class="sourceLineNo">643</span>    });<a name="line.643"></a>
<span class="sourceLineNo">644</span>  }<a name="line.644"></a>
<span class="sourceLineNo">645</span><a name="line.645"></a>
<span class="sourceLineNo">646</span>  public void preGetProcedures() throws IOException {<a name="line.646"></a>
<span class="sourceLineNo">647</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.647"></a>
<span class="sourceLineNo">648</span>      @Override<a name="line.648"></a>
<span class="sourceLineNo">649</span>      public void call(MasterObserver observer) throws IOException {<a name="line.649"></a>
<span class="sourceLineNo">650</span>        observer.preGetProcedures(this);<a name="line.650"></a>
<span class="sourceLineNo">651</span>      }<a name="line.651"></a>
<span class="sourceLineNo">652</span>    });<a name="line.652"></a>
<span class="sourceLineNo">653</span>  }<a name="line.653"></a>
<span class="sourceLineNo">654</span><a name="line.654"></a>
<span class="sourceLineNo">655</span>  public void postGetProcedures(final List&lt;Procedure&lt;?&gt;&gt; procInfoList) throws IOException {<a name="line.655"></a>
<span class="sourceLineNo">656</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.656"></a>
<span class="sourceLineNo">657</span>      @Override<a name="line.657"></a>
<span class="sourceLineNo">658</span>      public void call(MasterObserver observer) throws IOException {<a name="line.658"></a>
<span class="sourceLineNo">659</span>        observer.postGetProcedures(this);<a name="line.659"></a>
<span class="sourceLineNo">660</span>      }<a name="line.660"></a>
<span class="sourceLineNo">661</span>    });<a name="line.661"></a>
<span class="sourceLineNo">662</span>  }<a name="line.662"></a>
<span class="sourceLineNo">663</span><a name="line.663"></a>
<span class="sourceLineNo">664</span>  public void preGetLocks() throws IOException {<a name="line.664"></a>
<span class="sourceLineNo">665</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.665"></a>
<span class="sourceLineNo">666</span>      @Override<a name="line.666"></a>
<span class="sourceLineNo">667</span>      public void call(MasterObserver observer) throws IOException {<a name="line.667"></a>
<span class="sourceLineNo">668</span>        observer.preGetLocks(this);<a name="line.668"></a>
<span class="sourceLineNo">669</span>      }<a name="line.669"></a>
<span class="sourceLineNo">670</span>    });<a name="line.670"></a>
<span class="sourceLineNo">671</span>  }<a name="line.671"></a>
<span class="sourceLineNo">672</span><a name="line.672"></a>
<span class="sourceLineNo">673</span>  public void postGetLocks(final List&lt;LockedResource&gt; lockedResources) throws IOException {<a name="line.673"></a>
<span class="sourceLineNo">674</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.674"></a>
<span class="sourceLineNo">675</span>      @Override<a name="line.675"></a>
<span class="sourceLineNo">676</span>      public void call(MasterObserver observer) throws IOException {<a name="line.676"></a>
<span class="sourceLineNo">677</span>        observer.postGetLocks(this);<a name="line.677"></a>
<span class="sourceLineNo">678</span>      }<a name="line.678"></a>
<span class="sourceLineNo">679</span>    });<a name="line.679"></a>
<span class="sourceLineNo">680</span>  }<a name="line.680"></a>
<span class="sourceLineNo">681</span><a name="line.681"></a>
<span class="sourceLineNo">682</span>  public void preMove(final RegionInfo region, final ServerName srcServer,<a name="line.682"></a>
<span class="sourceLineNo">683</span>    final ServerName destServer) throws IOException {<a name="line.683"></a>
<span class="sourceLineNo">684</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.684"></a>
<span class="sourceLineNo">685</span>      @Override<a name="line.685"></a>
<span class="sourceLineNo">686</span>      public void call(MasterObserver observer) throws IOException {<a name="line.686"></a>
<span class="sourceLineNo">687</span>        observer.preMove(this, region, srcServer, destServer);<a name="line.687"></a>
<span class="sourceLineNo">688</span>      }<a name="line.688"></a>
<span class="sourceLineNo">689</span>    });<a name="line.689"></a>
<span class="sourceLineNo">690</span>  }<a name="line.690"></a>
<span class="sourceLineNo">691</span><a name="line.691"></a>
<span class="sourceLineNo">692</span>  public void postMove(final RegionInfo region, final ServerName srcServer,<a name="line.692"></a>
<span class="sourceLineNo">693</span>    final ServerName destServer) throws IOException {<a name="line.693"></a>
<span class="sourceLineNo">694</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.694"></a>
<span class="sourceLineNo">695</span>      @Override<a name="line.695"></a>
<span class="sourceLineNo">696</span>      public void call(MasterObserver observer) throws IOException {<a name="line.696"></a>
<span class="sourceLineNo">697</span>        observer.postMove(this, region, srcServer, destServer);<a name="line.697"></a>
<span class="sourceLineNo">698</span>      }<a name="line.698"></a>
<span class="sourceLineNo">699</span>    });<a name="line.699"></a>
<span class="sourceLineNo">700</span>  }<a name="line.700"></a>
<span class="sourceLineNo">701</span><a name="line.701"></a>
<span class="sourceLineNo">702</span>  public void preAssign(final RegionInfo regionInfo) throws IOException {<a name="line.702"></a>
<span class="sourceLineNo">703</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.703"></a>
<span class="sourceLineNo">704</span>      @Override<a name="line.704"></a>
<span class="sourceLineNo">705</span>      public void call(MasterObserver observer) throws IOException {<a name="line.705"></a>
<span class="sourceLineNo">706</span>        observer.preAssign(this, regionInfo);<a name="line.706"></a>
<span class="sourceLineNo">707</span>      }<a name="line.707"></a>
<span class="sourceLineNo">708</span>    });<a name="line.708"></a>
<span class="sourceLineNo">709</span>  }<a name="line.709"></a>
<span class="sourceLineNo">710</span><a name="line.710"></a>
<span class="sourceLineNo">711</span>  public void postAssign(final RegionInfo regionInfo) throws IOException {<a name="line.711"></a>
<span class="sourceLineNo">712</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.712"></a>
<span class="sourceLineNo">713</span>      @Override<a name="line.713"></a>
<span class="sourceLineNo">714</span>      public void call(MasterObserver observer) throws IOException {<a name="line.714"></a>
<span class="sourceLineNo">715</span>        observer.postAssign(this, regionInfo);<a name="line.715"></a>
<span class="sourceLineNo">716</span>      }<a name="line.716"></a>
<span class="sourceLineNo">717</span>    });<a name="line.717"></a>
<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
<span class="sourceLineNo">719</span><a name="line.719"></a>
<span class="sourceLineNo">720</span>  public void preUnassign(final RegionInfo regionInfo) throws IOException {<a name="line.720"></a>
<span class="sourceLineNo">721</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.721"></a>
<span class="sourceLineNo">722</span>      @Override<a name="line.722"></a>
<span class="sourceLineNo">723</span>      public void call(MasterObserver observer) throws IOException {<a name="line.723"></a>
<span class="sourceLineNo">724</span>        observer.preUnassign(this, regionInfo);<a name="line.724"></a>
<span class="sourceLineNo">725</span>      }<a name="line.725"></a>
<span class="sourceLineNo">726</span>    });<a name="line.726"></a>
<span class="sourceLineNo">727</span>  }<a name="line.727"></a>
<span class="sourceLineNo">728</span><a name="line.728"></a>
<span class="sourceLineNo">729</span>  public void postUnassign(final RegionInfo regionInfo) throws IOException {<a name="line.729"></a>
<span class="sourceLineNo">730</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.730"></a>
<span class="sourceLineNo">731</span>      @Override<a name="line.731"></a>
<span class="sourceLineNo">732</span>      public void call(MasterObserver observer) throws IOException {<a name="line.732"></a>
<span class="sourceLineNo">733</span>        observer.postUnassign(this, regionInfo);<a name="line.733"></a>
<span class="sourceLineNo">734</span>      }<a name="line.734"></a>
<span class="sourceLineNo">735</span>    });<a name="line.735"></a>
<span class="sourceLineNo">736</span>  }<a name="line.736"></a>
<span class="sourceLineNo">737</span><a name="line.737"></a>
<span class="sourceLineNo">738</span>  public void preRegionOffline(final RegionInfo regionInfo) throws IOException {<a name="line.738"></a>
<span class="sourceLineNo">739</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.739"></a>
<span class="sourceLineNo">740</span>      @Override<a name="line.740"></a>
<span class="sourceLineNo">741</span>      public void call(MasterObserver observer) throws IOException {<a name="line.741"></a>
<span class="sourceLineNo">742</span>        observer.preRegionOffline(this, regionInfo);<a name="line.742"></a>
<span class="sourceLineNo">743</span>      }<a name="line.743"></a>
<span class="sourceLineNo">744</span>    });<a name="line.744"></a>
<span class="sourceLineNo">745</span>  }<a name="line.745"></a>
<span class="sourceLineNo">746</span><a name="line.746"></a>
<span class="sourceLineNo">747</span>  public void postRegionOffline(final RegionInfo regionInfo) throws IOException {<a name="line.747"></a>
<span class="sourceLineNo">748</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.748"></a>
<span class="sourceLineNo">749</span>      @Override<a name="line.749"></a>
<span class="sourceLineNo">750</span>      public void call(MasterObserver observer) throws IOException {<a name="line.750"></a>
<span class="sourceLineNo">751</span>        observer.postRegionOffline(this, regionInfo);<a name="line.751"></a>
<span class="sourceLineNo">752</span>      }<a name="line.752"></a>
<span class="sourceLineNo">753</span>    });<a name="line.753"></a>
<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
<span class="sourceLineNo">755</span><a name="line.755"></a>
<span class="sourceLineNo">756</span>  public void preMergeRegions(final RegionInfo[] regionsToMerge) throws IOException {<a name="line.756"></a>
<span class="sourceLineNo">757</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.757"></a>
<span class="sourceLineNo">758</span>      @Override<a name="line.758"></a>
<span class="sourceLineNo">759</span>      public void call(MasterObserver observer) throws IOException {<a name="line.759"></a>
<span class="sourceLineNo">760</span>        observer.preMergeRegions(this, regionsToMerge);<a name="line.760"></a>
<span class="sourceLineNo">761</span>      }<a name="line.761"></a>
<span class="sourceLineNo">762</span>    });<a name="line.762"></a>
<span class="sourceLineNo">763</span>  }<a name="line.763"></a>
<span class="sourceLineNo">764</span><a name="line.764"></a>
<span class="sourceLineNo">765</span>  public void postMergeRegions(final RegionInfo[] regionsToMerge) throws IOException {<a name="line.765"></a>
<span class="sourceLineNo">766</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.766"></a>
<span class="sourceLineNo">767</span>      @Override<a name="line.767"></a>
<span class="sourceLineNo">768</span>      public void call(MasterObserver observer) throws IOException {<a name="line.768"></a>
<span class="sourceLineNo">769</span>        observer.postMergeRegions(this, regionsToMerge);<a name="line.769"></a>
<span class="sourceLineNo">770</span>      }<a name="line.770"></a>
<span class="sourceLineNo">771</span>    });<a name="line.771"></a>
<span class="sourceLineNo">772</span>  }<a name="line.772"></a>
<span class="sourceLineNo">773</span><a name="line.773"></a>
<span class="sourceLineNo">774</span>  public boolean preBalance(final BalanceRequest request) throws IOException {<a name="line.774"></a>
<span class="sourceLineNo">775</span>    return execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.775"></a>
<span class="sourceLineNo">776</span>      @Override<a name="line.776"></a>
<span class="sourceLineNo">777</span>      public void call(MasterObserver observer) throws IOException {<a name="line.777"></a>
<span class="sourceLineNo">778</span>        observer.preBalance(this, request);<a name="line.778"></a>
<span class="sourceLineNo">779</span>      }<a name="line.779"></a>
<span class="sourceLineNo">780</span>    });<a name="line.780"></a>
<span class="sourceLineNo">781</span>  }<a name="line.781"></a>
<span class="sourceLineNo">782</span><a name="line.782"></a>
<span class="sourceLineNo">783</span>  public void postBalance(final BalanceRequest request, final List&lt;RegionPlan&gt; plans)<a name="line.783"></a>
<span class="sourceLineNo">784</span>    throws IOException {<a name="line.784"></a>
<span class="sourceLineNo">785</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.785"></a>
<span class="sourceLineNo">786</span>      @Override<a name="line.786"></a>
<span class="sourceLineNo">787</span>      public void call(MasterObserver observer) throws IOException {<a name="line.787"></a>
<span class="sourceLineNo">788</span>        observer.postBalance(this, request, plans);<a name="line.788"></a>
<span class="sourceLineNo">789</span>      }<a name="line.789"></a>
<span class="sourceLineNo">790</span>    });<a name="line.790"></a>
<span class="sourceLineNo">791</span>  }<a name="line.791"></a>
<span class="sourceLineNo">792</span><a name="line.792"></a>
<span class="sourceLineNo">793</span>  public void preSetSplitOrMergeEnabled(final boolean newValue, final MasterSwitchType switchType)<a name="line.793"></a>
<span class="sourceLineNo">794</span>    throws IOException {<a name="line.794"></a>
<span class="sourceLineNo">795</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.795"></a>
<span class="sourceLineNo">796</span>      @Override<a name="line.796"></a>
<span class="sourceLineNo">797</span>      public void call(MasterObserver observer) throws IOException {<a name="line.797"></a>
<span class="sourceLineNo">798</span>        observer.preSetSplitOrMergeEnabled(this, newValue, switchType);<a name="line.798"></a>
<span class="sourceLineNo">799</span>      }<a name="line.799"></a>
<span class="sourceLineNo">800</span>    });<a name="line.800"></a>
<span class="sourceLineNo">801</span>  }<a name="line.801"></a>
<span class="sourceLineNo">802</span><a name="line.802"></a>
<span class="sourceLineNo">803</span>  public void postSetSplitOrMergeEnabled(final boolean newValue, final MasterSwitchType switchType)<a name="line.803"></a>
<span class="sourceLineNo">804</span>    throws IOException {<a name="line.804"></a>
<span class="sourceLineNo">805</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.805"></a>
<span class="sourceLineNo">806</span>      @Override<a name="line.806"></a>
<span class="sourceLineNo">807</span>      public void call(MasterObserver observer) throws IOException {<a name="line.807"></a>
<span class="sourceLineNo">808</span>        observer.postSetSplitOrMergeEnabled(this, newValue, switchType);<a name="line.808"></a>
<span class="sourceLineNo">809</span>      }<a name="line.809"></a>
<span class="sourceLineNo">810</span>    });<a name="line.810"></a>
<span class="sourceLineNo">811</span>  }<a name="line.811"></a>
<span class="sourceLineNo">812</span><a name="line.812"></a>
<span class="sourceLineNo">813</span>  /**<a name="line.813"></a>
<span class="sourceLineNo">814</span>   * Invoked just before calling the split region procedure<a name="line.814"></a>
<span class="sourceLineNo">815</span>   * @param tableName the table where the region belongs to<a name="line.815"></a>
<span class="sourceLineNo">816</span>   * @param splitRow  the split point<a name="line.816"></a>
<span class="sourceLineNo">817</span>   */<a name="line.817"></a>
<span class="sourceLineNo">818</span>  public void preSplitRegion(final TableName tableName, final byte[] splitRow) throws IOException {<a name="line.818"></a>
<span class="sourceLineNo">819</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.819"></a>
<span class="sourceLineNo">820</span>      @Override<a name="line.820"></a>
<span class="sourceLineNo">821</span>      public void call(MasterObserver observer) throws IOException {<a name="line.821"></a>
<span class="sourceLineNo">822</span>        observer.preSplitRegion(this, tableName, splitRow);<a name="line.822"></a>
<span class="sourceLineNo">823</span>      }<a name="line.823"></a>
<span class="sourceLineNo">824</span>    });<a name="line.824"></a>
<span class="sourceLineNo">825</span>  }<a name="line.825"></a>
<span class="sourceLineNo">826</span><a name="line.826"></a>
<span class="sourceLineNo">827</span>  /**<a name="line.827"></a>
<span class="sourceLineNo">828</span>   * Invoked just before a split<a name="line.828"></a>
<span class="sourceLineNo">829</span>   * @param tableName the table where the region belongs to<a name="line.829"></a>
<span class="sourceLineNo">830</span>   * @param splitRow  the split point<a name="line.830"></a>
<span class="sourceLineNo">831</span>   * @param user      the user<a name="line.831"></a>
<span class="sourceLineNo">832</span>   */<a name="line.832"></a>
<span class="sourceLineNo">833</span>  public void preSplitRegionAction(final TableName tableName, final byte[] splitRow,<a name="line.833"></a>
<span class="sourceLineNo">834</span>    final User user) throws IOException {<a name="line.834"></a>
<span class="sourceLineNo">835</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.835"></a>
<span class="sourceLineNo">836</span>      @Override<a name="line.836"></a>
<span class="sourceLineNo">837</span>      public void call(MasterObserver observer) throws IOException {<a name="line.837"></a>
<span class="sourceLineNo">838</span>        observer.preSplitRegionAction(this, tableName, splitRow);<a name="line.838"></a>
<span class="sourceLineNo">839</span>      }<a name="line.839"></a>
<span class="sourceLineNo">840</span>    });<a name="line.840"></a>
<span class="sourceLineNo">841</span>  }<a name="line.841"></a>
<span class="sourceLineNo">842</span><a name="line.842"></a>
<span class="sourceLineNo">843</span>  /**<a name="line.843"></a>
<span class="sourceLineNo">844</span>   * Invoked just after a split<a name="line.844"></a>
<span class="sourceLineNo">845</span>   * @param regionInfoA the new left-hand daughter region<a name="line.845"></a>
<span class="sourceLineNo">846</span>   * @param regionInfoB the new right-hand daughter region<a name="line.846"></a>
<span class="sourceLineNo">847</span>   * @param user        the user<a name="line.847"></a>
<span class="sourceLineNo">848</span>   */<a name="line.848"></a>
<span class="sourceLineNo">849</span>  public void postCompletedSplitRegionAction(final RegionInfo regionInfoA,<a name="line.849"></a>
<span class="sourceLineNo">850</span>    final RegionInfo regionInfoB, final User user) throws IOException {<a name="line.850"></a>
<span class="sourceLineNo">851</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.851"></a>
<span class="sourceLineNo">852</span>      @Override<a name="line.852"></a>
<span class="sourceLineNo">853</span>      public void call(MasterObserver observer) throws IOException {<a name="line.853"></a>
<span class="sourceLineNo">854</span>        observer.postCompletedSplitRegionAction(this, regionInfoA, regionInfoB);<a name="line.854"></a>
<span class="sourceLineNo">855</span>      }<a name="line.855"></a>
<span class="sourceLineNo">856</span>    });<a name="line.856"></a>
<span class="sourceLineNo">857</span>  }<a name="line.857"></a>
<span class="sourceLineNo">858</span><a name="line.858"></a>
<span class="sourceLineNo">859</span>  /**<a name="line.859"></a>
<span class="sourceLineNo">860</span>   * This will be called before update META step as part of split table region procedure.<a name="line.860"></a>
<span class="sourceLineNo">861</span>   * @param user the user<a name="line.861"></a>
<span class="sourceLineNo">862</span>   */<a name="line.862"></a>
<span class="sourceLineNo">863</span>  public void preSplitBeforeMETAAction(final byte[] splitKey, final List&lt;Mutation&gt; metaEntries,<a name="line.863"></a>
<span class="sourceLineNo">864</span>    final User user) throws IOException {<a name="line.864"></a>
<span class="sourceLineNo">865</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.865"></a>
<span class="sourceLineNo">866</span>      @Override<a name="line.866"></a>
<span class="sourceLineNo">867</span>      public void call(MasterObserver observer) throws IOException {<a name="line.867"></a>
<span class="sourceLineNo">868</span>        observer.preSplitRegionBeforeMETAAction(this, splitKey, metaEntries);<a name="line.868"></a>
<span class="sourceLineNo">869</span>      }<a name="line.869"></a>
<span class="sourceLineNo">870</span>    });<a name="line.870"></a>
<span class="sourceLineNo">871</span>  }<a name="line.871"></a>
<span class="sourceLineNo">872</span><a name="line.872"></a>
<span class="sourceLineNo">873</span>  /**<a name="line.873"></a>
<span class="sourceLineNo">874</span>   * This will be called after update META step as part of split table region procedure.<a name="line.874"></a>
<span class="sourceLineNo">875</span>   * @param user the user<a name="line.875"></a>
<span class="sourceLineNo">876</span>   */<a name="line.876"></a>
<span class="sourceLineNo">877</span>  public void preSplitAfterMETAAction(final User user) throws IOException {<a name="line.877"></a>
<span class="sourceLineNo">878</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.878"></a>
<span class="sourceLineNo">879</span>      @Override<a name="line.879"></a>
<span class="sourceLineNo">880</span>      public void call(MasterObserver observer) throws IOException {<a name="line.880"></a>
<span class="sourceLineNo">881</span>        observer.preSplitRegionAfterMETAAction(this);<a name="line.881"></a>
<span class="sourceLineNo">882</span>      }<a name="line.882"></a>
<span class="sourceLineNo">883</span>    });<a name="line.883"></a>
<span class="sourceLineNo">884</span>  }<a name="line.884"></a>
<span class="sourceLineNo">885</span><a name="line.885"></a>
<span class="sourceLineNo">886</span>  /**<a name="line.886"></a>
<span class="sourceLineNo">887</span>   * Invoked just after the rollback of a failed split<a name="line.887"></a>
<span class="sourceLineNo">888</span>   * @param user the user<a name="line.888"></a>
<span class="sourceLineNo">889</span>   */<a name="line.889"></a>
<span class="sourceLineNo">890</span>  public void postRollBackSplitRegionAction(final User user) throws IOException {<a name="line.890"></a>
<span class="sourceLineNo">891</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.891"></a>
<span class="sourceLineNo">892</span>      @Override<a name="line.892"></a>
<span class="sourceLineNo">893</span>      public void call(MasterObserver observer) throws IOException {<a name="line.893"></a>
<span class="sourceLineNo">894</span>        observer.postRollBackSplitRegionAction(this);<a name="line.894"></a>
<span class="sourceLineNo">895</span>      }<a name="line.895"></a>
<span class="sourceLineNo">896</span>    });<a name="line.896"></a>
<span class="sourceLineNo">897</span>  }<a name="line.897"></a>
<span class="sourceLineNo">898</span><a name="line.898"></a>
<span class="sourceLineNo">899</span>  /**<a name="line.899"></a>
<span class="sourceLineNo">900</span>   * Invoked just before a merge<a name="line.900"></a>
<span class="sourceLineNo">901</span>   * @param regionsToMerge the regions to merge<a name="line.901"></a>
<span class="sourceLineNo">902</span>   * @param user           the user<a name="line.902"></a>
<span class="sourceLineNo">903</span>   */<a name="line.903"></a>
<span class="sourceLineNo">904</span>  public void preMergeRegionsAction(final RegionInfo[] regionsToMerge, final User user)<a name="line.904"></a>
<span class="sourceLineNo">905</span>    throws IOException {<a name="line.905"></a>
<span class="sourceLineNo">906</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.906"></a>
<span class="sourceLineNo">907</span>      @Override<a name="line.907"></a>
<span class="sourceLineNo">908</span>      public void call(MasterObserver observer) throws IOException {<a name="line.908"></a>
<span class="sourceLineNo">909</span>        observer.preMergeRegionsAction(this, regionsToMerge);<a name="line.909"></a>
<span class="sourceLineNo">910</span>      }<a name="line.910"></a>
<span class="sourceLineNo">911</span>    });<a name="line.911"></a>
<span class="sourceLineNo">912</span>  }<a name="line.912"></a>
<span class="sourceLineNo">913</span><a name="line.913"></a>
<span class="sourceLineNo">914</span>  /**<a name="line.914"></a>
<span class="sourceLineNo">915</span>   * Invoked after completing merge regions operation<a name="line.915"></a>
<span class="sourceLineNo">916</span>   * @param regionsToMerge the regions to merge<a name="line.916"></a>
<span class="sourceLineNo">917</span>   * @param mergedRegion   the new merged region<a name="line.917"></a>
<span class="sourceLineNo">918</span>   * @param user           the user<a name="line.918"></a>
<span class="sourceLineNo">919</span>   */<a name="line.919"></a>
<span class="sourceLineNo">920</span>  public void postCompletedMergeRegionsAction(final RegionInfo[] regionsToMerge,<a name="line.920"></a>
<span class="sourceLineNo">921</span>    final RegionInfo mergedRegion, final User user) throws IOException {<a name="line.921"></a>
<span class="sourceLineNo">922</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.922"></a>
<span class="sourceLineNo">923</span>      @Override<a name="line.923"></a>
<span class="sourceLineNo">924</span>      public void call(MasterObserver observer) throws IOException {<a name="line.924"></a>
<span class="sourceLineNo">925</span>        observer.postCompletedMergeRegionsAction(this, regionsToMerge, mergedRegion);<a name="line.925"></a>
<span class="sourceLineNo">926</span>      }<a name="line.926"></a>
<span class="sourceLineNo">927</span>    });<a name="line.927"></a>
<span class="sourceLineNo">928</span>  }<a name="line.928"></a>
<span class="sourceLineNo">929</span><a name="line.929"></a>
<span class="sourceLineNo">930</span>  /**<a name="line.930"></a>
<span class="sourceLineNo">931</span>   * Invoked before merge regions operation writes the new region to hbase:meta<a name="line.931"></a>
<span class="sourceLineNo">932</span>   * @param regionsToMerge the regions to merge<a name="line.932"></a>
<span class="sourceLineNo">933</span>   * @param metaEntries    the meta entry<a name="line.933"></a>
<span class="sourceLineNo">934</span>   * @param user           the user<a name="line.934"></a>
<span class="sourceLineNo">935</span>   */<a name="line.935"></a>
<span class="sourceLineNo">936</span>  public void preMergeRegionsCommit(final RegionInfo[] regionsToMerge,<a name="line.936"></a>
<span class="sourceLineNo">937</span>    final @MetaMutationAnnotation List&lt;Mutation&gt; metaEntries, final User user) throws IOException {<a name="line.937"></a>
<span class="sourceLineNo">938</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.938"></a>
<span class="sourceLineNo">939</span>      @Override<a name="line.939"></a>
<span class="sourceLineNo">940</span>      public void call(MasterObserver observer) throws IOException {<a name="line.940"></a>
<span class="sourceLineNo">941</span>        observer.preMergeRegionsCommitAction(this, regionsToMerge, metaEntries);<a name="line.941"></a>
<span class="sourceLineNo">942</span>      }<a name="line.942"></a>
<span class="sourceLineNo">943</span>    });<a name="line.943"></a>
<span class="sourceLineNo">944</span>  }<a name="line.944"></a>
<span class="sourceLineNo">945</span><a name="line.945"></a>
<span class="sourceLineNo">946</span>  /**<a name="line.946"></a>
<span class="sourceLineNo">947</span>   * Invoked after merge regions operation writes the new region to hbase:meta<a name="line.947"></a>
<span class="sourceLineNo">948</span>   * @param regionsToMerge the regions to merge<a name="line.948"></a>
<span class="sourceLineNo">949</span>   * @param mergedRegion   the new merged region<a name="line.949"></a>
<span class="sourceLineNo">950</span>   * @param user           the user<a name="line.950"></a>
<span class="sourceLineNo">951</span>   */<a name="line.951"></a>
<span class="sourceLineNo">952</span>  public void postMergeRegionsCommit(final RegionInfo[] regionsToMerge,<a name="line.952"></a>
<span class="sourceLineNo">953</span>    final RegionInfo mergedRegion, final User user) throws IOException {<a name="line.953"></a>
<span class="sourceLineNo">954</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.954"></a>
<span class="sourceLineNo">955</span>      @Override<a name="line.955"></a>
<span class="sourceLineNo">956</span>      public void call(MasterObserver observer) throws IOException {<a name="line.956"></a>
<span class="sourceLineNo">957</span>        observer.postMergeRegionsCommitAction(this, regionsToMerge, mergedRegion);<a name="line.957"></a>
<span class="sourceLineNo">958</span>      }<a name="line.958"></a>
<span class="sourceLineNo">959</span>    });<a name="line.959"></a>
<span class="sourceLineNo">960</span>  }<a name="line.960"></a>
<span class="sourceLineNo">961</span><a name="line.961"></a>
<span class="sourceLineNo">962</span>  /**<a name="line.962"></a>
<span class="sourceLineNo">963</span>   * Invoked after rollback merge regions operation<a name="line.963"></a>
<span class="sourceLineNo">964</span>   * @param regionsToMerge the regions to merge<a name="line.964"></a>
<span class="sourceLineNo">965</span>   * @param user           the user<a name="line.965"></a>
<span class="sourceLineNo">966</span>   */<a name="line.966"></a>
<span class="sourceLineNo">967</span>  public void postRollBackMergeRegionsAction(final RegionInfo[] regionsToMerge, final User user)<a name="line.967"></a>
<span class="sourceLineNo">968</span>    throws IOException {<a name="line.968"></a>
<span class="sourceLineNo">969</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.969"></a>
<span class="sourceLineNo">970</span>      @Override<a name="line.970"></a>
<span class="sourceLineNo">971</span>      public void call(MasterObserver observer) throws IOException {<a name="line.971"></a>
<span class="sourceLineNo">972</span>        observer.postRollBackMergeRegionsAction(this, regionsToMerge);<a name="line.972"></a>
<span class="sourceLineNo">973</span>      }<a name="line.973"></a>
<span class="sourceLineNo">974</span>    });<a name="line.974"></a>
<span class="sourceLineNo">975</span>  }<a name="line.975"></a>
<span class="sourceLineNo">976</span><a name="line.976"></a>
<span class="sourceLineNo">977</span>  // This hook allows Coprocessor change value of balance switch.<a name="line.977"></a>
<span class="sourceLineNo">978</span>  public void preBalanceSwitch(final boolean b) throws IOException {<a name="line.978"></a>
<span class="sourceLineNo">979</span>    if (this.coprocEnvironments.isEmpty()) {<a name="line.979"></a>
<span class="sourceLineNo">980</span>      return;<a name="line.980"></a>
<span class="sourceLineNo">981</span>    }<a name="line.981"></a>
<span class="sourceLineNo">982</span>    execOperation(new MasterObserverOperation() {<a name="line.982"></a>
<span class="sourceLineNo">983</span>      @Override<a name="line.983"></a>
<span class="sourceLineNo">984</span>      public void call(MasterObserver observer) throws IOException {<a name="line.984"></a>
<span class="sourceLineNo">985</span>        observer.preBalanceSwitch(this, b);<a name="line.985"></a>
<span class="sourceLineNo">986</span>      }<a name="line.986"></a>
<span class="sourceLineNo">987</span>    });<a name="line.987"></a>
<span class="sourceLineNo">988</span>  }<a name="line.988"></a>
<span class="sourceLineNo">989</span><a name="line.989"></a>
<span class="sourceLineNo">990</span>  public void postBalanceSwitch(final boolean oldValue, final boolean newValue) throws IOException {<a name="line.990"></a>
<span class="sourceLineNo">991</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.991"></a>
<span class="sourceLineNo">992</span>      @Override<a name="line.992"></a>
<span class="sourceLineNo">993</span>      public void call(MasterObserver observer) throws IOException {<a name="line.993"></a>
<span class="sourceLineNo">994</span>        observer.postBalanceSwitch(this, oldValue, newValue);<a name="line.994"></a>
<span class="sourceLineNo">995</span>      }<a name="line.995"></a>
<span class="sourceLineNo">996</span>    });<a name="line.996"></a>
<span class="sourceLineNo">997</span>  }<a name="line.997"></a>
<span class="sourceLineNo">998</span><a name="line.998"></a>
<span class="sourceLineNo">999</span>  public void preShutdown() throws IOException {<a name="line.999"></a>
<span class="sourceLineNo">1000</span>    // While stopping the cluster all coprocessors method should be executed first then the<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>    // coprocessor should be cleaned up.<a name="line.1001"></a>
<span class="sourceLineNo">1002</span>    if (coprocEnvironments.isEmpty()) {<a name="line.1002"></a>
<span class="sourceLineNo">1003</span>      return;<a name="line.1003"></a>
<span class="sourceLineNo">1004</span>    }<a name="line.1004"></a>
<span class="sourceLineNo">1005</span>    execShutdown(new MasterObserverOperation() {<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>      @Override<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1007"></a>
<span class="sourceLineNo">1008</span>        observer.preShutdown(this);<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>      }<a name="line.1009"></a>
<span class="sourceLineNo">1010</span><a name="line.1010"></a>
<span class="sourceLineNo">1011</span>      @Override<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>      public void postEnvCall() {<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>        // invoke coprocessor stop method<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>        shutdown(this.getEnvironment());<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>      }<a name="line.1015"></a>
<span class="sourceLineNo">1016</span>    });<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>  }<a name="line.1017"></a>
<span class="sourceLineNo">1018</span><a name="line.1018"></a>
<span class="sourceLineNo">1019</span>  public void preStopMaster() throws IOException {<a name="line.1019"></a>
<span class="sourceLineNo">1020</span>    // While stopping master all coprocessors method should be executed first then the coprocessor<a name="line.1020"></a>
<span class="sourceLineNo">1021</span>    // environment should be cleaned up.<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>    if (coprocEnvironments.isEmpty()) {<a name="line.1022"></a>
<span class="sourceLineNo">1023</span>      return;<a name="line.1023"></a>
<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>    execShutdown(new MasterObserverOperation() {<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>      @Override<a name="line.1026"></a>
<span class="sourceLineNo">1027</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1027"></a>
<span class="sourceLineNo">1028</span>        observer.preStopMaster(this);<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>      }<a name="line.1029"></a>
<span class="sourceLineNo">1030</span><a name="line.1030"></a>
<span class="sourceLineNo">1031</span>      @Override<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>      public void postEnvCall() {<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>        // invoke coprocessor stop method<a name="line.1033"></a>
<span class="sourceLineNo">1034</span>        shutdown(this.getEnvironment());<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>      }<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>    });<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>  }<a name="line.1037"></a>
<span class="sourceLineNo">1038</span><a name="line.1038"></a>
<span class="sourceLineNo">1039</span>  public void preMasterInitialization() throws IOException {<a name="line.1039"></a>
<span class="sourceLineNo">1040</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>      @Override<a name="line.1041"></a>
<span class="sourceLineNo">1042</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1042"></a>
<span class="sourceLineNo">1043</span>        observer.preMasterInitialization(this);<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>      }<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>    });<a name="line.1045"></a>
<span class="sourceLineNo">1046</span>  }<a name="line.1046"></a>
<span class="sourceLineNo">1047</span><a name="line.1047"></a>
<span class="sourceLineNo">1048</span>  public void postStartMaster() throws IOException {<a name="line.1048"></a>
<span class="sourceLineNo">1049</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1049"></a>
<span class="sourceLineNo">1050</span>      @Override<a name="line.1050"></a>
<span class="sourceLineNo">1051</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1051"></a>
<span class="sourceLineNo">1052</span>        observer.postStartMaster(this);<a name="line.1052"></a>
<span class="sourceLineNo">1053</span>      }<a name="line.1053"></a>
<span class="sourceLineNo">1054</span>    });<a name="line.1054"></a>
<span class="sourceLineNo">1055</span>  }<a name="line.1055"></a>
<span class="sourceLineNo">1056</span><a name="line.1056"></a>
<span class="sourceLineNo">1057</span>  public void preSnapshot(final SnapshotDescription snapshot,<a name="line.1057"></a>
<span class="sourceLineNo">1058</span>    final TableDescriptor hTableDescriptor, final User user) throws IOException {<a name="line.1058"></a>
<span class="sourceLineNo">1059</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.1059"></a>
<span class="sourceLineNo">1060</span>      @Override<a name="line.1060"></a>
<span class="sourceLineNo">1061</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1061"></a>
<span class="sourceLineNo">1062</span>        observer.preSnapshot(this, snapshot, hTableDescriptor);<a name="line.1062"></a>
<span class="sourceLineNo">1063</span>      }<a name="line.1063"></a>
<span class="sourceLineNo">1064</span>    });<a name="line.1064"></a>
<span class="sourceLineNo">1065</span>  }<a name="line.1065"></a>
<span class="sourceLineNo">1066</span><a name="line.1066"></a>
<span class="sourceLineNo">1067</span>  public void postSnapshot(final SnapshotDescription snapshot,<a name="line.1067"></a>
<span class="sourceLineNo">1068</span>    final TableDescriptor hTableDescriptor, final User user) throws IOException {<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation(user) {<a name="line.1069"></a>
<span class="sourceLineNo">1070</span>      @Override<a name="line.1070"></a>
<span class="sourceLineNo">1071</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1071"></a>
<span class="sourceLineNo">1072</span>        observer.postSnapshot(this, snapshot, hTableDescriptor);<a name="line.1072"></a>
<span class="sourceLineNo">1073</span>      }<a name="line.1073"></a>
<span class="sourceLineNo">1074</span>    });<a name="line.1074"></a>
<span class="sourceLineNo">1075</span>  }<a name="line.1075"></a>
<span class="sourceLineNo">1076</span><a name="line.1076"></a>
<span class="sourceLineNo">1077</span>  public void postCompletedSnapshotAction(SnapshotDescription snapshot,<a name="line.1077"></a>
<span class="sourceLineNo">1078</span>    TableDescriptor hTableDescriptor) throws IOException {<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1079"></a>
<span class="sourceLineNo">1080</span>      @Override<a name="line.1080"></a>
<span class="sourceLineNo">1081</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>        observer.postCompletedSnapshotAction(this, snapshot, hTableDescriptor);<a name="line.1082"></a>
<span class="sourceLineNo">1083</span>      }<a name="line.1083"></a>
<span class="sourceLineNo">1084</span>    });<a name="line.1084"></a>
<span class="sourceLineNo">1085</span>  }<a name="line.1085"></a>
<span class="sourceLineNo">1086</span><a name="line.1086"></a>
<span class="sourceLineNo">1087</span>  public void preListSnapshot(final SnapshotDescription snapshot) throws IOException {<a name="line.1087"></a>
<span class="sourceLineNo">1088</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1088"></a>
<span class="sourceLineNo">1089</span>      @Override<a name="line.1089"></a>
<span class="sourceLineNo">1090</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1090"></a>
<span class="sourceLineNo">1091</span>        observer.preListSnapshot(this, snapshot);<a name="line.1091"></a>
<span class="sourceLineNo">1092</span>      }<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>    });<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>  }<a name="line.1094"></a>
<span class="sourceLineNo">1095</span><a name="line.1095"></a>
<span class="sourceLineNo">1096</span>  public void postListSnapshot(final SnapshotDescription snapshot) throws IOException {<a name="line.1096"></a>
<span class="sourceLineNo">1097</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1097"></a>
<span class="sourceLineNo">1098</span>      @Override<a name="line.1098"></a>
<span class="sourceLineNo">1099</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1099"></a>
<span class="sourceLineNo">1100</span>        observer.postListSnapshot(this, snapshot);<a name="line.1100"></a>
<span class="sourceLineNo">1101</span>      }<a name="line.1101"></a>
<span class="sourceLineNo">1102</span>    });<a name="line.1102"></a>
<span class="sourceLineNo">1103</span>  }<a name="line.1103"></a>
<span class="sourceLineNo">1104</span><a name="line.1104"></a>
<span class="sourceLineNo">1105</span>  public void preCloneSnapshot(final SnapshotDescription snapshot,<a name="line.1105"></a>
<span class="sourceLineNo">1106</span>    final TableDescriptor hTableDescriptor) throws IOException {<a name="line.1106"></a>
<span class="sourceLineNo">1107</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1107"></a>
<span class="sourceLineNo">1108</span>      @Override<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>        observer.preCloneSnapshot(this, snapshot, hTableDescriptor);<a name="line.1110"></a>
<span class="sourceLineNo">1111</span>      }<a name="line.1111"></a>
<span class="sourceLineNo">1112</span>    });<a name="line.1112"></a>
<span class="sourceLineNo">1113</span>  }<a name="line.1113"></a>
<span class="sourceLineNo">1114</span><a name="line.1114"></a>
<span class="sourceLineNo">1115</span>  public void postCloneSnapshot(final SnapshotDescription snapshot,<a name="line.1115"></a>
<span class="sourceLineNo">1116</span>    final TableDescriptor hTableDescriptor) throws IOException {<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>      @Override<a name="line.1118"></a>
<span class="sourceLineNo">1119</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1119"></a>
<span class="sourceLineNo">1120</span>        observer.postCloneSnapshot(this, snapshot, hTableDescriptor);<a name="line.1120"></a>
<span class="sourceLineNo">1121</span>      }<a name="line.1121"></a>
<span class="sourceLineNo">1122</span>    });<a name="line.1122"></a>
<span class="sourceLineNo">1123</span>  }<a name="line.1123"></a>
<span class="sourceLineNo">1124</span><a name="line.1124"></a>
<span class="sourceLineNo">1125</span>  public void preRestoreSnapshot(final SnapshotDescription snapshot,<a name="line.1125"></a>
<span class="sourceLineNo">1126</span>    final TableDescriptor hTableDescriptor) throws IOException {<a name="line.1126"></a>
<span class="sourceLineNo">1127</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1127"></a>
<span class="sourceLineNo">1128</span>      @Override<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1129"></a>
<span class="sourceLineNo">1130</span>        observer.preRestoreSnapshot(this, snapshot, hTableDescriptor);<a name="line.1130"></a>
<span class="sourceLineNo">1131</span>      }<a name="line.1131"></a>
<span class="sourceLineNo">1132</span>    });<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>  }<a name="line.1133"></a>
<span class="sourceLineNo">1134</span><a name="line.1134"></a>
<span class="sourceLineNo">1135</span>  public void postRestoreSnapshot(final SnapshotDescription snapshot,<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>    final TableDescriptor hTableDescriptor) throws IOException {<a name="line.1136"></a>
<span class="sourceLineNo">1137</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1137"></a>
<span class="sourceLineNo">1138</span>      @Override<a name="line.1138"></a>
<span class="sourceLineNo">1139</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1139"></a>
<span class="sourceLineNo">1140</span>        observer.postRestoreSnapshot(this, snapshot, hTableDescriptor);<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>      }<a name="line.1141"></a>
<span class="sourceLineNo">1142</span>    });<a name="line.1142"></a>
<span class="sourceLineNo">1143</span>  }<a name="line.1143"></a>
<span class="sourceLineNo">1144</span><a name="line.1144"></a>
<span class="sourceLineNo">1145</span>  public void preDeleteSnapshot(final SnapshotDescription snapshot) throws IOException {<a name="line.1145"></a>
<span class="sourceLineNo">1146</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>      @Override<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1148"></a>
<span class="sourceLineNo">1149</span>        observer.preDeleteSnapshot(this, snapshot);<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>      }<a name="line.1150"></a>
<span class="sourceLineNo">1151</span>    });<a name="line.1151"></a>
<span class="sourceLineNo">1152</span>  }<a name="line.1152"></a>
<span class="sourceLineNo">1153</span><a name="line.1153"></a>
<span class="sourceLineNo">1154</span>  public void postDeleteSnapshot(final SnapshotDescription snapshot) throws IOException {<a name="line.1154"></a>
<span class="sourceLineNo">1155</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1155"></a>
<span class="sourceLineNo">1156</span>      @Override<a name="line.1156"></a>
<span class="sourceLineNo">1157</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>        observer.postDeleteSnapshot(this, snapshot);<a name="line.1158"></a>
<span class="sourceLineNo">1159</span>      }<a name="line.1159"></a>
<span class="sourceLineNo">1160</span>    });<a name="line.1160"></a>
<span class="sourceLineNo">1161</span>  }<a name="line.1161"></a>
<span class="sourceLineNo">1162</span><a name="line.1162"></a>
<span class="sourceLineNo">1163</span>  public void preGetTableDescriptors(final List&lt;TableName&gt; tableNamesList,<a name="line.1163"></a>
<span class="sourceLineNo">1164</span>    final List&lt;TableDescriptor&gt; descriptors, final String regex) throws IOException {<a name="line.1164"></a>
<span class="sourceLineNo">1165</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1165"></a>
<span class="sourceLineNo">1166</span>      @Override<a name="line.1166"></a>
<span class="sourceLineNo">1167</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1167"></a>
<span class="sourceLineNo">1168</span>        observer.preGetTableDescriptors(this, tableNamesList, descriptors, regex);<a name="line.1168"></a>
<span class="sourceLineNo">1169</span>      }<a name="line.1169"></a>
<span class="sourceLineNo">1170</span>    });<a name="line.1170"></a>
<span class="sourceLineNo">1171</span>  }<a name="line.1171"></a>
<span class="sourceLineNo">1172</span><a name="line.1172"></a>
<span class="sourceLineNo">1173</span>  public void postGetTableDescriptors(final List&lt;TableName&gt; tableNamesList,<a name="line.1173"></a>
<span class="sourceLineNo">1174</span>    final List&lt;TableDescriptor&gt; descriptors, final String regex) throws IOException {<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1175"></a>
<span class="sourceLineNo">1176</span>      @Override<a name="line.1176"></a>
<span class="sourceLineNo">1177</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1177"></a>
<span class="sourceLineNo">1178</span>        observer.postGetTableDescriptors(this, tableNamesList, descriptors, regex);<a name="line.1178"></a>
<span class="sourceLineNo">1179</span>      }<a name="line.1179"></a>
<span class="sourceLineNo">1180</span>    });<a name="line.1180"></a>
<span class="sourceLineNo">1181</span>  }<a name="line.1181"></a>
<span class="sourceLineNo">1182</span><a name="line.1182"></a>
<span class="sourceLineNo">1183</span>  public void preGetTableNames(final List&lt;TableDescriptor&gt; descriptors, final String regex)<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>    throws IOException {<a name="line.1184"></a>
<span class="sourceLineNo">1185</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1185"></a>
<span class="sourceLineNo">1186</span>      @Override<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1187"></a>
<span class="sourceLineNo">1188</span>        observer.preGetTableNames(this, descriptors, regex);<a name="line.1188"></a>
<span class="sourceLineNo">1189</span>      }<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>    });<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>  }<a name="line.1191"></a>
<span class="sourceLineNo">1192</span><a name="line.1192"></a>
<span class="sourceLineNo">1193</span>  public void postGetTableNames(final List&lt;TableDescriptor&gt; descriptors, final String regex)<a name="line.1193"></a>
<span class="sourceLineNo">1194</span>    throws IOException {<a name="line.1194"></a>
<span class="sourceLineNo">1195</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1195"></a>
<span class="sourceLineNo">1196</span>      @Override<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1197"></a>
<span class="sourceLineNo">1198</span>        observer.postGetTableNames(this, descriptors, regex);<a name="line.1198"></a>
<span class="sourceLineNo">1199</span>      }<a name="line.1199"></a>
<span class="sourceLineNo">1200</span>    });<a name="line.1200"></a>
<span class="sourceLineNo">1201</span>  }<a name="line.1201"></a>
<span class="sourceLineNo">1202</span><a name="line.1202"></a>
<span class="sourceLineNo">1203</span>  public void preTableFlush(final TableName tableName) throws IOException {<a name="line.1203"></a>
<span class="sourceLineNo">1204</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>      @Override<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1206"></a>
<span class="sourceLineNo">1207</span>        observer.preTableFlush(this, tableName);<a name="line.1207"></a>
<span class="sourceLineNo">1208</span>      }<a name="line.1208"></a>
<span class="sourceLineNo">1209</span>    });<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>  }<a name="line.1210"></a>
<span class="sourceLineNo">1211</span><a name="line.1211"></a>
<span class="sourceLineNo">1212</span>  public void postTableFlush(final TableName tableName) throws IOException {<a name="line.1212"></a>
<span class="sourceLineNo">1213</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1213"></a>
<span class="sourceLineNo">1214</span>      @Override<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1215"></a>
<span class="sourceLineNo">1216</span>        observer.postTableFlush(this, tableName);<a name="line.1216"></a>
<span class="sourceLineNo">1217</span>      }<a name="line.1217"></a>
<span class="sourceLineNo">1218</span>    });<a name="line.1218"></a>
<span class="sourceLineNo">1219</span>  }<a name="line.1219"></a>
<span class="sourceLineNo">1220</span><a name="line.1220"></a>
<span class="sourceLineNo">1221</span>  public void preMasterStoreFlush() throws IOException {<a name="line.1221"></a>
<span class="sourceLineNo">1222</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1222"></a>
<span class="sourceLineNo">1223</span>      @Override<a name="line.1223"></a>
<span class="sourceLineNo">1224</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>        observer.preMasterStoreFlush(this);<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>      }<a name="line.1226"></a>
<span class="sourceLineNo">1227</span>    });<a name="line.1227"></a>
<span class="sourceLineNo">1228</span>  }<a name="line.1228"></a>
<span class="sourceLineNo">1229</span><a name="line.1229"></a>
<span class="sourceLineNo">1230</span>  public void postMasterStoreFlush() throws IOException {<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1231"></a>
<span class="sourceLineNo">1232</span>      @Override<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>        observer.postMasterStoreFlush(this);<a name="line.1234"></a>
<span class="sourceLineNo">1235</span>      }<a name="line.1235"></a>
<span class="sourceLineNo">1236</span>    });<a name="line.1236"></a>
<span class="sourceLineNo">1237</span>  }<a name="line.1237"></a>
<span class="sourceLineNo">1238</span><a name="line.1238"></a>
<span class="sourceLineNo">1239</span>  public void preSetUserQuota(final String user, final GlobalQuotaSettings quotas)<a name="line.1239"></a>
<span class="sourceLineNo">1240</span>    throws IOException {<a name="line.1240"></a>
<span class="sourceLineNo">1241</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1241"></a>
<span class="sourceLineNo">1242</span>      @Override<a name="line.1242"></a>
<span class="sourceLineNo">1243</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1243"></a>
<span class="sourceLineNo">1244</span>        observer.preSetUserQuota(this, user, quotas);<a name="line.1244"></a>
<span class="sourceLineNo">1245</span>      }<a name="line.1245"></a>
<span class="sourceLineNo">1246</span>    });<a name="line.1246"></a>
<span class="sourceLineNo">1247</span>  }<a name="line.1247"></a>
<span class="sourceLineNo">1248</span><a name="line.1248"></a>
<span class="sourceLineNo">1249</span>  public void postSetUserQuota(final String user, final GlobalQuotaSettings quotas)<a name="line.1249"></a>
<span class="sourceLineNo">1250</span>    throws IOException {<a name="line.1250"></a>
<span class="sourceLineNo">1251</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1251"></a>
<span class="sourceLineNo">1252</span>      @Override<a name="line.1252"></a>
<span class="sourceLineNo">1253</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1253"></a>
<span class="sourceLineNo">1254</span>        observer.postSetUserQuota(this, user, quotas);<a name="line.1254"></a>
<span class="sourceLineNo">1255</span>      }<a name="line.1255"></a>
<span class="sourceLineNo">1256</span>    });<a name="line.1256"></a>
<span class="sourceLineNo">1257</span>  }<a name="line.1257"></a>
<span class="sourceLineNo">1258</span><a name="line.1258"></a>
<span class="sourceLineNo">1259</span>  public void preSetUserQuota(final String user, final TableName table,<a name="line.1259"></a>
<span class="sourceLineNo">1260</span>    final GlobalQuotaSettings quotas) throws IOException {<a name="line.1260"></a>
<span class="sourceLineNo">1261</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1261"></a>
<span class="sourceLineNo">1262</span>      @Override<a name="line.1262"></a>
<span class="sourceLineNo">1263</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1263"></a>
<span class="sourceLineNo">1264</span>        observer.preSetUserQuota(this, user, table, quotas);<a name="line.1264"></a>
<span class="sourceLineNo">1265</span>      }<a name="line.1265"></a>
<span class="sourceLineNo">1266</span>    });<a name="line.1266"></a>
<span class="sourceLineNo">1267</span>  }<a name="line.1267"></a>
<span class="sourceLineNo">1268</span><a name="line.1268"></a>
<span class="sourceLineNo">1269</span>  public void postSetUserQuota(final String user, final TableName table,<a name="line.1269"></a>
<span class="sourceLineNo">1270</span>    final GlobalQuotaSettings quotas) throws IOException {<a name="line.1270"></a>
<span class="sourceLineNo">1271</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1271"></a>
<span class="sourceLineNo">1272</span>      @Override<a name="line.1272"></a>
<span class="sourceLineNo">1273</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1273"></a>
<span class="sourceLineNo">1274</span>        observer.postSetUserQuota(this, user, table, quotas);<a name="line.1274"></a>
<span class="sourceLineNo">1275</span>      }<a name="line.1275"></a>
<span class="sourceLineNo">1276</span>    });<a name="line.1276"></a>
<span class="sourceLineNo">1277</span>  }<a name="line.1277"></a>
<span class="sourceLineNo">1278</span><a name="line.1278"></a>
<span class="sourceLineNo">1279</span>  public void preSetUserQuota(final String user, final String namespace,<a name="line.1279"></a>
<span class="sourceLineNo">1280</span>    final GlobalQuotaSettings quotas) throws IOException {<a name="line.1280"></a>
<span class="sourceLineNo">1281</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1281"></a>
<span class="sourceLineNo">1282</span>      @Override<a name="line.1282"></a>
<span class="sourceLineNo">1283</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1283"></a>
<span class="sourceLineNo">1284</span>        observer.preSetUserQuota(this, user, namespace, quotas);<a name="line.1284"></a>
<span class="sourceLineNo">1285</span>      }<a name="line.1285"></a>
<span class="sourceLineNo">1286</span>    });<a name="line.1286"></a>
<span class="sourceLineNo">1287</span>  }<a name="line.1287"></a>
<span class="sourceLineNo">1288</span><a name="line.1288"></a>
<span class="sourceLineNo">1289</span>  public void postSetUserQuota(final String user, final String namespace,<a name="line.1289"></a>
<span class="sourceLineNo">1290</span>    final GlobalQuotaSettings quotas) throws IOException {<a name="line.1290"></a>
<span class="sourceLineNo">1291</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1291"></a>
<span class="sourceLineNo">1292</span>      @Override<a name="line.1292"></a>
<span class="sourceLineNo">1293</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1293"></a>
<span class="sourceLineNo">1294</span>        observer.postSetUserQuota(this, user, namespace, quotas);<a name="line.1294"></a>
<span class="sourceLineNo">1295</span>      }<a name="line.1295"></a>
<span class="sourceLineNo">1296</span>    });<a name="line.1296"></a>
<span class="sourceLineNo">1297</span>  }<a name="line.1297"></a>
<span class="sourceLineNo">1298</span><a name="line.1298"></a>
<span class="sourceLineNo">1299</span>  public void preSetTableQuota(final TableName table, final GlobalQuotaSettings quotas)<a name="line.1299"></a>
<span class="sourceLineNo">1300</span>    throws IOException {<a name="line.1300"></a>
<span class="sourceLineNo">1301</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1301"></a>
<span class="sourceLineNo">1302</span>      @Override<a name="line.1302"></a>
<span class="sourceLineNo">1303</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1303"></a>
<span class="sourceLineNo">1304</span>        observer.preSetTableQuota(this, table, quotas);<a name="line.1304"></a>
<span class="sourceLineNo">1305</span>      }<a name="line.1305"></a>
<span class="sourceLineNo">1306</span>    });<a name="line.1306"></a>
<span class="sourceLineNo">1307</span>  }<a name="line.1307"></a>
<span class="sourceLineNo">1308</span><a name="line.1308"></a>
<span class="sourceLineNo">1309</span>  public void postSetTableQuota(final TableName table, final GlobalQuotaSettings quotas)<a name="line.1309"></a>
<span class="sourceLineNo">1310</span>    throws IOException {<a name="line.1310"></a>
<span class="sourceLineNo">1311</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1311"></a>
<span class="sourceLineNo">1312</span>      @Override<a name="line.1312"></a>
<span class="sourceLineNo">1313</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1313"></a>
<span class="sourceLineNo">1314</span>        observer.postSetTableQuota(this, table, quotas);<a name="line.1314"></a>
<span class="sourceLineNo">1315</span>      }<a name="line.1315"></a>
<span class="sourceLineNo">1316</span>    });<a name="line.1316"></a>
<span class="sourceLineNo">1317</span>  }<a name="line.1317"></a>
<span class="sourceLineNo">1318</span><a name="line.1318"></a>
<span class="sourceLineNo">1319</span>  public void preSetNamespaceQuota(final String namespace, final GlobalQuotaSettings quotas)<a name="line.1319"></a>
<span class="sourceLineNo">1320</span>    throws IOException {<a name="line.1320"></a>
<span class="sourceLineNo">1321</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1321"></a>
<span class="sourceLineNo">1322</span>      @Override<a name="line.1322"></a>
<span class="sourceLineNo">1323</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1323"></a>
<span class="sourceLineNo">1324</span>        observer.preSetNamespaceQuota(this, namespace, quotas);<a name="line.1324"></a>
<span class="sourceLineNo">1325</span>      }<a name="line.1325"></a>
<span class="sourceLineNo">1326</span>    });<a name="line.1326"></a>
<span class="sourceLineNo">1327</span>  }<a name="line.1327"></a>
<span class="sourceLineNo">1328</span><a name="line.1328"></a>
<span class="sourceLineNo">1329</span>  public void postSetNamespaceQuota(final String namespace, final GlobalQuotaSettings quotas)<a name="line.1329"></a>
<span class="sourceLineNo">1330</span>    throws IOException {<a name="line.1330"></a>
<span class="sourceLineNo">1331</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1331"></a>
<span class="sourceLineNo">1332</span>      @Override<a name="line.1332"></a>
<span class="sourceLineNo">1333</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1333"></a>
<span class="sourceLineNo">1334</span>        observer.postSetNamespaceQuota(this, namespace, quotas);<a name="line.1334"></a>
<span class="sourceLineNo">1335</span>      }<a name="line.1335"></a>
<span class="sourceLineNo">1336</span>    });<a name="line.1336"></a>
<span class="sourceLineNo">1337</span>  }<a name="line.1337"></a>
<span class="sourceLineNo">1338</span><a name="line.1338"></a>
<span class="sourceLineNo">1339</span>  public void preSetRegionServerQuota(final String regionServer, final GlobalQuotaSettings quotas)<a name="line.1339"></a>
<span class="sourceLineNo">1340</span>    throws IOException {<a name="line.1340"></a>
<span class="sourceLineNo">1341</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1341"></a>
<span class="sourceLineNo">1342</span>      @Override<a name="line.1342"></a>
<span class="sourceLineNo">1343</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1343"></a>
<span class="sourceLineNo">1344</span>        observer.preSetRegionServerQuota(this, regionServer, quotas);<a name="line.1344"></a>
<span class="sourceLineNo">1345</span>      }<a name="line.1345"></a>
<span class="sourceLineNo">1346</span>    });<a name="line.1346"></a>
<span class="sourceLineNo">1347</span>  }<a name="line.1347"></a>
<span class="sourceLineNo">1348</span><a name="line.1348"></a>
<span class="sourceLineNo">1349</span>  public void postSetRegionServerQuota(final String regionServer, final GlobalQuotaSettings quotas)<a name="line.1349"></a>
<span class="sourceLineNo">1350</span>    throws IOException {<a name="line.1350"></a>
<span class="sourceLineNo">1351</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1351"></a>
<span class="sourceLineNo">1352</span>      @Override<a name="line.1352"></a>
<span class="sourceLineNo">1353</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1353"></a>
<span class="sourceLineNo">1354</span>        observer.postSetRegionServerQuota(this, regionServer, quotas);<a name="line.1354"></a>
<span class="sourceLineNo">1355</span>      }<a name="line.1355"></a>
<span class="sourceLineNo">1356</span>    });<a name="line.1356"></a>
<span class="sourceLineNo">1357</span>  }<a name="line.1357"></a>
<span class="sourceLineNo">1358</span><a name="line.1358"></a>
<span class="sourceLineNo">1359</span>  public void preMoveServersAndTables(final Set&lt;Address&gt; servers, final Set&lt;TableName&gt; tables,<a name="line.1359"></a>
<span class="sourceLineNo">1360</span>    final String targetGroup) throws IOException {<a name="line.1360"></a>
<span class="sourceLineNo">1361</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1361"></a>
<span class="sourceLineNo">1362</span>      @Override<a name="line.1362"></a>
<span class="sourceLineNo">1363</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1363"></a>
<span class="sourceLineNo">1364</span>        observer.preMoveServersAndTables(this, servers, tables, targetGroup);<a name="line.1364"></a>
<span class="sourceLineNo">1365</span>      }<a name="line.1365"></a>
<span class="sourceLineNo">1366</span>    });<a name="line.1366"></a>
<span class="sourceLineNo">1367</span>  }<a name="line.1367"></a>
<span class="sourceLineNo">1368</span><a name="line.1368"></a>
<span class="sourceLineNo">1369</span>  public void postMoveServersAndTables(final Set&lt;Address&gt; servers, final Set&lt;TableName&gt; tables,<a name="line.1369"></a>
<span class="sourceLineNo">1370</span>    final String targetGroup) throws IOException {<a name="line.1370"></a>
<span class="sourceLineNo">1371</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1371"></a>
<span class="sourceLineNo">1372</span>      @Override<a name="line.1372"></a>
<span class="sourceLineNo">1373</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1373"></a>
<span class="sourceLineNo">1374</span>        observer.postMoveServersAndTables(this, servers, tables, targetGroup);<a name="line.1374"></a>
<span class="sourceLineNo">1375</span>      }<a name="line.1375"></a>
<span class="sourceLineNo">1376</span>    });<a name="line.1376"></a>
<span class="sourceLineNo">1377</span>  }<a name="line.1377"></a>
<span class="sourceLineNo">1378</span><a name="line.1378"></a>
<span class="sourceLineNo">1379</span>  public void preMoveServers(final Set&lt;Address&gt; servers, final String targetGroup)<a name="line.1379"></a>
<span class="sourceLineNo">1380</span>    throws IOException {<a name="line.1380"></a>
<span class="sourceLineNo">1381</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1381"></a>
<span class="sourceLineNo">1382</span>      @Override<a name="line.1382"></a>
<span class="sourceLineNo">1383</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1383"></a>
<span class="sourceLineNo">1384</span>        observer.preMoveServers(this, servers, targetGroup);<a name="line.1384"></a>
<span class="sourceLineNo">1385</span>      }<a name="line.1385"></a>
<span class="sourceLineNo">1386</span>    });<a name="line.1386"></a>
<span class="sourceLineNo">1387</span>  }<a name="line.1387"></a>
<span class="sourceLineNo">1388</span><a name="line.1388"></a>
<span class="sourceLineNo">1389</span>  public void postMoveServers(final Set&lt;Address&gt; servers, final String targetGroup)<a name="line.1389"></a>
<span class="sourceLineNo">1390</span>    throws IOException {<a name="line.1390"></a>
<span class="sourceLineNo">1391</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1391"></a>
<span class="sourceLineNo">1392</span>      @Override<a name="line.1392"></a>
<span class="sourceLineNo">1393</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1393"></a>
<span class="sourceLineNo">1394</span>        observer.postMoveServers(this, servers, targetGroup);<a name="line.1394"></a>
<span class="sourceLineNo">1395</span>      }<a name="line.1395"></a>
<span class="sourceLineNo">1396</span>    });<a name="line.1396"></a>
<span class="sourceLineNo">1397</span>  }<a name="line.1397"></a>
<span class="sourceLineNo">1398</span><a name="line.1398"></a>
<span class="sourceLineNo">1399</span>  public void preMoveTables(final Set&lt;TableName&gt; tables, final String targetGroup)<a name="line.1399"></a>
<span class="sourceLineNo">1400</span>    throws IOException {<a name="line.1400"></a>
<span class="sourceLineNo">1401</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1401"></a>
<span class="sourceLineNo">1402</span>      @Override<a name="line.1402"></a>
<span class="sourceLineNo">1403</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1403"></a>
<span class="sourceLineNo">1404</span>        observer.preMoveTables(this, tables, targetGroup);<a name="line.1404"></a>
<span class="sourceLineNo">1405</span>      }<a name="line.1405"></a>
<span class="sourceLineNo">1406</span>    });<a name="line.1406"></a>
<span class="sourceLineNo">1407</span>  }<a name="line.1407"></a>
<span class="sourceLineNo">1408</span><a name="line.1408"></a>
<span class="sourceLineNo">1409</span>  public void postMoveTables(final Set&lt;TableName&gt; tables, final String targetGroup)<a name="line.1409"></a>
<span class="sourceLineNo">1410</span>    throws IOException {<a name="line.1410"></a>
<span class="sourceLineNo">1411</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1411"></a>
<span class="sourceLineNo">1412</span>      @Override<a name="line.1412"></a>
<span class="sourceLineNo">1413</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1413"></a>
<span class="sourceLineNo">1414</span>        observer.postMoveTables(this, tables, targetGroup);<a name="line.1414"></a>
<span class="sourceLineNo">1415</span>      }<a name="line.1415"></a>
<span class="sourceLineNo">1416</span>    });<a name="line.1416"></a>
<span class="sourceLineNo">1417</span>  }<a name="line.1417"></a>
<span class="sourceLineNo">1418</span><a name="line.1418"></a>
<span class="sourceLineNo">1419</span>  public void preAddRSGroup(final String name) throws IOException {<a name="line.1419"></a>
<span class="sourceLineNo">1420</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1420"></a>
<span class="sourceLineNo">1421</span>      @Override<a name="line.1421"></a>
<span class="sourceLineNo">1422</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1422"></a>
<span class="sourceLineNo">1423</span>        observer.preAddRSGroup(this, name);<a name="line.1423"></a>
<span class="sourceLineNo">1424</span>      }<a name="line.1424"></a>
<span class="sourceLineNo">1425</span>    });<a name="line.1425"></a>
<span class="sourceLineNo">1426</span>  }<a name="line.1426"></a>
<span class="sourceLineNo">1427</span><a name="line.1427"></a>
<span class="sourceLineNo">1428</span>  public void postAddRSGroup(final String name) throws IOException {<a name="line.1428"></a>
<span class="sourceLineNo">1429</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1429"></a>
<span class="sourceLineNo">1430</span>      @Override<a name="line.1430"></a>
<span class="sourceLineNo">1431</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1431"></a>
<span class="sourceLineNo">1432</span>        observer.postAddRSGroup(this, name);<a name="line.1432"></a>
<span class="sourceLineNo">1433</span>      }<a name="line.1433"></a>
<span class="sourceLineNo">1434</span>    });<a name="line.1434"></a>
<span class="sourceLineNo">1435</span>  }<a name="line.1435"></a>
<span class="sourceLineNo">1436</span><a name="line.1436"></a>
<span class="sourceLineNo">1437</span>  public void preRemoveRSGroup(final String name) throws IOException {<a name="line.1437"></a>
<span class="sourceLineNo">1438</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1438"></a>
<span class="sourceLineNo">1439</span>      @Override<a name="line.1439"></a>
<span class="sourceLineNo">1440</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1440"></a>
<span class="sourceLineNo">1441</span>        observer.preRemoveRSGroup(this, name);<a name="line.1441"></a>
<span class="sourceLineNo">1442</span>      }<a name="line.1442"></a>
<span class="sourceLineNo">1443</span>    });<a name="line.1443"></a>
<span class="sourceLineNo">1444</span>  }<a name="line.1444"></a>
<span class="sourceLineNo">1445</span><a name="line.1445"></a>
<span class="sourceLineNo">1446</span>  public void postRemoveRSGroup(final String name) throws IOException {<a name="line.1446"></a>
<span class="sourceLineNo">1447</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1447"></a>
<span class="sourceLineNo">1448</span>      @Override<a name="line.1448"></a>
<span class="sourceLineNo">1449</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1449"></a>
<span class="sourceLineNo">1450</span>        observer.postRemoveRSGroup(this, name);<a name="line.1450"></a>
<span class="sourceLineNo">1451</span>      }<a name="line.1451"></a>
<span class="sourceLineNo">1452</span>    });<a name="line.1452"></a>
<span class="sourceLineNo">1453</span>  }<a name="line.1453"></a>
<span class="sourceLineNo">1454</span><a name="line.1454"></a>
<span class="sourceLineNo">1455</span>  public void preBalanceRSGroup(final String name, final BalanceRequest request)<a name="line.1455"></a>
<span class="sourceLineNo">1456</span>    throws IOException {<a name="line.1456"></a>
<span class="sourceLineNo">1457</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1457"></a>
<span class="sourceLineNo">1458</span>      @Override<a name="line.1458"></a>
<span class="sourceLineNo">1459</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1459"></a>
<span class="sourceLineNo">1460</span>        observer.preBalanceRSGroup(this, name, request);<a name="line.1460"></a>
<span class="sourceLineNo">1461</span>      }<a name="line.1461"></a>
<span class="sourceLineNo">1462</span>    });<a name="line.1462"></a>
<span class="sourceLineNo">1463</span>  }<a name="line.1463"></a>
<span class="sourceLineNo">1464</span><a name="line.1464"></a>
<span class="sourceLineNo">1465</span>  public void postBalanceRSGroup(final String name, final BalanceRequest request,<a name="line.1465"></a>
<span class="sourceLineNo">1466</span>    final BalanceResponse response) throws IOException {<a name="line.1466"></a>
<span class="sourceLineNo">1467</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1467"></a>
<span class="sourceLineNo">1468</span>      @Override<a name="line.1468"></a>
<span class="sourceLineNo">1469</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1469"></a>
<span class="sourceLineNo">1470</span>        observer.postBalanceRSGroup(this, name, request, response);<a name="line.1470"></a>
<span class="sourceLineNo">1471</span>      }<a name="line.1471"></a>
<span class="sourceLineNo">1472</span>    });<a name="line.1472"></a>
<span class="sourceLineNo">1473</span>  }<a name="line.1473"></a>
<span class="sourceLineNo">1474</span><a name="line.1474"></a>
<span class="sourceLineNo">1475</span>  public void preRemoveServers(final Set&lt;Address&gt; servers) throws IOException {<a name="line.1475"></a>
<span class="sourceLineNo">1476</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1476"></a>
<span class="sourceLineNo">1477</span>      @Override<a name="line.1477"></a>
<span class="sourceLineNo">1478</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1478"></a>
<span class="sourceLineNo">1479</span>        observer.preRemoveServers(this, servers);<a name="line.1479"></a>
<span class="sourceLineNo">1480</span>      }<a name="line.1480"></a>
<span class="sourceLineNo">1481</span>    });<a name="line.1481"></a>
<span class="sourceLineNo">1482</span>  }<a name="line.1482"></a>
<span class="sourceLineNo">1483</span><a name="line.1483"></a>
<span class="sourceLineNo">1484</span>  public void postRemoveServers(final Set&lt;Address&gt; servers) throws IOException {<a name="line.1484"></a>
<span class="sourceLineNo">1485</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1485"></a>
<span class="sourceLineNo">1486</span>      @Override<a name="line.1486"></a>
<span class="sourceLineNo">1487</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1487"></a>
<span class="sourceLineNo">1488</span>        observer.postRemoveServers(this, servers);<a name="line.1488"></a>
<span class="sourceLineNo">1489</span>      }<a name="line.1489"></a>
<span class="sourceLineNo">1490</span>    });<a name="line.1490"></a>
<span class="sourceLineNo">1491</span>  }<a name="line.1491"></a>
<span class="sourceLineNo">1492</span><a name="line.1492"></a>
<span class="sourceLineNo">1493</span>  public void preGetRSGroupInfo(final String groupName) throws IOException {<a name="line.1493"></a>
<span class="sourceLineNo">1494</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1494"></a>
<span class="sourceLineNo">1495</span>      @Override<a name="line.1495"></a>
<span class="sourceLineNo">1496</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1496"></a>
<span class="sourceLineNo">1497</span>        observer.preGetRSGroupInfo(this, groupName);<a name="line.1497"></a>
<span class="sourceLineNo">1498</span>      }<a name="line.1498"></a>
<span class="sourceLineNo">1499</span>    });<a name="line.1499"></a>
<span class="sourceLineNo">1500</span>  }<a name="line.1500"></a>
<span class="sourceLineNo">1501</span><a name="line.1501"></a>
<span class="sourceLineNo">1502</span>  public void postGetRSGroupInfo(final String groupName) throws IOException {<a name="line.1502"></a>
<span class="sourceLineNo">1503</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1503"></a>
<span class="sourceLineNo">1504</span>      @Override<a name="line.1504"></a>
<span class="sourceLineNo">1505</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1505"></a>
<span class="sourceLineNo">1506</span>        observer.postGetRSGroupInfo(this, groupName);<a name="line.1506"></a>
<span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
<span class="sourceLineNo">1508</span>    });<a name="line.1508"></a>
<span class="sourceLineNo">1509</span>  }<a name="line.1509"></a>
<span class="sourceLineNo">1510</span><a name="line.1510"></a>
<span class="sourceLineNo">1511</span>  public void preGetRSGroupInfoOfTable(final TableName tableName) throws IOException {<a name="line.1511"></a>
<span class="sourceLineNo">1512</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1512"></a>
<span class="sourceLineNo">1513</span>      @Override<a name="line.1513"></a>
<span class="sourceLineNo">1514</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1514"></a>
<span class="sourceLineNo">1515</span>        observer.preGetRSGroupInfoOfTable(this, tableName);<a name="line.1515"></a>
<span class="sourceLineNo">1516</span>      }<a name="line.1516"></a>
<span class="sourceLineNo">1517</span>    });<a name="line.1517"></a>
<span class="sourceLineNo">1518</span>  }<a name="line.1518"></a>
<span class="sourceLineNo">1519</span><a name="line.1519"></a>
<span class="sourceLineNo">1520</span>  public void postGetRSGroupInfoOfTable(final TableName tableName) throws IOException {<a name="line.1520"></a>
<span class="sourceLineNo">1521</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1521"></a>
<span class="sourceLineNo">1522</span>      @Override<a name="line.1522"></a>
<span class="sourceLineNo">1523</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1523"></a>
<span class="sourceLineNo">1524</span>        observer.postGetRSGroupInfoOfTable(this, tableName);<a name="line.1524"></a>
<span class="sourceLineNo">1525</span>      }<a name="line.1525"></a>
<span class="sourceLineNo">1526</span>    });<a name="line.1526"></a>
<span class="sourceLineNo">1527</span>  }<a name="line.1527"></a>
<span class="sourceLineNo">1528</span><a name="line.1528"></a>
<span class="sourceLineNo">1529</span>  public void preListRSGroups() throws IOException {<a name="line.1529"></a>
<span class="sourceLineNo">1530</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1530"></a>
<span class="sourceLineNo">1531</span>      @Override<a name="line.1531"></a>
<span class="sourceLineNo">1532</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1532"></a>
<span class="sourceLineNo">1533</span>        observer.preListRSGroups(this);<a name="line.1533"></a>
<span class="sourceLineNo">1534</span>      }<a name="line.1534"></a>
<span class="sourceLineNo">1535</span>    });<a name="line.1535"></a>
<span class="sourceLineNo">1536</span>  }<a name="line.1536"></a>
<span class="sourceLineNo">1537</span><a name="line.1537"></a>
<span class="sourceLineNo">1538</span>  public void postListRSGroups() throws IOException {<a name="line.1538"></a>
<span class="sourceLineNo">1539</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1539"></a>
<span class="sourceLineNo">1540</span>      @Override<a name="line.1540"></a>
<span class="sourceLineNo">1541</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1541"></a>
<span class="sourceLineNo">1542</span>        observer.postListRSGroups(this);<a name="line.1542"></a>
<span class="sourceLineNo">1543</span>      }<a name="line.1543"></a>
<span class="sourceLineNo">1544</span>    });<a name="line.1544"></a>
<span class="sourceLineNo">1545</span>  }<a name="line.1545"></a>
<span class="sourceLineNo">1546</span><a name="line.1546"></a>
<span class="sourceLineNo">1547</span>  public void preListTablesInRSGroup(final String groupName) throws IOException {<a name="line.1547"></a>
<span class="sourceLineNo">1548</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1548"></a>
<span class="sourceLineNo">1549</span><a name="line.1549"></a>
<span class="sourceLineNo">1550</span>      @Override<a name="line.1550"></a>
<span class="sourceLineNo">1551</span>      protected void call(MasterObserver observer) throws IOException {<a name="line.1551"></a>
<span class="sourceLineNo">1552</span>        observer.preListTablesInRSGroup(this, groupName);<a name="line.1552"></a>
<span class="sourceLineNo">1553</span>      }<a name="line.1553"></a>
<span class="sourceLineNo">1554</span>    });<a name="line.1554"></a>
<span class="sourceLineNo">1555</span>  }<a name="line.1555"></a>
<span class="sourceLineNo">1556</span><a name="line.1556"></a>
<span class="sourceLineNo">1557</span>  public void postListTablesInRSGroup(final String groupName) throws IOException {<a name="line.1557"></a>
<span class="sourceLineNo">1558</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1558"></a>
<span class="sourceLineNo">1559</span><a name="line.1559"></a>
<span class="sourceLineNo">1560</span>      @Override<a name="line.1560"></a>
<span class="sourceLineNo">1561</span>      protected void call(MasterObserver observer) throws IOException {<a name="line.1561"></a>
<span class="sourceLineNo">1562</span>        observer.postListTablesInRSGroup(this, groupName);<a name="line.1562"></a>
<span class="sourceLineNo">1563</span>      }<a name="line.1563"></a>
<span class="sourceLineNo">1564</span>    });<a name="line.1564"></a>
<span class="sourceLineNo">1565</span>  }<a name="line.1565"></a>
<span class="sourceLineNo">1566</span><a name="line.1566"></a>
<span class="sourceLineNo">1567</span>  public void preRenameRSGroup(final String oldName, final String newName) throws IOException {<a name="line.1567"></a>
<span class="sourceLineNo">1568</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1568"></a>
<span class="sourceLineNo">1569</span><a name="line.1569"></a>
<span class="sourceLineNo">1570</span>      @Override<a name="line.1570"></a>
<span class="sourceLineNo">1571</span>      protected void call(MasterObserver observer) throws IOException {<a name="line.1571"></a>
<span class="sourceLineNo">1572</span>        observer.preRenameRSGroup(this, oldName, newName);<a name="line.1572"></a>
<span class="sourceLineNo">1573</span>      }<a name="line.1573"></a>
<span class="sourceLineNo">1574</span>    });<a name="line.1574"></a>
<span class="sourceLineNo">1575</span>  }<a name="line.1575"></a>
<span class="sourceLineNo">1576</span><a name="line.1576"></a>
<span class="sourceLineNo">1577</span>  public void postRenameRSGroup(final String oldName, final String newName) throws IOException {<a name="line.1577"></a>
<span class="sourceLineNo">1578</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1578"></a>
<span class="sourceLineNo">1579</span><a name="line.1579"></a>
<span class="sourceLineNo">1580</span>      @Override<a name="line.1580"></a>
<span class="sourceLineNo">1581</span>      protected void call(MasterObserver observer) throws IOException {<a name="line.1581"></a>
<span class="sourceLineNo">1582</span>        observer.postRenameRSGroup(this, oldName, newName);<a name="line.1582"></a>
<span class="sourceLineNo">1583</span>      }<a name="line.1583"></a>
<span class="sourceLineNo">1584</span>    });<a name="line.1584"></a>
<span class="sourceLineNo">1585</span>  }<a name="line.1585"></a>
<span class="sourceLineNo">1586</span><a name="line.1586"></a>
<span class="sourceLineNo">1587</span>  public void preUpdateRSGroupConfig(final String groupName,<a name="line.1587"></a>
<span class="sourceLineNo">1588</span>    final Map&lt;String, String&gt; configuration) throws IOException {<a name="line.1588"></a>
<span class="sourceLineNo">1589</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1589"></a>
<span class="sourceLineNo">1590</span>      @Override<a name="line.1590"></a>
<span class="sourceLineNo">1591</span>      protected void call(MasterObserver observer) throws IOException {<a name="line.1591"></a>
<span class="sourceLineNo">1592</span>        observer.preUpdateRSGroupConfig(this, groupName, configuration);<a name="line.1592"></a>
<span class="sourceLineNo">1593</span>      }<a name="line.1593"></a>
<span class="sourceLineNo">1594</span>    });<a name="line.1594"></a>
<span class="sourceLineNo">1595</span>  }<a name="line.1595"></a>
<span class="sourceLineNo">1596</span><a name="line.1596"></a>
<span class="sourceLineNo">1597</span>  public void postUpdateRSGroupConfig(final String groupName,<a name="line.1597"></a>
<span class="sourceLineNo">1598</span>    final Map&lt;String, String&gt; configuration) throws IOException {<a name="line.1598"></a>
<span class="sourceLineNo">1599</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1599"></a>
<span class="sourceLineNo">1600</span>      @Override<a name="line.1600"></a>
<span class="sourceLineNo">1601</span>      protected void call(MasterObserver observer) throws IOException {<a name="line.1601"></a>
<span class="sourceLineNo">1602</span>        observer.postUpdateRSGroupConfig(this, groupName, configuration);<a name="line.1602"></a>
<span class="sourceLineNo">1603</span>      }<a name="line.1603"></a>
<span class="sourceLineNo">1604</span>    });<a name="line.1604"></a>
<span class="sourceLineNo">1605</span>  }<a name="line.1605"></a>
<span class="sourceLineNo">1606</span><a name="line.1606"></a>
<span class="sourceLineNo">1607</span>  public void preGetConfiguredNamespacesAndTablesInRSGroup(final String groupName)<a name="line.1607"></a>
<span class="sourceLineNo">1608</span>    throws IOException {<a name="line.1608"></a>
<span class="sourceLineNo">1609</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1609"></a>
<span class="sourceLineNo">1610</span><a name="line.1610"></a>
<span class="sourceLineNo">1611</span>      @Override<a name="line.1611"></a>
<span class="sourceLineNo">1612</span>      protected void call(MasterObserver observer) throws IOException {<a name="line.1612"></a>
<span class="sourceLineNo">1613</span>        observer.preGetConfiguredNamespacesAndTablesInRSGroup(this, groupName);<a name="line.1613"></a>
<span class="sourceLineNo">1614</span>      }<a name="line.1614"></a>
<span class="sourceLineNo">1615</span>    });<a name="line.1615"></a>
<span class="sourceLineNo">1616</span>  }<a name="line.1616"></a>
<span class="sourceLineNo">1617</span><a name="line.1617"></a>
<span class="sourceLineNo">1618</span>  public void postGetConfiguredNamespacesAndTablesInRSGroup(final String groupName)<a name="line.1618"></a>
<span class="sourceLineNo">1619</span>    throws IOException {<a name="line.1619"></a>
<span class="sourceLineNo">1620</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1620"></a>
<span class="sourceLineNo">1621</span><a name="line.1621"></a>
<span class="sourceLineNo">1622</span>      @Override<a name="line.1622"></a>
<span class="sourceLineNo">1623</span>      protected void call(MasterObserver observer) throws IOException {<a name="line.1623"></a>
<span class="sourceLineNo">1624</span>        observer.postGetConfiguredNamespacesAndTablesInRSGroup(this, groupName);<a name="line.1624"></a>
<span class="sourceLineNo">1625</span>      }<a name="line.1625"></a>
<span class="sourceLineNo">1626</span>    });<a name="line.1626"></a>
<span class="sourceLineNo">1627</span>  }<a name="line.1627"></a>
<span class="sourceLineNo">1628</span><a name="line.1628"></a>
<span class="sourceLineNo">1629</span>  public void preGetRSGroupInfoOfServer(final Address server) throws IOException {<a name="line.1629"></a>
<span class="sourceLineNo">1630</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1630"></a>
<span class="sourceLineNo">1631</span>      @Override<a name="line.1631"></a>
<span class="sourceLineNo">1632</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1632"></a>
<span class="sourceLineNo">1633</span>        observer.preGetRSGroupInfoOfServer(this, server);<a name="line.1633"></a>
<span class="sourceLineNo">1634</span>      }<a name="line.1634"></a>
<span class="sourceLineNo">1635</span>    });<a name="line.1635"></a>
<span class="sourceLineNo">1636</span>  }<a name="line.1636"></a>
<span class="sourceLineNo">1637</span><a name="line.1637"></a>
<span class="sourceLineNo">1638</span>  public void postGetRSGroupInfoOfServer(final Address server) throws IOException {<a name="line.1638"></a>
<span class="sourceLineNo">1639</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1639"></a>
<span class="sourceLineNo">1640</span>      @Override<a name="line.1640"></a>
<span class="sourceLineNo">1641</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1641"></a>
<span class="sourceLineNo">1642</span>        observer.postGetRSGroupInfoOfServer(this, server);<a name="line.1642"></a>
<span class="sourceLineNo">1643</span>      }<a name="line.1643"></a>
<span class="sourceLineNo">1644</span>    });<a name="line.1644"></a>
<span class="sourceLineNo">1645</span>  }<a name="line.1645"></a>
<span class="sourceLineNo">1646</span><a name="line.1646"></a>
<span class="sourceLineNo">1647</span>  public void preAddReplicationPeer(final String peerId, final ReplicationPeerConfig peerConfig)<a name="line.1647"></a>
<span class="sourceLineNo">1648</span>    throws IOException {<a name="line.1648"></a>
<span class="sourceLineNo">1649</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1649"></a>
<span class="sourceLineNo">1650</span>      @Override<a name="line.1650"></a>
<span class="sourceLineNo">1651</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1651"></a>
<span class="sourceLineNo">1652</span>        observer.preAddReplicationPeer(this, peerId, peerConfig);<a name="line.1652"></a>
<span class="sourceLineNo">1653</span>      }<a name="line.1653"></a>
<span class="sourceLineNo">1654</span>    });<a name="line.1654"></a>
<span class="sourceLineNo">1655</span>  }<a name="line.1655"></a>
<span class="sourceLineNo">1656</span><a name="line.1656"></a>
<span class="sourceLineNo">1657</span>  public void postAddReplicationPeer(final String peerId, final ReplicationPeerConfig peerConfig)<a name="line.1657"></a>
<span class="sourceLineNo">1658</span>    throws IOException {<a name="line.1658"></a>
<span class="sourceLineNo">1659</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1659"></a>
<span class="sourceLineNo">1660</span>      @Override<a name="line.1660"></a>
<span class="sourceLineNo">1661</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1661"></a>
<span class="sourceLineNo">1662</span>        observer.postAddReplicationPeer(this, peerId, peerConfig);<a name="line.1662"></a>
<span class="sourceLineNo">1663</span>      }<a name="line.1663"></a>
<span class="sourceLineNo">1664</span>    });<a name="line.1664"></a>
<span class="sourceLineNo">1665</span>  }<a name="line.1665"></a>
<span class="sourceLineNo">1666</span><a name="line.1666"></a>
<span class="sourceLineNo">1667</span>  public void preRemoveReplicationPeer(final String peerId) throws IOException {<a name="line.1667"></a>
<span class="sourceLineNo">1668</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1668"></a>
<span class="sourceLineNo">1669</span>      @Override<a name="line.1669"></a>
<span class="sourceLineNo">1670</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1670"></a>
<span class="sourceLineNo">1671</span>        observer.preRemoveReplicationPeer(this, peerId);<a name="line.1671"></a>
<span class="sourceLineNo">1672</span>      }<a name="line.1672"></a>
<span class="sourceLineNo">1673</span>    });<a name="line.1673"></a>
<span class="sourceLineNo">1674</span>  }<a name="line.1674"></a>
<span class="sourceLineNo">1675</span><a name="line.1675"></a>
<span class="sourceLineNo">1676</span>  public void postRemoveReplicationPeer(final String peerId) throws IOException {<a name="line.1676"></a>
<span class="sourceLineNo">1677</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1677"></a>
<span class="sourceLineNo">1678</span>      @Override<a name="line.1678"></a>
<span class="sourceLineNo">1679</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1679"></a>
<span class="sourceLineNo">1680</span>        observer.postRemoveReplicationPeer(this, peerId);<a name="line.1680"></a>
<span class="sourceLineNo">1681</span>      }<a name="line.1681"></a>
<span class="sourceLineNo">1682</span>    });<a name="line.1682"></a>
<span class="sourceLineNo">1683</span>  }<a name="line.1683"></a>
<span class="sourceLineNo">1684</span><a name="line.1684"></a>
<span class="sourceLineNo">1685</span>  public void preEnableReplicationPeer(final String peerId) throws IOException {<a name="line.1685"></a>
<span class="sourceLineNo">1686</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1686"></a>
<span class="sourceLineNo">1687</span>      @Override<a name="line.1687"></a>
<span class="sourceLineNo">1688</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1688"></a>
<span class="sourceLineNo">1689</span>        observer.preEnableReplicationPeer(this, peerId);<a name="line.1689"></a>
<span class="sourceLineNo">1690</span>      }<a name="line.1690"></a>
<span class="sourceLineNo">1691</span>    });<a name="line.1691"></a>
<span class="sourceLineNo">1692</span>  }<a name="line.1692"></a>
<span class="sourceLineNo">1693</span><a name="line.1693"></a>
<span class="sourceLineNo">1694</span>  public void postEnableReplicationPeer(final String peerId) throws IOException {<a name="line.1694"></a>
<span class="sourceLineNo">1695</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1695"></a>
<span class="sourceLineNo">1696</span>      @Override<a name="line.1696"></a>
<span class="sourceLineNo">1697</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1697"></a>
<span class="sourceLineNo">1698</span>        observer.postEnableReplicationPeer(this, peerId);<a name="line.1698"></a>
<span class="sourceLineNo">1699</span>      }<a name="line.1699"></a>
<span class="sourceLineNo">1700</span>    });<a name="line.1700"></a>
<span class="sourceLineNo">1701</span>  }<a name="line.1701"></a>
<span class="sourceLineNo">1702</span><a name="line.1702"></a>
<span class="sourceLineNo">1703</span>  public void preDisableReplicationPeer(final String peerId) throws IOException {<a name="line.1703"></a>
<span class="sourceLineNo">1704</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1704"></a>
<span class="sourceLineNo">1705</span>      @Override<a name="line.1705"></a>
<span class="sourceLineNo">1706</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1706"></a>
<span class="sourceLineNo">1707</span>        observer.preDisableReplicationPeer(this, peerId);<a name="line.1707"></a>
<span class="sourceLineNo">1708</span>      }<a name="line.1708"></a>
<span class="sourceLineNo">1709</span>    });<a name="line.1709"></a>
<span class="sourceLineNo">1710</span>  }<a name="line.1710"></a>
<span class="sourceLineNo">1711</span><a name="line.1711"></a>
<span class="sourceLineNo">1712</span>  public void postDisableReplicationPeer(final String peerId) throws IOException {<a name="line.1712"></a>
<span class="sourceLineNo">1713</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1713"></a>
<span class="sourceLineNo">1714</span>      @Override<a name="line.1714"></a>
<span class="sourceLineNo">1715</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1715"></a>
<span class="sourceLineNo">1716</span>        observer.postDisableReplicationPeer(this, peerId);<a name="line.1716"></a>
<span class="sourceLineNo">1717</span>      }<a name="line.1717"></a>
<span class="sourceLineNo">1718</span>    });<a name="line.1718"></a>
<span class="sourceLineNo">1719</span>  }<a name="line.1719"></a>
<span class="sourceLineNo">1720</span><a name="line.1720"></a>
<span class="sourceLineNo">1721</span>  public void preGetReplicationPeerConfig(final String peerId) throws IOException {<a name="line.1721"></a>
<span class="sourceLineNo">1722</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1722"></a>
<span class="sourceLineNo">1723</span>      @Override<a name="line.1723"></a>
<span class="sourceLineNo">1724</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1724"></a>
<span class="sourceLineNo">1725</span>        observer.preGetReplicationPeerConfig(this, peerId);<a name="line.1725"></a>
<span class="sourceLineNo">1726</span>      }<a name="line.1726"></a>
<span class="sourceLineNo">1727</span>    });<a name="line.1727"></a>
<span class="sourceLineNo">1728</span>  }<a name="line.1728"></a>
<span class="sourceLineNo">1729</span><a name="line.1729"></a>
<span class="sourceLineNo">1730</span>  public void postGetReplicationPeerConfig(final String peerId) throws IOException {<a name="line.1730"></a>
<span class="sourceLineNo">1731</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1731"></a>
<span class="sourceLineNo">1732</span>      @Override<a name="line.1732"></a>
<span class="sourceLineNo">1733</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1733"></a>
<span class="sourceLineNo">1734</span>        observer.postGetReplicationPeerConfig(this, peerId);<a name="line.1734"></a>
<span class="sourceLineNo">1735</span>      }<a name="line.1735"></a>
<span class="sourceLineNo">1736</span>    });<a name="line.1736"></a>
<span class="sourceLineNo">1737</span>  }<a name="line.1737"></a>
<span class="sourceLineNo">1738</span><a name="line.1738"></a>
<span class="sourceLineNo">1739</span>  public void preUpdateReplicationPeerConfig(final String peerId,<a name="line.1739"></a>
<span class="sourceLineNo">1740</span>    final ReplicationPeerConfig peerConfig) throws IOException {<a name="line.1740"></a>
<span class="sourceLineNo">1741</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1741"></a>
<span class="sourceLineNo">1742</span>      @Override<a name="line.1742"></a>
<span class="sourceLineNo">1743</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1743"></a>
<span class="sourceLineNo">1744</span>        observer.preUpdateReplicationPeerConfig(this, peerId, peerConfig);<a name="line.1744"></a>
<span class="sourceLineNo">1745</span>      }<a name="line.1745"></a>
<span class="sourceLineNo">1746</span>    });<a name="line.1746"></a>
<span class="sourceLineNo">1747</span>  }<a name="line.1747"></a>
<span class="sourceLineNo">1748</span><a name="line.1748"></a>
<span class="sourceLineNo">1749</span>  public void postUpdateReplicationPeerConfig(final String peerId,<a name="line.1749"></a>
<span class="sourceLineNo">1750</span>    final ReplicationPeerConfig peerConfig) throws IOException {<a name="line.1750"></a>
<span class="sourceLineNo">1751</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1751"></a>
<span class="sourceLineNo">1752</span>      @Override<a name="line.1752"></a>
<span class="sourceLineNo">1753</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1753"></a>
<span class="sourceLineNo">1754</span>        observer.postUpdateReplicationPeerConfig(this, peerId, peerConfig);<a name="line.1754"></a>
<span class="sourceLineNo">1755</span>      }<a name="line.1755"></a>
<span class="sourceLineNo">1756</span>    });<a name="line.1756"></a>
<span class="sourceLineNo">1757</span>  }<a name="line.1757"></a>
<span class="sourceLineNo">1758</span><a name="line.1758"></a>
<span class="sourceLineNo">1759</span>  public void preListReplicationPeers(final String regex) throws IOException {<a name="line.1759"></a>
<span class="sourceLineNo">1760</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1760"></a>
<span class="sourceLineNo">1761</span>      @Override<a name="line.1761"></a>
<span class="sourceLineNo">1762</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1762"></a>
<span class="sourceLineNo">1763</span>        observer.preListReplicationPeers(this, regex);<a name="line.1763"></a>
<span class="sourceLineNo">1764</span>      }<a name="line.1764"></a>
<span class="sourceLineNo">1765</span>    });<a name="line.1765"></a>
<span class="sourceLineNo">1766</span>  }<a name="line.1766"></a>
<span class="sourceLineNo">1767</span><a name="line.1767"></a>
<span class="sourceLineNo">1768</span>  public void postListReplicationPeers(final String regex) throws IOException {<a name="line.1768"></a>
<span class="sourceLineNo">1769</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1769"></a>
<span class="sourceLineNo">1770</span>      @Override<a name="line.1770"></a>
<span class="sourceLineNo">1771</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1771"></a>
<span class="sourceLineNo">1772</span>        observer.postListReplicationPeers(this, regex);<a name="line.1772"></a>
<span class="sourceLineNo">1773</span>      }<a name="line.1773"></a>
<span class="sourceLineNo">1774</span>    });<a name="line.1774"></a>
<span class="sourceLineNo">1775</span>  }<a name="line.1775"></a>
<span class="sourceLineNo">1776</span><a name="line.1776"></a>
<span class="sourceLineNo">1777</span>  public void preTransitReplicationPeerSyncReplicationState(String peerId,<a name="line.1777"></a>
<span class="sourceLineNo">1778</span>    SyncReplicationState state) throws IOException {<a name="line.1778"></a>
<span class="sourceLineNo">1779</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1779"></a>
<span class="sourceLineNo">1780</span>      @Override<a name="line.1780"></a>
<span class="sourceLineNo">1781</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1781"></a>
<span class="sourceLineNo">1782</span>        observer.preTransitReplicationPeerSyncReplicationState(this, peerId, state);<a name="line.1782"></a>
<span class="sourceLineNo">1783</span>      }<a name="line.1783"></a>
<span class="sourceLineNo">1784</span>    });<a name="line.1784"></a>
<span class="sourceLineNo">1785</span>  }<a name="line.1785"></a>
<span class="sourceLineNo">1786</span><a name="line.1786"></a>
<span class="sourceLineNo">1787</span>  public void postTransitReplicationPeerSyncReplicationState(String peerId,<a name="line.1787"></a>
<span class="sourceLineNo">1788</span>    SyncReplicationState from, SyncReplicationState to) throws IOException {<a name="line.1788"></a>
<span class="sourceLineNo">1789</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1789"></a>
<span class="sourceLineNo">1790</span>      @Override<a name="line.1790"></a>
<span class="sourceLineNo">1791</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1791"></a>
<span class="sourceLineNo">1792</span>        observer.postTransitReplicationPeerSyncReplicationState(this, peerId, from, to);<a name="line.1792"></a>
<span class="sourceLineNo">1793</span>      }<a name="line.1793"></a>
<span class="sourceLineNo">1794</span>    });<a name="line.1794"></a>
<span class="sourceLineNo">1795</span>  }<a name="line.1795"></a>
<span class="sourceLineNo">1796</span><a name="line.1796"></a>
<span class="sourceLineNo">1797</span>  public void preRequestLock(String namespace, TableName tableName, RegionInfo[] regionInfos,<a name="line.1797"></a>
<span class="sourceLineNo">1798</span>    LockType type, String description) throws IOException {<a name="line.1798"></a>
<span class="sourceLineNo">1799</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1799"></a>
<span class="sourceLineNo">1800</span>      @Override<a name="line.1800"></a>
<span class="sourceLineNo">1801</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1801"></a>
<span class="sourceLineNo">1802</span>        observer.preRequestLock(this, namespace, tableName, regionInfos, description);<a name="line.1802"></a>
<span class="sourceLineNo">1803</span>      }<a name="line.1803"></a>
<span class="sourceLineNo">1804</span>    });<a name="line.1804"></a>
<span class="sourceLineNo">1805</span>  }<a name="line.1805"></a>
<span class="sourceLineNo">1806</span><a name="line.1806"></a>
<span class="sourceLineNo">1807</span>  public void postRequestLock(String namespace, TableName tableName, RegionInfo[] regionInfos,<a name="line.1807"></a>
<span class="sourceLineNo">1808</span>    LockType type, String description) throws IOException {<a name="line.1808"></a>
<span class="sourceLineNo">1809</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1809"></a>
<span class="sourceLineNo">1810</span>      @Override<a name="line.1810"></a>
<span class="sourceLineNo">1811</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1811"></a>
<span class="sourceLineNo">1812</span>        observer.postRequestLock(this, namespace, tableName, regionInfos, description);<a name="line.1812"></a>
<span class="sourceLineNo">1813</span>      }<a name="line.1813"></a>
<span class="sourceLineNo">1814</span>    });<a name="line.1814"></a>
<span class="sourceLineNo">1815</span>  }<a name="line.1815"></a>
<span class="sourceLineNo">1816</span><a name="line.1816"></a>
<span class="sourceLineNo">1817</span>  public void preLockHeartbeat(LockProcedure proc, boolean keepAlive) throws IOException {<a name="line.1817"></a>
<span class="sourceLineNo">1818</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1818"></a>
<span class="sourceLineNo">1819</span>      @Override<a name="line.1819"></a>
<span class="sourceLineNo">1820</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1820"></a>
<span class="sourceLineNo">1821</span>        observer.preLockHeartbeat(this, proc.getTableName(), proc.getDescription());<a name="line.1821"></a>
<span class="sourceLineNo">1822</span>      }<a name="line.1822"></a>
<span class="sourceLineNo">1823</span>    });<a name="line.1823"></a>
<span class="sourceLineNo">1824</span>  }<a name="line.1824"></a>
<span class="sourceLineNo">1825</span><a name="line.1825"></a>
<span class="sourceLineNo">1826</span>  public void postLockHeartbeat(LockProcedure proc, boolean keepAlive) throws IOException {<a name="line.1826"></a>
<span class="sourceLineNo">1827</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1827"></a>
<span class="sourceLineNo">1828</span>      @Override<a name="line.1828"></a>
<span class="sourceLineNo">1829</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1829"></a>
<span class="sourceLineNo">1830</span>        observer.postLockHeartbeat(this);<a name="line.1830"></a>
<span class="sourceLineNo">1831</span>      }<a name="line.1831"></a>
<span class="sourceLineNo">1832</span>    });<a name="line.1832"></a>
<span class="sourceLineNo">1833</span>  }<a name="line.1833"></a>
<span class="sourceLineNo">1834</span><a name="line.1834"></a>
<span class="sourceLineNo">1835</span>  public void preGetClusterMetrics() throws IOException {<a name="line.1835"></a>
<span class="sourceLineNo">1836</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1836"></a>
<span class="sourceLineNo">1837</span>      @Override<a name="line.1837"></a>
<span class="sourceLineNo">1838</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1838"></a>
<span class="sourceLineNo">1839</span>        observer.preGetClusterMetrics(this);<a name="line.1839"></a>
<span class="sourceLineNo">1840</span>      }<a name="line.1840"></a>
<span class="sourceLineNo">1841</span>    });<a name="line.1841"></a>
<span class="sourceLineNo">1842</span>  }<a name="line.1842"></a>
<span class="sourceLineNo">1843</span><a name="line.1843"></a>
<span class="sourceLineNo">1844</span>  public void postGetClusterMetrics(ClusterMetrics status) throws IOException {<a name="line.1844"></a>
<span class="sourceLineNo">1845</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1845"></a>
<span class="sourceLineNo">1846</span>      @Override<a name="line.1846"></a>
<span class="sourceLineNo">1847</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1847"></a>
<span class="sourceLineNo">1848</span>        observer.postGetClusterMetrics(this, status);<a name="line.1848"></a>
<span class="sourceLineNo">1849</span>      }<a name="line.1849"></a>
<span class="sourceLineNo">1850</span>    });<a name="line.1850"></a>
<span class="sourceLineNo">1851</span>  }<a name="line.1851"></a>
<span class="sourceLineNo">1852</span><a name="line.1852"></a>
<span class="sourceLineNo">1853</span>  public void preClearDeadServers() throws IOException {<a name="line.1853"></a>
<span class="sourceLineNo">1854</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1854"></a>
<span class="sourceLineNo">1855</span>      @Override<a name="line.1855"></a>
<span class="sourceLineNo">1856</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1856"></a>
<span class="sourceLineNo">1857</span>        observer.preClearDeadServers(this);<a name="line.1857"></a>
<span class="sourceLineNo">1858</span>      }<a name="line.1858"></a>
<span class="sourceLineNo">1859</span>    });<a name="line.1859"></a>
<span class="sourceLineNo">1860</span>  }<a name="line.1860"></a>
<span class="sourceLineNo">1861</span><a name="line.1861"></a>
<span class="sourceLineNo">1862</span>  public void postClearDeadServers(List&lt;ServerName&gt; servers, List&lt;ServerName&gt; notClearedServers)<a name="line.1862"></a>
<span class="sourceLineNo">1863</span>    throws IOException {<a name="line.1863"></a>
<span class="sourceLineNo">1864</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1864"></a>
<span class="sourceLineNo">1865</span>      @Override<a name="line.1865"></a>
<span class="sourceLineNo">1866</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1866"></a>
<span class="sourceLineNo">1867</span>        observer.postClearDeadServers(this, servers, notClearedServers);<a name="line.1867"></a>
<span class="sourceLineNo">1868</span>      }<a name="line.1868"></a>
<span class="sourceLineNo">1869</span>    });<a name="line.1869"></a>
<span class="sourceLineNo">1870</span>  }<a name="line.1870"></a>
<span class="sourceLineNo">1871</span><a name="line.1871"></a>
<span class="sourceLineNo">1872</span>  public void preDecommissionRegionServers(List&lt;ServerName&gt; servers, boolean offload)<a name="line.1872"></a>
<span class="sourceLineNo">1873</span>    throws IOException {<a name="line.1873"></a>
<span class="sourceLineNo">1874</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1874"></a>
<span class="sourceLineNo">1875</span>      @Override<a name="line.1875"></a>
<span class="sourceLineNo">1876</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1876"></a>
<span class="sourceLineNo">1877</span>        observer.preDecommissionRegionServers(this, servers, offload);<a name="line.1877"></a>
<span class="sourceLineNo">1878</span>      }<a name="line.1878"></a>
<span class="sourceLineNo">1879</span>    });<a name="line.1879"></a>
<span class="sourceLineNo">1880</span>  }<a name="line.1880"></a>
<span class="sourceLineNo">1881</span><a name="line.1881"></a>
<span class="sourceLineNo">1882</span>  public void postDecommissionRegionServers(List&lt;ServerName&gt; servers, boolean offload)<a name="line.1882"></a>
<span class="sourceLineNo">1883</span>    throws IOException {<a name="line.1883"></a>
<span class="sourceLineNo">1884</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1884"></a>
<span class="sourceLineNo">1885</span>      @Override<a name="line.1885"></a>
<span class="sourceLineNo">1886</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1886"></a>
<span class="sourceLineNo">1887</span>        observer.postDecommissionRegionServers(this, servers, offload);<a name="line.1887"></a>
<span class="sourceLineNo">1888</span>      }<a name="line.1888"></a>
<span class="sourceLineNo">1889</span>    });<a name="line.1889"></a>
<span class="sourceLineNo">1890</span>  }<a name="line.1890"></a>
<span class="sourceLineNo">1891</span><a name="line.1891"></a>
<span class="sourceLineNo">1892</span>  public void preListDecommissionedRegionServers() throws IOException {<a name="line.1892"></a>
<span class="sourceLineNo">1893</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1893"></a>
<span class="sourceLineNo">1894</span>      @Override<a name="line.1894"></a>
<span class="sourceLineNo">1895</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1895"></a>
<span class="sourceLineNo">1896</span>        observer.preListDecommissionedRegionServers(this);<a name="line.1896"></a>
<span class="sourceLineNo">1897</span>      }<a name="line.1897"></a>
<span class="sourceLineNo">1898</span>    });<a name="line.1898"></a>
<span class="sourceLineNo">1899</span>  }<a name="line.1899"></a>
<span class="sourceLineNo">1900</span><a name="line.1900"></a>
<span class="sourceLineNo">1901</span>  public void postListDecommissionedRegionServers() throws IOException {<a name="line.1901"></a>
<span class="sourceLineNo">1902</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1902"></a>
<span class="sourceLineNo">1903</span>      @Override<a name="line.1903"></a>
<span class="sourceLineNo">1904</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1904"></a>
<span class="sourceLineNo">1905</span>        observer.postListDecommissionedRegionServers(this);<a name="line.1905"></a>
<span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
<span class="sourceLineNo">1907</span>    });<a name="line.1907"></a>
<span class="sourceLineNo">1908</span>  }<a name="line.1908"></a>
<span class="sourceLineNo">1909</span><a name="line.1909"></a>
<span class="sourceLineNo">1910</span>  public void preRecommissionRegionServer(ServerName server, List&lt;byte[]&gt; encodedRegionNames)<a name="line.1910"></a>
<span class="sourceLineNo">1911</span>    throws IOException {<a name="line.1911"></a>
<span class="sourceLineNo">1912</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1912"></a>
<span class="sourceLineNo">1913</span>      @Override<a name="line.1913"></a>
<span class="sourceLineNo">1914</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1914"></a>
<span class="sourceLineNo">1915</span>        observer.preRecommissionRegionServer(this, server, encodedRegionNames);<a name="line.1915"></a>
<span class="sourceLineNo">1916</span>      }<a name="line.1916"></a>
<span class="sourceLineNo">1917</span>    });<a name="line.1917"></a>
<span class="sourceLineNo">1918</span>  }<a name="line.1918"></a>
<span class="sourceLineNo">1919</span><a name="line.1919"></a>
<span class="sourceLineNo">1920</span>  public void postRecommissionRegionServer(ServerName server, List&lt;byte[]&gt; encodedRegionNames)<a name="line.1920"></a>
<span class="sourceLineNo">1921</span>    throws IOException {<a name="line.1921"></a>
<span class="sourceLineNo">1922</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1922"></a>
<span class="sourceLineNo">1923</span>      @Override<a name="line.1923"></a>
<span class="sourceLineNo">1924</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1924"></a>
<span class="sourceLineNo">1925</span>        observer.postRecommissionRegionServer(this, server, encodedRegionNames);<a name="line.1925"></a>
<span class="sourceLineNo">1926</span>      }<a name="line.1926"></a>
<span class="sourceLineNo">1927</span>    });<a name="line.1927"></a>
<span class="sourceLineNo">1928</span>  }<a name="line.1928"></a>
<span class="sourceLineNo">1929</span><a name="line.1929"></a>
<span class="sourceLineNo">1930</span>  public void preSwitchRpcThrottle(boolean enable) throws IOException {<a name="line.1930"></a>
<span class="sourceLineNo">1931</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1931"></a>
<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
<span class="sourceLineNo">1933</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1933"></a>
<span class="sourceLineNo">1934</span>        observer.preSwitchRpcThrottle(this, enable);<a name="line.1934"></a>
<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
<span class="sourceLineNo">1936</span>    });<a name="line.1936"></a>
<span class="sourceLineNo">1937</span>  }<a name="line.1937"></a>
<span class="sourceLineNo">1938</span><a name="line.1938"></a>
<span class="sourceLineNo">1939</span>  public void postSwitchRpcThrottle(final boolean oldValue, final boolean newValue)<a name="line.1939"></a>
<span class="sourceLineNo">1940</span>    throws IOException {<a name="line.1940"></a>
<span class="sourceLineNo">1941</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1941"></a>
<span class="sourceLineNo">1942</span>      @Override<a name="line.1942"></a>
<span class="sourceLineNo">1943</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1943"></a>
<span class="sourceLineNo">1944</span>        observer.postSwitchRpcThrottle(this, oldValue, newValue);<a name="line.1944"></a>
<span class="sourceLineNo">1945</span>      }<a name="line.1945"></a>
<span class="sourceLineNo">1946</span>    });<a name="line.1946"></a>
<span class="sourceLineNo">1947</span>  }<a name="line.1947"></a>
<span class="sourceLineNo">1948</span><a name="line.1948"></a>
<span class="sourceLineNo">1949</span>  public void preIsRpcThrottleEnabled() throws IOException {<a name="line.1949"></a>
<span class="sourceLineNo">1950</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1950"></a>
<span class="sourceLineNo">1951</span>      @Override<a name="line.1951"></a>
<span class="sourceLineNo">1952</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1952"></a>
<span class="sourceLineNo">1953</span>        observer.preIsRpcThrottleEnabled(this);<a name="line.1953"></a>
<span class="sourceLineNo">1954</span>      }<a name="line.1954"></a>
<span class="sourceLineNo">1955</span>    });<a name="line.1955"></a>
<span class="sourceLineNo">1956</span>  }<a name="line.1956"></a>
<span class="sourceLineNo">1957</span><a name="line.1957"></a>
<span class="sourceLineNo">1958</span>  public void postIsRpcThrottleEnabled(boolean enabled) throws IOException {<a name="line.1958"></a>
<span class="sourceLineNo">1959</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1959"></a>
<span class="sourceLineNo">1960</span>      @Override<a name="line.1960"></a>
<span class="sourceLineNo">1961</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1961"></a>
<span class="sourceLineNo">1962</span>        observer.postIsRpcThrottleEnabled(this, enabled);<a name="line.1962"></a>
<span class="sourceLineNo">1963</span>      }<a name="line.1963"></a>
<span class="sourceLineNo">1964</span>    });<a name="line.1964"></a>
<span class="sourceLineNo">1965</span>  }<a name="line.1965"></a>
<span class="sourceLineNo">1966</span><a name="line.1966"></a>
<span class="sourceLineNo">1967</span>  public void preSwitchExceedThrottleQuota(boolean enable) throws IOException {<a name="line.1967"></a>
<span class="sourceLineNo">1968</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1968"></a>
<span class="sourceLineNo">1969</span>      @Override<a name="line.1969"></a>
<span class="sourceLineNo">1970</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1970"></a>
<span class="sourceLineNo">1971</span>        observer.preSwitchExceedThrottleQuota(this, enable);<a name="line.1971"></a>
<span class="sourceLineNo">1972</span>      }<a name="line.1972"></a>
<span class="sourceLineNo">1973</span>    });<a name="line.1973"></a>
<span class="sourceLineNo">1974</span>  }<a name="line.1974"></a>
<span class="sourceLineNo">1975</span><a name="line.1975"></a>
<span class="sourceLineNo">1976</span>  public void postSwitchExceedThrottleQuota(final boolean oldValue, final boolean newValue)<a name="line.1976"></a>
<span class="sourceLineNo">1977</span>    throws IOException {<a name="line.1977"></a>
<span class="sourceLineNo">1978</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1978"></a>
<span class="sourceLineNo">1979</span>      @Override<a name="line.1979"></a>
<span class="sourceLineNo">1980</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1980"></a>
<span class="sourceLineNo">1981</span>        observer.postSwitchExceedThrottleQuota(this, oldValue, newValue);<a name="line.1981"></a>
<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
<span class="sourceLineNo">1983</span>    });<a name="line.1983"></a>
<span class="sourceLineNo">1984</span>  }<a name="line.1984"></a>
<span class="sourceLineNo">1985</span><a name="line.1985"></a>
<span class="sourceLineNo">1986</span>  public void preGrant(UserPermission userPermission, boolean mergeExistingPermissions)<a name="line.1986"></a>
<span class="sourceLineNo">1987</span>    throws IOException {<a name="line.1987"></a>
<span class="sourceLineNo">1988</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1988"></a>
<span class="sourceLineNo">1989</span>      @Override<a name="line.1989"></a>
<span class="sourceLineNo">1990</span>      public void call(MasterObserver observer) throws IOException {<a name="line.1990"></a>
<span class="sourceLineNo">1991</span>        observer.preGrant(this, userPermission, mergeExistingPermissions);<a name="line.1991"></a>
<span class="sourceLineNo">1992</span>      }<a name="line.1992"></a>
<span class="sourceLineNo">1993</span>    });<a name="line.1993"></a>
<span class="sourceLineNo">1994</span>  }<a name="line.1994"></a>
<span class="sourceLineNo">1995</span><a name="line.1995"></a>
<span class="sourceLineNo">1996</span>  public void postGrant(UserPermission userPermission, boolean mergeExistingPermissions)<a name="line.1996"></a>
<span class="sourceLineNo">1997</span>    throws IOException {<a name="line.1997"></a>
<span class="sourceLineNo">1998</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.1998"></a>
<span class="sourceLineNo">1999</span>      @Override<a name="line.1999"></a>
<span class="sourceLineNo">2000</span>      public void call(MasterObserver observer) throws IOException {<a name="line.2000"></a>
<span class="sourceLineNo">2001</span>        observer.postGrant(this, userPermission, mergeExistingPermissions);<a name="line.2001"></a>
<span class="sourceLineNo">2002</span>      }<a name="line.2002"></a>
<span class="sourceLineNo">2003</span>    });<a name="line.2003"></a>
<span class="sourceLineNo">2004</span>  }<a name="line.2004"></a>
<span class="sourceLineNo">2005</span><a name="line.2005"></a>
<span class="sourceLineNo">2006</span>  public void preRevoke(UserPermission userPermission) throws IOException {<a name="line.2006"></a>
<span class="sourceLineNo">2007</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.2007"></a>
<span class="sourceLineNo">2008</span>      @Override<a name="line.2008"></a>
<span class="sourceLineNo">2009</span>      public void call(MasterObserver observer) throws IOException {<a name="line.2009"></a>
<span class="sourceLineNo">2010</span>        observer.preRevoke(this, userPermission);<a name="line.2010"></a>
<span class="sourceLineNo">2011</span>      }<a name="line.2011"></a>
<span class="sourceLineNo">2012</span>    });<a name="line.2012"></a>
<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
<span class="sourceLineNo">2014</span><a name="line.2014"></a>
<span class="sourceLineNo">2015</span>  public void postRevoke(UserPermission userPermission) throws IOException {<a name="line.2015"></a>
<span class="sourceLineNo">2016</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.2016"></a>
<span class="sourceLineNo">2017</span>      @Override<a name="line.2017"></a>
<span class="sourceLineNo">2018</span>      public void call(MasterObserver observer) throws IOException {<a name="line.2018"></a>
<span class="sourceLineNo">2019</span>        observer.postRevoke(this, userPermission);<a name="line.2019"></a>
<span class="sourceLineNo">2020</span>      }<a name="line.2020"></a>
<span class="sourceLineNo">2021</span>    });<a name="line.2021"></a>
<span class="sourceLineNo">2022</span>  }<a name="line.2022"></a>
<span class="sourceLineNo">2023</span><a name="line.2023"></a>
<span class="sourceLineNo">2024</span>  public void preGetUserPermissions(String userName, String namespace, TableName tableName,<a name="line.2024"></a>
<span class="sourceLineNo">2025</span>    byte[] family, byte[] qualifier) throws IOException {<a name="line.2025"></a>
<span class="sourceLineNo">2026</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.2026"></a>
<span class="sourceLineNo">2027</span>      @Override<a name="line.2027"></a>
<span class="sourceLineNo">2028</span>      public void call(MasterObserver observer) throws IOException {<a name="line.2028"></a>
<span class="sourceLineNo">2029</span>        observer.preGetUserPermissions(this, userName, namespace, tableName, family, qualifier);<a name="line.2029"></a>
<span class="sourceLineNo">2030</span>      }<a name="line.2030"></a>
<span class="sourceLineNo">2031</span>    });<a name="line.2031"></a>
<span class="sourceLineNo">2032</span>  }<a name="line.2032"></a>
<span class="sourceLineNo">2033</span><a name="line.2033"></a>
<span class="sourceLineNo">2034</span>  public void postGetUserPermissions(String userName, String namespace, TableName tableName,<a name="line.2034"></a>
<span class="sourceLineNo">2035</span>    byte[] family, byte[] qualifier) throws IOException {<a name="line.2035"></a>
<span class="sourceLineNo">2036</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.2036"></a>
<span class="sourceLineNo">2037</span>      @Override<a name="line.2037"></a>
<span class="sourceLineNo">2038</span>      public void call(MasterObserver observer) throws IOException {<a name="line.2038"></a>
<span class="sourceLineNo">2039</span>        observer.postGetUserPermissions(this, userName, namespace, tableName, family, qualifier);<a name="line.2039"></a>
<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
<span class="sourceLineNo">2041</span>    });<a name="line.2041"></a>
<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
<span class="sourceLineNo">2043</span><a name="line.2043"></a>
<span class="sourceLineNo">2044</span>  public void preHasUserPermissions(String userName, List&lt;Permission&gt; permissions)<a name="line.2044"></a>
<span class="sourceLineNo">2045</span>    throws IOException {<a name="line.2045"></a>
<span class="sourceLineNo">2046</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.2046"></a>
<span class="sourceLineNo">2047</span>      @Override<a name="line.2047"></a>
<span class="sourceLineNo">2048</span>      public void call(MasterObserver observer) throws IOException {<a name="line.2048"></a>
<span class="sourceLineNo">2049</span>        observer.preHasUserPermissions(this, userName, permissions);<a name="line.2049"></a>
<span class="sourceLineNo">2050</span>      }<a name="line.2050"></a>
<span class="sourceLineNo">2051</span>    });<a name="line.2051"></a>
<span class="sourceLineNo">2052</span>  }<a name="line.2052"></a>
<span class="sourceLineNo">2053</span><a name="line.2053"></a>
<span class="sourceLineNo">2054</span>  public void postHasUserPermissions(String userName, List&lt;Permission&gt; permissions)<a name="line.2054"></a>
<span class="sourceLineNo">2055</span>    throws IOException {<a name="line.2055"></a>
<span class="sourceLineNo">2056</span>    execOperation(coprocEnvironments.isEmpty() ? null : new MasterObserverOperation() {<a name="line.2056"></a>
<span class="sourceLineNo">2057</span>      @Override<a name="line.2057"></a>
<span class="sourceLineNo">2058</span>      public void call(MasterObserver observer) throws IOException {<a name="line.2058"></a>
<span class="sourceLineNo">2059</span>        observer.postHasUserPermissions(this, userName, permissions);<a name="line.2059"></a>
<span class="sourceLineNo">2060</span>      }<a name="line.2060"></a>
<span class="sourceLineNo">2061</span>    });<a name="line.2061"></a>
<span class="sourceLineNo">2062</span>  }<a name="line.2062"></a>
<span class="sourceLineNo">2063</span>}<a name="line.2063"></a>




























































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