You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mi...@apache.org on 2016/02/24 18:45:03 UTC

[04/30] hbase-site git commit: Published site at 28cd48b673ca743d193874b2951bc995699e8e89.

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/89b638a4/xref/org/apache/hadoop/hbase/ipc/RpcServer.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/ipc/RpcServer.html b/xref/org/apache/hadoop/hbase/ipc/RpcServer.html
index 9d9e774..4d97d71 100644
--- a/xref/org/apache/hadoop/hbase/ipc/RpcServer.html
+++ b/xref/org/apache/hadoop/hbase/ipc/RpcServer.html
@@ -2109,556 +2109,559 @@
 <a class="jxr_linenumber" name="2099" href="#2099">2099</a>   @Override
 <a class="jxr_linenumber" name="2100" href="#2100">2100</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> onConfigurationChange(Configuration newConf) {
 <a class="jxr_linenumber" name="2101" href="#2101">2101</a>     initReconfigurable(newConf);
-<a class="jxr_linenumber" name="2102" href="#2102">2102</a>   }
-<a class="jxr_linenumber" name="2103" href="#2103">2103</a> 
-<a class="jxr_linenumber" name="2104" href="#2104">2104</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> initReconfigurable(Configuration confToLoad) {
-<a class="jxr_linenumber" name="2105" href="#2105">2105</a>     <strong class="jxr_keyword">this</strong>.allowFallbackToSimpleAuth = confToLoad.getBoolean(FALLBACK_TO_INSECURE_CLIENT_AUTH, false);
-<a class="jxr_linenumber" name="2106" href="#2106">2106</a>     <strong class="jxr_keyword">if</strong> (isSecurityEnabled &amp;&amp; allowFallbackToSimpleAuth) {
-<a class="jxr_linenumber" name="2107" href="#2107">2107</a>       LOG.warn(<span class="jxr_string">"********* WARNING! *********"</span>);
-<a class="jxr_linenumber" name="2108" href="#2108">2108</a>       LOG.warn(<span class="jxr_string">"This server is configured to allow connections from INSECURE clients"</span>);
-<a class="jxr_linenumber" name="2109" href="#2109">2109</a>       LOG.warn(<span class="jxr_string">"("</span> + FALLBACK_TO_INSECURE_CLIENT_AUTH + <span class="jxr_string">" = true)."</span>);
-<a class="jxr_linenumber" name="2110" href="#2110">2110</a>       LOG.warn(<span class="jxr_string">"While this option is enabled, client identities cannot be secured, and user"</span>);
-<a class="jxr_linenumber" name="2111" href="#2111">2111</a>       LOG.warn(<span class="jxr_string">"impersonation is possible!"</span>);
-<a class="jxr_linenumber" name="2112" href="#2112">2112</a>       LOG.warn(<span class="jxr_string">"For secure operation, please disable SIMPLE authentication as soon as possible,"</span>);
-<a class="jxr_linenumber" name="2113" href="#2113">2113</a>       LOG.warn(<span class="jxr_string">"by setting "</span> + FALLBACK_TO_INSECURE_CLIENT_AUTH + <span class="jxr_string">" = false in hbase-site.xml"</span>);
-<a class="jxr_linenumber" name="2114" href="#2114">2114</a>       LOG.warn(<span class="jxr_string">"****************************"</span>);
-<a class="jxr_linenumber" name="2115" href="#2115">2115</a>     }
-<a class="jxr_linenumber" name="2116" href="#2116">2116</a>   }
-<a class="jxr_linenumber" name="2117" href="#2117">2117</a> 
-<a class="jxr_linenumber" name="2118" href="#2118">2118</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2119" href="#2119">2119</a> <em class="jxr_javadoccomment">   * Subclasses of HBaseServer can override this to provide their own</em>
-<a class="jxr_linenumber" name="2120" href="#2120">2120</a> <em class="jxr_javadoccomment">   * Connection implementations.</em>
-<a class="jxr_linenumber" name="2121" href="#2121">2121</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2122" href="#2122">2122</a>   <strong class="jxr_keyword">protected</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html">Connection</a> getConnection(SocketChannel channel, <strong class="jxr_keyword">long</strong> time) {
-<a class="jxr_linenumber" name="2123" href="#2123">2123</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html">Connection</a>(channel, time);
-<a class="jxr_linenumber" name="2124" href="#2124">2124</a>   }
-<a class="jxr_linenumber" name="2125" href="#2125">2125</a> 
-<a class="jxr_linenumber" name="2126" href="#2126">2126</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2127" href="#2127">2127</a> <em class="jxr_javadoccomment">   * Setup response for the RPC Call.</em>
-<a class="jxr_linenumber" name="2128" href="#2128">2128</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="2129" href="#2129">2129</a> <em class="jxr_javadoccomment">   * @param response buffer to serialize the response into</em>
-<a class="jxr_linenumber" name="2130" href="#2130">2130</a> <em class="jxr_javadoccomment">   * @param call {@link Call} to which we are setting up the response</em>
-<a class="jxr_linenumber" name="2131" href="#2131">2131</a> <em class="jxr_javadoccomment">   * @param error error message, if the call failed</em>
-<a class="jxr_linenumber" name="2132" href="#2132">2132</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
-<a class="jxr_linenumber" name="2133" href="#2133">2133</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2134" href="#2134">2134</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> setupResponse(<a href="../../../../../org/apache/hadoop/hbase/io/ByteArrayOutputStream.html">ByteArrayOutputStream</a> response, <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.html">Call</a> call, Throwable t, String error)
-<a class="jxr_linenumber" name="2135" href="#2135">2135</a>   <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="2136" href="#2136">2136</a>     <strong class="jxr_keyword">if</strong> (response != <strong class="jxr_keyword">null</strong>) response.reset();
-<a class="jxr_linenumber" name="2137" href="#2137">2137</a>     call.setResponse(<strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, t, error);
-<a class="jxr_linenumber" name="2138" href="#2138">2138</a>   }
-<a class="jxr_linenumber" name="2139" href="#2139">2139</a> 
-<a class="jxr_linenumber" name="2140" href="#2140">2140</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> closeConnection(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html">Connection</a> connection) {
-<a class="jxr_linenumber" name="2141" href="#2141">2141</a>     <strong class="jxr_keyword">synchronized</strong> (connectionList) {
-<a class="jxr_linenumber" name="2142" href="#2142">2142</a>       <strong class="jxr_keyword">if</strong> (connectionList.remove(connection)) {
-<a class="jxr_linenumber" name="2143" href="#2143">2143</a>         numConnections--;
-<a class="jxr_linenumber" name="2144" href="#2144">2144</a>       }
-<a class="jxr_linenumber" name="2145" href="#2145">2145</a>     }
-<a class="jxr_linenumber" name="2146" href="#2146">2146</a>     connection.close();
-<a class="jxr_linenumber" name="2147" href="#2147">2147</a>   }
-<a class="jxr_linenumber" name="2148" href="#2148">2148</a> 
-<a class="jxr_linenumber" name="2149" href="#2149">2149</a>   Configuration getConf() {
-<a class="jxr_linenumber" name="2150" href="#2150">2150</a>     <strong class="jxr_keyword">return</strong> conf;
-<a class="jxr_linenumber" name="2151" href="#2151">2151</a>   }
-<a class="jxr_linenumber" name="2152" href="#2152">2152</a> 
-<a class="jxr_linenumber" name="2153" href="#2153">2153</a>   <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> Sets the socket buffer size used for responding to RPCs.</em>
-<a class="jxr_linenumber" name="2154" href="#2154">2154</a> <em class="jxr_javadoccomment">   * @param size send size</em>
-<a class="jxr_linenumber" name="2155" href="#2155">2155</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2156" href="#2156">2156</a>   @Override
-<a class="jxr_linenumber" name="2157" href="#2157">2157</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setSocketSendBufSize(<strong class="jxr_keyword">int</strong> size) { <strong class="jxr_keyword">this</strong>.socketSendBufferSize = size; }
-<a class="jxr_linenumber" name="2158" href="#2158">2158</a> 
+<a class="jxr_linenumber" name="2102" href="#2102">2102</a>     <strong class="jxr_keyword">if</strong> (scheduler instanceof ConfigurationObserver) {
+<a class="jxr_linenumber" name="2103" href="#2103">2103</a>       ((<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserver.html">ConfigurationObserver</a>)scheduler).onConfigurationChange(newConf);
+<a class="jxr_linenumber" name="2104" href="#2104">2104</a>     }
+<a class="jxr_linenumber" name="2105" href="#2105">2105</a>   }
+<a class="jxr_linenumber" name="2106" href="#2106">2106</a> 
+<a class="jxr_linenumber" name="2107" href="#2107">2107</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> initReconfigurable(Configuration confToLoad) {
+<a class="jxr_linenumber" name="2108" href="#2108">2108</a>     <strong class="jxr_keyword">this</strong>.allowFallbackToSimpleAuth = confToLoad.getBoolean(FALLBACK_TO_INSECURE_CLIENT_AUTH, false);
+<a class="jxr_linenumber" name="2109" href="#2109">2109</a>     <strong class="jxr_keyword">if</strong> (isSecurityEnabled &amp;&amp; allowFallbackToSimpleAuth) {
+<a class="jxr_linenumber" name="2110" href="#2110">2110</a>       LOG.warn(<span class="jxr_string">"********* WARNING! *********"</span>);
+<a class="jxr_linenumber" name="2111" href="#2111">2111</a>       LOG.warn(<span class="jxr_string">"This server is configured to allow connections from INSECURE clients"</span>);
+<a class="jxr_linenumber" name="2112" href="#2112">2112</a>       LOG.warn(<span class="jxr_string">"("</span> + FALLBACK_TO_INSECURE_CLIENT_AUTH + <span class="jxr_string">" = true)."</span>);
+<a class="jxr_linenumber" name="2113" href="#2113">2113</a>       LOG.warn(<span class="jxr_string">"While this option is enabled, client identities cannot be secured, and user"</span>);
+<a class="jxr_linenumber" name="2114" href="#2114">2114</a>       LOG.warn(<span class="jxr_string">"impersonation is possible!"</span>);
+<a class="jxr_linenumber" name="2115" href="#2115">2115</a>       LOG.warn(<span class="jxr_string">"For secure operation, please disable SIMPLE authentication as soon as possible,"</span>);
+<a class="jxr_linenumber" name="2116" href="#2116">2116</a>       LOG.warn(<span class="jxr_string">"by setting "</span> + FALLBACK_TO_INSECURE_CLIENT_AUTH + <span class="jxr_string">" = false in hbase-site.xml"</span>);
+<a class="jxr_linenumber" name="2117" href="#2117">2117</a>       LOG.warn(<span class="jxr_string">"****************************"</span>);
+<a class="jxr_linenumber" name="2118" href="#2118">2118</a>     }
+<a class="jxr_linenumber" name="2119" href="#2119">2119</a>   }
+<a class="jxr_linenumber" name="2120" href="#2120">2120</a> 
+<a class="jxr_linenumber" name="2121" href="#2121">2121</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="2122" href="#2122">2122</a> <em class="jxr_javadoccomment">   * Subclasses of HBaseServer can override this to provide their own</em>
+<a class="jxr_linenumber" name="2123" href="#2123">2123</a> <em class="jxr_javadoccomment">   * Connection implementations.</em>
+<a class="jxr_linenumber" name="2124" href="#2124">2124</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="2125" href="#2125">2125</a>   <strong class="jxr_keyword">protected</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html">Connection</a> getConnection(SocketChannel channel, <strong class="jxr_keyword">long</strong> time) {
+<a class="jxr_linenumber" name="2126" href="#2126">2126</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html">Connection</a>(channel, time);
+<a class="jxr_linenumber" name="2127" href="#2127">2127</a>   }
+<a class="jxr_linenumber" name="2128" href="#2128">2128</a> 
+<a class="jxr_linenumber" name="2129" href="#2129">2129</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="2130" href="#2130">2130</a> <em class="jxr_javadoccomment">   * Setup response for the RPC Call.</em>
+<a class="jxr_linenumber" name="2131" href="#2131">2131</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="2132" href="#2132">2132</a> <em class="jxr_javadoccomment">   * @param response buffer to serialize the response into</em>
+<a class="jxr_linenumber" name="2133" href="#2133">2133</a> <em class="jxr_javadoccomment">   * @param call {@link Call} to which we are setting up the response</em>
+<a class="jxr_linenumber" name="2134" href="#2134">2134</a> <em class="jxr_javadoccomment">   * @param error error message, if the call failed</em>
+<a class="jxr_linenumber" name="2135" href="#2135">2135</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
+<a class="jxr_linenumber" name="2136" href="#2136">2136</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="2137" href="#2137">2137</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> setupResponse(<a href="../../../../../org/apache/hadoop/hbase/io/ByteArrayOutputStream.html">ByteArrayOutputStream</a> response, <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.html">Call</a> call, Throwable t, String error)
+<a class="jxr_linenumber" name="2138" href="#2138">2138</a>   <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="2139" href="#2139">2139</a>     <strong class="jxr_keyword">if</strong> (response != <strong class="jxr_keyword">null</strong>) response.reset();
+<a class="jxr_linenumber" name="2140" href="#2140">2140</a>     call.setResponse(<strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, t, error);
+<a class="jxr_linenumber" name="2141" href="#2141">2141</a>   }
+<a class="jxr_linenumber" name="2142" href="#2142">2142</a> 
+<a class="jxr_linenumber" name="2143" href="#2143">2143</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> closeConnection(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html">Connection</a> connection) {
+<a class="jxr_linenumber" name="2144" href="#2144">2144</a>     <strong class="jxr_keyword">synchronized</strong> (connectionList) {
+<a class="jxr_linenumber" name="2145" href="#2145">2145</a>       <strong class="jxr_keyword">if</strong> (connectionList.remove(connection)) {
+<a class="jxr_linenumber" name="2146" href="#2146">2146</a>         numConnections--;
+<a class="jxr_linenumber" name="2147" href="#2147">2147</a>       }
+<a class="jxr_linenumber" name="2148" href="#2148">2148</a>     }
+<a class="jxr_linenumber" name="2149" href="#2149">2149</a>     connection.close();
+<a class="jxr_linenumber" name="2150" href="#2150">2150</a>   }
+<a class="jxr_linenumber" name="2151" href="#2151">2151</a> 
+<a class="jxr_linenumber" name="2152" href="#2152">2152</a>   Configuration getConf() {
+<a class="jxr_linenumber" name="2153" href="#2153">2153</a>     <strong class="jxr_keyword">return</strong> conf;
+<a class="jxr_linenumber" name="2154" href="#2154">2154</a>   }
+<a class="jxr_linenumber" name="2155" href="#2155">2155</a> 
+<a class="jxr_linenumber" name="2156" href="#2156">2156</a>   <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> Sets the socket buffer size used for responding to RPCs.</em>
+<a class="jxr_linenumber" name="2157" href="#2157">2157</a> <em class="jxr_javadoccomment">   * @param size send size</em>
+<a class="jxr_linenumber" name="2158" href="#2158">2158</a> <em class="jxr_javadoccomment">   */</em>
 <a class="jxr_linenumber" name="2159" href="#2159">2159</a>   @Override
-<a class="jxr_linenumber" name="2160" href="#2160">2160</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isStarted() {
-<a class="jxr_linenumber" name="2161" href="#2161">2161</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.started;
-<a class="jxr_linenumber" name="2162" href="#2162">2162</a>   }
-<a class="jxr_linenumber" name="2163" href="#2163">2163</a> 
-<a class="jxr_linenumber" name="2164" href="#2164">2164</a>   <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> Starts the service.  Must be called before any calls will be handled. */</em>
-<a class="jxr_linenumber" name="2165" href="#2165">2165</a>   @Override
-<a class="jxr_linenumber" name="2166" href="#2166">2166</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> start() {
-<a class="jxr_linenumber" name="2167" href="#2167">2167</a>     <strong class="jxr_keyword">if</strong> (started) <strong class="jxr_keyword">return</strong>;
-<a class="jxr_linenumber" name="2168" href="#2168">2168</a>     authTokenSecretMgr = createSecretManager();
-<a class="jxr_linenumber" name="2169" href="#2169">2169</a>     <strong class="jxr_keyword">if</strong> (authTokenSecretMgr != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="2170" href="#2170">2170</a>       setSecretManager(authTokenSecretMgr);
-<a class="jxr_linenumber" name="2171" href="#2171">2171</a>       authTokenSecretMgr.start();
-<a class="jxr_linenumber" name="2172" href="#2172">2172</a>     }
-<a class="jxr_linenumber" name="2173" href="#2173">2173</a>     <strong class="jxr_keyword">this</strong>.authManager = <strong class="jxr_keyword">new</strong> ServiceAuthorizationManager();
-<a class="jxr_linenumber" name="2174" href="#2174">2174</a>     HBasePolicyProvider.init(conf, authManager);
-<a class="jxr_linenumber" name="2175" href="#2175">2175</a>     responder.start();
-<a class="jxr_linenumber" name="2176" href="#2176">2176</a>     listener.start();
-<a class="jxr_linenumber" name="2177" href="#2177">2177</a>     scheduler.start();
-<a class="jxr_linenumber" name="2178" href="#2178">2178</a>     started = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="2179" href="#2179">2179</a>   }
-<a class="jxr_linenumber" name="2180" href="#2180">2180</a> 
-<a class="jxr_linenumber" name="2181" href="#2181">2181</a>   @Override
-<a class="jxr_linenumber" name="2182" href="#2182">2182</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> refreshAuthManager(PolicyProvider pp) {
-<a class="jxr_linenumber" name="2183" href="#2183">2183</a>     <em class="jxr_comment">// Ignore warnings that this should be accessed in a static way instead of via an instance;</em>
-<a class="jxr_linenumber" name="2184" href="#2184">2184</a>     <em class="jxr_comment">// it'll break if you go via static route.</em>
-<a class="jxr_linenumber" name="2185" href="#2185">2185</a>     <strong class="jxr_keyword">this</strong>.authManager.refresh(<strong class="jxr_keyword">this</strong>.conf, pp);
-<a class="jxr_linenumber" name="2186" href="#2186">2186</a>   }
-<a class="jxr_linenumber" name="2187" href="#2187">2187</a> 
-<a class="jxr_linenumber" name="2188" href="#2188">2188</a>   <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.html">AuthenticationTokenSecretManager</a> createSecretManager() {
-<a class="jxr_linenumber" name="2189" href="#2189">2189</a>     <strong class="jxr_keyword">if</strong> (!isSecurityEnabled) <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="2190" href="#2190">2190</a>     <strong class="jxr_keyword">if</strong> (server == <strong class="jxr_keyword">null</strong>) <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="2191" href="#2191">2191</a>     Configuration conf = server.getConfiguration();
-<a class="jxr_linenumber" name="2192" href="#2192">2192</a>     <strong class="jxr_keyword">long</strong> keyUpdateInterval =
-<a class="jxr_linenumber" name="2193" href="#2193">2193</a>         conf.getLong(<span class="jxr_string">"hbase.auth.key.update.interval"</span>, 24*60*60*1000);
-<a class="jxr_linenumber" name="2194" href="#2194">2194</a>     <strong class="jxr_keyword">long</strong> maxAge =
-<a class="jxr_linenumber" name="2195" href="#2195">2195</a>         conf.getLong(<span class="jxr_string">"hbase.auth.token.max.lifetime"</span>, 7*24*60*60*1000);
-<a class="jxr_linenumber" name="2196" href="#2196">2196</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.html">AuthenticationTokenSecretManager</a>(conf, server.getZooKeeper(),
-<a class="jxr_linenumber" name="2197" href="#2197">2197</a>         server.getServerName().toString(), keyUpdateInterval, maxAge);
-<a class="jxr_linenumber" name="2198" href="#2198">2198</a>   }
-<a class="jxr_linenumber" name="2199" href="#2199">2199</a> 
-<a class="jxr_linenumber" name="2200" href="#2200">2200</a>   <strong class="jxr_keyword">public</strong> SecretManager&lt;? <strong class="jxr_keyword">extends</strong> TokenIdentifier&gt; getSecretManager() {
-<a class="jxr_linenumber" name="2201" href="#2201">2201</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.secretManager;
-<a class="jxr_linenumber" name="2202" href="#2202">2202</a>   }
-<a class="jxr_linenumber" name="2203" href="#2203">2203</a> 
-<a class="jxr_linenumber" name="2204" href="#2204">2204</a>   @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
-<a class="jxr_linenumber" name="2205" href="#2205">2205</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setSecretManager(SecretManager&lt;? <strong class="jxr_keyword">extends</strong> TokenIdentifier&gt; secretManager) {
-<a class="jxr_linenumber" name="2206" href="#2206">2206</a>     <strong class="jxr_keyword">this</strong>.secretManager = (SecretManager&lt;TokenIdentifier&gt;) secretManager;
-<a class="jxr_linenumber" name="2207" href="#2207">2207</a>   }
-<a class="jxr_linenumber" name="2208" href="#2208">2208</a> 
-<a class="jxr_linenumber" name="2209" href="#2209">2209</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2210" href="#2210">2210</a> <em class="jxr_javadoccomment">   * This is a server side method, which is invoked over RPC. On success</em>
-<a class="jxr_linenumber" name="2211" href="#2211">2211</a> <em class="jxr_javadoccomment">   * the return response has protobuf response payload. On failure, the</em>
-<a class="jxr_linenumber" name="2212" href="#2212">2212</a> <em class="jxr_javadoccomment">   * exception name and the stack trace are returned in the protobuf response.</em>
-<a class="jxr_linenumber" name="2213" href="#2213">2213</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2214" href="#2214">2214</a>   @Override
-<a class="jxr_linenumber" name="2215" href="#2215">2215</a>   <strong class="jxr_keyword">public</strong> Pair&lt;Message, CellScanner&gt; call(BlockingService service, MethodDescriptor md,
-<a class="jxr_linenumber" name="2216" href="#2216">2216</a>       Message param, <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html">CellScanner</a> cellScanner, <strong class="jxr_keyword">long</strong> receiveTime, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredRPCHandler.html">MonitoredRPCHandler</a> status)
-<a class="jxr_linenumber" name="2217" href="#2217">2217</a>   <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="2218" href="#2218">2218</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="2219" href="#2219">2219</a>       status.setRPC(md.getName(), <strong class="jxr_keyword">new</strong> Object[]{param}, receiveTime);
-<a class="jxr_linenumber" name="2220" href="#2220">2220</a>       <em class="jxr_comment">// TODO: Review after we add in encoded data blocks.</em>
-<a class="jxr_linenumber" name="2221" href="#2221">2221</a>       status.setRPCPacket(param);
-<a class="jxr_linenumber" name="2222" href="#2222">2222</a>       status.resume(<span class="jxr_string">"Servicing call"</span>);
-<a class="jxr_linenumber" name="2223" href="#2223">2223</a>       <em class="jxr_comment">//get an instance of the method arg type</em>
-<a class="jxr_linenumber" name="2224" href="#2224">2224</a>       <strong class="jxr_keyword">long</strong> startTime = System.currentTimeMillis();
-<a class="jxr_linenumber" name="2225" href="#2225">2225</a>       <a href="../../../../../org/apache/hadoop/hbase/ipc/PayloadCarryingRpcController.html">PayloadCarryingRpcController</a> controller = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/PayloadCarryingRpcController.html">PayloadCarryingRpcController</a>(cellScanner);
-<a class="jxr_linenumber" name="2226" href="#2226">2226</a>       Message result = service.callBlockingMethod(md, controller, param);
-<a class="jxr_linenumber" name="2227" href="#2227">2227</a>       <strong class="jxr_keyword">long</strong> endTime = System.currentTimeMillis();
-<a class="jxr_linenumber" name="2228" href="#2228">2228</a>       <strong class="jxr_keyword">int</strong> processingTime = (<strong class="jxr_keyword">int</strong>) (endTime - startTime);
-<a class="jxr_linenumber" name="2229" href="#2229">2229</a>       <strong class="jxr_keyword">int</strong> qTime = (<strong class="jxr_keyword">int</strong>) (startTime - receiveTime);
-<a class="jxr_linenumber" name="2230" href="#2230">2230</a>       <strong class="jxr_keyword">int</strong> totalTime = (<strong class="jxr_keyword">int</strong>) (endTime - receiveTime);
-<a class="jxr_linenumber" name="2231" href="#2231">2231</a>       <strong class="jxr_keyword">if</strong> (LOG.isTraceEnabled()) {
-<a class="jxr_linenumber" name="2232" href="#2232">2232</a>         LOG.trace(CurCall.get().toString() +
-<a class="jxr_linenumber" name="2233" href="#2233">2233</a>             <span class="jxr_string">", response "</span> + TextFormat.shortDebugString(result) +
-<a class="jxr_linenumber" name="2234" href="#2234">2234</a>             <span class="jxr_string">" queueTime: "</span> + qTime +
-<a class="jxr_linenumber" name="2235" href="#2235">2235</a>             <span class="jxr_string">" processingTime: "</span> + processingTime +
-<a class="jxr_linenumber" name="2236" href="#2236">2236</a>             <span class="jxr_string">" totalTime: "</span> + totalTime);
-<a class="jxr_linenumber" name="2237" href="#2237">2237</a>       }
-<a class="jxr_linenumber" name="2238" href="#2238">2238</a>       <strong class="jxr_keyword">long</strong> requestSize = param.getSerializedSize();
-<a class="jxr_linenumber" name="2239" href="#2239">2239</a>       <strong class="jxr_keyword">long</strong> responseSize = result.getSerializedSize();
-<a class="jxr_linenumber" name="2240" href="#2240">2240</a>       metrics.dequeuedCall(qTime);
-<a class="jxr_linenumber" name="2241" href="#2241">2241</a>       metrics.processedCall(processingTime);
-<a class="jxr_linenumber" name="2242" href="#2242">2242</a>       metrics.totalCall(totalTime);
-<a class="jxr_linenumber" name="2243" href="#2243">2243</a>       metrics.receivedRequest(requestSize);
-<a class="jxr_linenumber" name="2244" href="#2244">2244</a>       metrics.sentResponse(responseSize);
-<a class="jxr_linenumber" name="2245" href="#2245">2245</a>       <em class="jxr_comment">// log any RPC responses that are slower than the configured warn</em>
-<a class="jxr_linenumber" name="2246" href="#2246">2246</a>       <em class="jxr_comment">// response time or larger than configured warning size</em>
-<a class="jxr_linenumber" name="2247" href="#2247">2247</a>       <strong class="jxr_keyword">boolean</strong> tooSlow = (processingTime &gt; warnResponseTime &amp;&amp; warnResponseTime &gt; -1);
-<a class="jxr_linenumber" name="2248" href="#2248">2248</a>       <strong class="jxr_keyword">boolean</strong> tooLarge = (responseSize &gt; warnResponseSize &amp;&amp; warnResponseSize &gt; -1);
-<a class="jxr_linenumber" name="2249" href="#2249">2249</a>       <strong class="jxr_keyword">if</strong> (tooSlow || tooLarge) {
-<a class="jxr_linenumber" name="2250" href="#2250">2250</a>         <em class="jxr_comment">// when tagging, we let TooLarge trump TooSmall to keep output simple</em>
-<a class="jxr_linenumber" name="2251" href="#2251">2251</a>         <em class="jxr_comment">// note that large responses will often also be slow.</em>
-<a class="jxr_linenumber" name="2252" href="#2252">2252</a>         logResponse(<strong class="jxr_keyword">new</strong> Object[]{param},
-<a class="jxr_linenumber" name="2253" href="#2253">2253</a>             md.getName(), md.getName() + <span class="jxr_string">"("</span> + param.getClass().getName() + <span class="jxr_string">")"</span>,
-<a class="jxr_linenumber" name="2254" href="#2254">2254</a>             (tooLarge ? <span class="jxr_string">"TooLarge"</span> : <span class="jxr_string">"TooSlow"</span>),
-<a class="jxr_linenumber" name="2255" href="#2255">2255</a>             status.getClient(), startTime, processingTime, qTime,
-<a class="jxr_linenumber" name="2256" href="#2256">2256</a>             responseSize);
-<a class="jxr_linenumber" name="2257" href="#2257">2257</a>       }
-<a class="jxr_linenumber" name="2258" href="#2258">2258</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> Pair&lt;Message, CellScanner&gt;(result, controller.cellScanner());
-<a class="jxr_linenumber" name="2259" href="#2259">2259</a>     } <strong class="jxr_keyword">catch</strong> (Throwable e) {
-<a class="jxr_linenumber" name="2260" href="#2260">2260</a>       <em class="jxr_comment">// The above callBlockingMethod will always return a SE.  Strip the SE wrapper before</em>
-<a class="jxr_linenumber" name="2261" href="#2261">2261</a>       <em class="jxr_comment">// putting it on the wire.  Its needed to adhere to the pb Service Interface but we don't</em>
-<a class="jxr_linenumber" name="2262" href="#2262">2262</a>       <em class="jxr_comment">// need to pass it over the wire.</em>
-<a class="jxr_linenumber" name="2263" href="#2263">2263</a>       <strong class="jxr_keyword">if</strong> (e instanceof ServiceException) e = e.getCause();
-<a class="jxr_linenumber" name="2264" href="#2264">2264</a> 
-<a class="jxr_linenumber" name="2265" href="#2265">2265</a>       <em class="jxr_comment">// increment the number of requests that were exceptions.</em>
-<a class="jxr_linenumber" name="2266" href="#2266">2266</a>       metrics.exception(e);
+<a class="jxr_linenumber" name="2160" href="#2160">2160</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setSocketSendBufSize(<strong class="jxr_keyword">int</strong> size) { <strong class="jxr_keyword">this</strong>.socketSendBufferSize = size; }
+<a class="jxr_linenumber" name="2161" href="#2161">2161</a> 
+<a class="jxr_linenumber" name="2162" href="#2162">2162</a>   @Override
+<a class="jxr_linenumber" name="2163" href="#2163">2163</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isStarted() {
+<a class="jxr_linenumber" name="2164" href="#2164">2164</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.started;
+<a class="jxr_linenumber" name="2165" href="#2165">2165</a>   }
+<a class="jxr_linenumber" name="2166" href="#2166">2166</a> 
+<a class="jxr_linenumber" name="2167" href="#2167">2167</a>   <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> Starts the service.  Must be called before any calls will be handled. */</em>
+<a class="jxr_linenumber" name="2168" href="#2168">2168</a>   @Override
+<a class="jxr_linenumber" name="2169" href="#2169">2169</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> start() {
+<a class="jxr_linenumber" name="2170" href="#2170">2170</a>     <strong class="jxr_keyword">if</strong> (started) <strong class="jxr_keyword">return</strong>;
+<a class="jxr_linenumber" name="2171" href="#2171">2171</a>     authTokenSecretMgr = createSecretManager();
+<a class="jxr_linenumber" name="2172" href="#2172">2172</a>     <strong class="jxr_keyword">if</strong> (authTokenSecretMgr != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="2173" href="#2173">2173</a>       setSecretManager(authTokenSecretMgr);
+<a class="jxr_linenumber" name="2174" href="#2174">2174</a>       authTokenSecretMgr.start();
+<a class="jxr_linenumber" name="2175" href="#2175">2175</a>     }
+<a class="jxr_linenumber" name="2176" href="#2176">2176</a>     <strong class="jxr_keyword">this</strong>.authManager = <strong class="jxr_keyword">new</strong> ServiceAuthorizationManager();
+<a class="jxr_linenumber" name="2177" href="#2177">2177</a>     HBasePolicyProvider.init(conf, authManager);
+<a class="jxr_linenumber" name="2178" href="#2178">2178</a>     responder.start();
+<a class="jxr_linenumber" name="2179" href="#2179">2179</a>     listener.start();
+<a class="jxr_linenumber" name="2180" href="#2180">2180</a>     scheduler.start();
+<a class="jxr_linenumber" name="2181" href="#2181">2181</a>     started = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="2182" href="#2182">2182</a>   }
+<a class="jxr_linenumber" name="2183" href="#2183">2183</a> 
+<a class="jxr_linenumber" name="2184" href="#2184">2184</a>   @Override
+<a class="jxr_linenumber" name="2185" href="#2185">2185</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> refreshAuthManager(PolicyProvider pp) {
+<a class="jxr_linenumber" name="2186" href="#2186">2186</a>     <em class="jxr_comment">// Ignore warnings that this should be accessed in a static way instead of via an instance;</em>
+<a class="jxr_linenumber" name="2187" href="#2187">2187</a>     <em class="jxr_comment">// it'll break if you go via static route.</em>
+<a class="jxr_linenumber" name="2188" href="#2188">2188</a>     <strong class="jxr_keyword">this</strong>.authManager.refresh(<strong class="jxr_keyword">this</strong>.conf, pp);
+<a class="jxr_linenumber" name="2189" href="#2189">2189</a>   }
+<a class="jxr_linenumber" name="2190" href="#2190">2190</a> 
+<a class="jxr_linenumber" name="2191" href="#2191">2191</a>   <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.html">AuthenticationTokenSecretManager</a> createSecretManager() {
+<a class="jxr_linenumber" name="2192" href="#2192">2192</a>     <strong class="jxr_keyword">if</strong> (!isSecurityEnabled) <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="2193" href="#2193">2193</a>     <strong class="jxr_keyword">if</strong> (server == <strong class="jxr_keyword">null</strong>) <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="2194" href="#2194">2194</a>     Configuration conf = server.getConfiguration();
+<a class="jxr_linenumber" name="2195" href="#2195">2195</a>     <strong class="jxr_keyword">long</strong> keyUpdateInterval =
+<a class="jxr_linenumber" name="2196" href="#2196">2196</a>         conf.getLong(<span class="jxr_string">"hbase.auth.key.update.interval"</span>, 24*60*60*1000);
+<a class="jxr_linenumber" name="2197" href="#2197">2197</a>     <strong class="jxr_keyword">long</strong> maxAge =
+<a class="jxr_linenumber" name="2198" href="#2198">2198</a>         conf.getLong(<span class="jxr_string">"hbase.auth.token.max.lifetime"</span>, 7*24*60*60*1000);
+<a class="jxr_linenumber" name="2199" href="#2199">2199</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.html">AuthenticationTokenSecretManager</a>(conf, server.getZooKeeper(),
+<a class="jxr_linenumber" name="2200" href="#2200">2200</a>         server.getServerName().toString(), keyUpdateInterval, maxAge);
+<a class="jxr_linenumber" name="2201" href="#2201">2201</a>   }
+<a class="jxr_linenumber" name="2202" href="#2202">2202</a> 
+<a class="jxr_linenumber" name="2203" href="#2203">2203</a>   <strong class="jxr_keyword">public</strong> SecretManager&lt;? <strong class="jxr_keyword">extends</strong> TokenIdentifier&gt; getSecretManager() {
+<a class="jxr_linenumber" name="2204" href="#2204">2204</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.secretManager;
+<a class="jxr_linenumber" name="2205" href="#2205">2205</a>   }
+<a class="jxr_linenumber" name="2206" href="#2206">2206</a> 
+<a class="jxr_linenumber" name="2207" href="#2207">2207</a>   @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
+<a class="jxr_linenumber" name="2208" href="#2208">2208</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setSecretManager(SecretManager&lt;? <strong class="jxr_keyword">extends</strong> TokenIdentifier&gt; secretManager) {
+<a class="jxr_linenumber" name="2209" href="#2209">2209</a>     <strong class="jxr_keyword">this</strong>.secretManager = (SecretManager&lt;TokenIdentifier&gt;) secretManager;
+<a class="jxr_linenumber" name="2210" href="#2210">2210</a>   }
+<a class="jxr_linenumber" name="2211" href="#2211">2211</a> 
+<a class="jxr_linenumber" name="2212" href="#2212">2212</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="2213" href="#2213">2213</a> <em class="jxr_javadoccomment">   * This is a server side method, which is invoked over RPC. On success</em>
+<a class="jxr_linenumber" name="2214" href="#2214">2214</a> <em class="jxr_javadoccomment">   * the return response has protobuf response payload. On failure, the</em>
+<a class="jxr_linenumber" name="2215" href="#2215">2215</a> <em class="jxr_javadoccomment">   * exception name and the stack trace are returned in the protobuf response.</em>
+<a class="jxr_linenumber" name="2216" href="#2216">2216</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="2217" href="#2217">2217</a>   @Override
+<a class="jxr_linenumber" name="2218" href="#2218">2218</a>   <strong class="jxr_keyword">public</strong> Pair&lt;Message, CellScanner&gt; call(BlockingService service, MethodDescriptor md,
+<a class="jxr_linenumber" name="2219" href="#2219">2219</a>       Message param, <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html">CellScanner</a> cellScanner, <strong class="jxr_keyword">long</strong> receiveTime, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredRPCHandler.html">MonitoredRPCHandler</a> status)
+<a class="jxr_linenumber" name="2220" href="#2220">2220</a>   <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="2221" href="#2221">2221</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="2222" href="#2222">2222</a>       status.setRPC(md.getName(), <strong class="jxr_keyword">new</strong> Object[]{param}, receiveTime);
+<a class="jxr_linenumber" name="2223" href="#2223">2223</a>       <em class="jxr_comment">// TODO: Review after we add in encoded data blocks.</em>
+<a class="jxr_linenumber" name="2224" href="#2224">2224</a>       status.setRPCPacket(param);
+<a class="jxr_linenumber" name="2225" href="#2225">2225</a>       status.resume(<span class="jxr_string">"Servicing call"</span>);
+<a class="jxr_linenumber" name="2226" href="#2226">2226</a>       <em class="jxr_comment">//get an instance of the method arg type</em>
+<a class="jxr_linenumber" name="2227" href="#2227">2227</a>       <strong class="jxr_keyword">long</strong> startTime = System.currentTimeMillis();
+<a class="jxr_linenumber" name="2228" href="#2228">2228</a>       <a href="../../../../../org/apache/hadoop/hbase/ipc/PayloadCarryingRpcController.html">PayloadCarryingRpcController</a> controller = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/PayloadCarryingRpcController.html">PayloadCarryingRpcController</a>(cellScanner);
+<a class="jxr_linenumber" name="2229" href="#2229">2229</a>       Message result = service.callBlockingMethod(md, controller, param);
+<a class="jxr_linenumber" name="2230" href="#2230">2230</a>       <strong class="jxr_keyword">long</strong> endTime = System.currentTimeMillis();
+<a class="jxr_linenumber" name="2231" href="#2231">2231</a>       <strong class="jxr_keyword">int</strong> processingTime = (<strong class="jxr_keyword">int</strong>) (endTime - startTime);
+<a class="jxr_linenumber" name="2232" href="#2232">2232</a>       <strong class="jxr_keyword">int</strong> qTime = (<strong class="jxr_keyword">int</strong>) (startTime - receiveTime);
+<a class="jxr_linenumber" name="2233" href="#2233">2233</a>       <strong class="jxr_keyword">int</strong> totalTime = (<strong class="jxr_keyword">int</strong>) (endTime - receiveTime);
+<a class="jxr_linenumber" name="2234" href="#2234">2234</a>       <strong class="jxr_keyword">if</strong> (LOG.isTraceEnabled()) {
+<a class="jxr_linenumber" name="2235" href="#2235">2235</a>         LOG.trace(CurCall.get().toString() +
+<a class="jxr_linenumber" name="2236" href="#2236">2236</a>             <span class="jxr_string">", response "</span> + TextFormat.shortDebugString(result) +
+<a class="jxr_linenumber" name="2237" href="#2237">2237</a>             <span class="jxr_string">" queueTime: "</span> + qTime +
+<a class="jxr_linenumber" name="2238" href="#2238">2238</a>             <span class="jxr_string">" processingTime: "</span> + processingTime +
+<a class="jxr_linenumber" name="2239" href="#2239">2239</a>             <span class="jxr_string">" totalTime: "</span> + totalTime);
+<a class="jxr_linenumber" name="2240" href="#2240">2240</a>       }
+<a class="jxr_linenumber" name="2241" href="#2241">2241</a>       <strong class="jxr_keyword">long</strong> requestSize = param.getSerializedSize();
+<a class="jxr_linenumber" name="2242" href="#2242">2242</a>       <strong class="jxr_keyword">long</strong> responseSize = result.getSerializedSize();
+<a class="jxr_linenumber" name="2243" href="#2243">2243</a>       metrics.dequeuedCall(qTime);
+<a class="jxr_linenumber" name="2244" href="#2244">2244</a>       metrics.processedCall(processingTime);
+<a class="jxr_linenumber" name="2245" href="#2245">2245</a>       metrics.totalCall(totalTime);
+<a class="jxr_linenumber" name="2246" href="#2246">2246</a>       metrics.receivedRequest(requestSize);
+<a class="jxr_linenumber" name="2247" href="#2247">2247</a>       metrics.sentResponse(responseSize);
+<a class="jxr_linenumber" name="2248" href="#2248">2248</a>       <em class="jxr_comment">// log any RPC responses that are slower than the configured warn</em>
+<a class="jxr_linenumber" name="2249" href="#2249">2249</a>       <em class="jxr_comment">// response time or larger than configured warning size</em>
+<a class="jxr_linenumber" name="2250" href="#2250">2250</a>       <strong class="jxr_keyword">boolean</strong> tooSlow = (processingTime &gt; warnResponseTime &amp;&amp; warnResponseTime &gt; -1);
+<a class="jxr_linenumber" name="2251" href="#2251">2251</a>       <strong class="jxr_keyword">boolean</strong> tooLarge = (responseSize &gt; warnResponseSize &amp;&amp; warnResponseSize &gt; -1);
+<a class="jxr_linenumber" name="2252" href="#2252">2252</a>       <strong class="jxr_keyword">if</strong> (tooSlow || tooLarge) {
+<a class="jxr_linenumber" name="2253" href="#2253">2253</a>         <em class="jxr_comment">// when tagging, we let TooLarge trump TooSmall to keep output simple</em>
+<a class="jxr_linenumber" name="2254" href="#2254">2254</a>         <em class="jxr_comment">// note that large responses will often also be slow.</em>
+<a class="jxr_linenumber" name="2255" href="#2255">2255</a>         logResponse(<strong class="jxr_keyword">new</strong> Object[]{param},
+<a class="jxr_linenumber" name="2256" href="#2256">2256</a>             md.getName(), md.getName() + <span class="jxr_string">"("</span> + param.getClass().getName() + <span class="jxr_string">")"</span>,
+<a class="jxr_linenumber" name="2257" href="#2257">2257</a>             (tooLarge ? <span class="jxr_string">"TooLarge"</span> : <span class="jxr_string">"TooSlow"</span>),
+<a class="jxr_linenumber" name="2258" href="#2258">2258</a>             status.getClient(), startTime, processingTime, qTime,
+<a class="jxr_linenumber" name="2259" href="#2259">2259</a>             responseSize);
+<a class="jxr_linenumber" name="2260" href="#2260">2260</a>       }
+<a class="jxr_linenumber" name="2261" href="#2261">2261</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> Pair&lt;Message, CellScanner&gt;(result, controller.cellScanner());
+<a class="jxr_linenumber" name="2262" href="#2262">2262</a>     } <strong class="jxr_keyword">catch</strong> (Throwable e) {
+<a class="jxr_linenumber" name="2263" href="#2263">2263</a>       <em class="jxr_comment">// The above callBlockingMethod will always return a SE.  Strip the SE wrapper before</em>
+<a class="jxr_linenumber" name="2264" href="#2264">2264</a>       <em class="jxr_comment">// putting it on the wire.  Its needed to adhere to the pb Service Interface but we don't</em>
+<a class="jxr_linenumber" name="2265" href="#2265">2265</a>       <em class="jxr_comment">// need to pass it over the wire.</em>
+<a class="jxr_linenumber" name="2266" href="#2266">2266</a>       <strong class="jxr_keyword">if</strong> (e instanceof ServiceException) e = e.getCause();
 <a class="jxr_linenumber" name="2267" href="#2267">2267</a> 
-<a class="jxr_linenumber" name="2268" href="#2268">2268</a>       <strong class="jxr_keyword">if</strong> (e instanceof LinkageError) <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> DoNotRetryIOException(e);
-<a class="jxr_linenumber" name="2269" href="#2269">2269</a>       <strong class="jxr_keyword">if</strong> (e instanceof IOException) <strong class="jxr_keyword">throw</strong> (IOException)e;
-<a class="jxr_linenumber" name="2270" href="#2270">2270</a>       LOG.error(<span class="jxr_string">"Unexpected throwable object "</span>, e);
-<a class="jxr_linenumber" name="2271" href="#2271">2271</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(e.getMessage(), e);
-<a class="jxr_linenumber" name="2272" href="#2272">2272</a>     }
-<a class="jxr_linenumber" name="2273" href="#2273">2273</a>   }
-<a class="jxr_linenumber" name="2274" href="#2274">2274</a> 
-<a class="jxr_linenumber" name="2275" href="#2275">2275</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2276" href="#2276">2276</a> <em class="jxr_javadoccomment">   * Logs an RPC response to the LOG file, producing valid JSON objects for</em>
-<a class="jxr_linenumber" name="2277" href="#2277">2277</a> <em class="jxr_javadoccomment">   * client Operations.</em>
-<a class="jxr_linenumber" name="2278" href="#2278">2278</a> <em class="jxr_javadoccomment">   * @param params The parameters received in the call.</em>
-<a class="jxr_linenumber" name="2279" href="#2279">2279</a> <em class="jxr_javadoccomment">   * @param methodName The name of the method invoked</em>
-<a class="jxr_linenumber" name="2280" href="#2280">2280</a> <em class="jxr_javadoccomment">   * @param call The string representation of the call</em>
-<a class="jxr_linenumber" name="2281" href="#2281">2281</a> <em class="jxr_javadoccomment">   * @param tag  The tag that will be used to indicate this event in the log.</em>
-<a class="jxr_linenumber" name="2282" href="#2282">2282</a> <em class="jxr_javadoccomment">   * @param clientAddress   The address of the client who made this call.</em>
-<a class="jxr_linenumber" name="2283" href="#2283">2283</a> <em class="jxr_javadoccomment">   * @param startTime       The time that the call was initiated, in ms.</em>
-<a class="jxr_linenumber" name="2284" href="#2284">2284</a> <em class="jxr_javadoccomment">   * @param processingTime  The duration that the call took to run, in ms.</em>
-<a class="jxr_linenumber" name="2285" href="#2285">2285</a> <em class="jxr_javadoccomment">   * @param qTime           The duration that the call spent on the queue</em>
-<a class="jxr_linenumber" name="2286" href="#2286">2286</a> <em class="jxr_javadoccomment">   *                        prior to being initiated, in ms.</em>
-<a class="jxr_linenumber" name="2287" href="#2287">2287</a> <em class="jxr_javadoccomment">   * @param responseSize    The size in bytes of the response buffer.</em>
-<a class="jxr_linenumber" name="2288" href="#2288">2288</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2289" href="#2289">2289</a>   <strong class="jxr_keyword">void</strong> logResponse(Object[] params, String methodName, String call, String tag,
-<a class="jxr_linenumber" name="2290" href="#2290">2290</a>       String clientAddress, <strong class="jxr_keyword">long</strong> startTime, <strong class="jxr_keyword">int</strong> processingTime, <strong class="jxr_keyword">int</strong> qTime,
-<a class="jxr_linenumber" name="2291" href="#2291">2291</a>       <strong class="jxr_keyword">long</strong> responseSize)
-<a class="jxr_linenumber" name="2292" href="#2292">2292</a>           <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="2293" href="#2293">2293</a>     <em class="jxr_comment">// base information that is reported regardless of type of call</em>
-<a class="jxr_linenumber" name="2294" href="#2294">2294</a>     Map&lt;String, Object&gt; responseInfo = <strong class="jxr_keyword">new</strong> HashMap&lt;String, Object&gt;();
-<a class="jxr_linenumber" name="2295" href="#2295">2295</a>     responseInfo.put(<span class="jxr_string">"starttimems"</span>, startTime);
-<a class="jxr_linenumber" name="2296" href="#2296">2296</a>     responseInfo.put(<span class="jxr_string">"processingtimems"</span>, processingTime);
-<a class="jxr_linenumber" name="2297" href="#2297">2297</a>     responseInfo.put(<span class="jxr_string">"queuetimems"</span>, qTime);
-<a class="jxr_linenumber" name="2298" href="#2298">2298</a>     responseInfo.put(<span class="jxr_string">"responsesize"</span>, responseSize);
-<a class="jxr_linenumber" name="2299" href="#2299">2299</a>     responseInfo.put(<span class="jxr_string">"client"</span>, clientAddress);
-<a class="jxr_linenumber" name="2300" href="#2300">2300</a>     responseInfo.put(<span class="jxr_string">"class"</span>, server == <strong class="jxr_keyword">null</strong>? <span class="jxr_string">""</span>: server.getClass().getSimpleName());
-<a class="jxr_linenumber" name="2301" href="#2301">2301</a>     responseInfo.put(<span class="jxr_string">"method"</span>, methodName);
-<a class="jxr_linenumber" name="2302" href="#2302">2302</a>     <strong class="jxr_keyword">if</strong> (params.length == 2 &amp;&amp; server instanceof HRegionServer &amp;&amp;
-<a class="jxr_linenumber" name="2303" href="#2303">2303</a>         params[0] instanceof byte[] &amp;&amp;
-<a class="jxr_linenumber" name="2304" href="#2304">2304</a>         params[1] instanceof <a href="../../../../../org/apache/hadoop/hbase/client/Operation.html">Operation</a>) {
-<a class="jxr_linenumber" name="2305" href="#2305">2305</a>       <em class="jxr_comment">// if the slow process is a query, we want to log its table as well</em>
-<a class="jxr_linenumber" name="2306" href="#2306">2306</a>       <em class="jxr_comment">// as its own fingerprint</em>
-<a class="jxr_linenumber" name="2307" href="#2307">2307</a>       <a href="../../../../../org/apache/hadoop/hbase/TableName.html">TableName</a> tableName = TableName.valueOf(
-<a class="jxr_linenumber" name="2308" href="#2308">2308</a>           HRegionInfo.parseRegionName((byte[]) params[0])[0]);
-<a class="jxr_linenumber" name="2309" href="#2309">2309</a>       responseInfo.put(<span class="jxr_string">"table"</span>, tableName.getNameAsString());
-<a class="jxr_linenumber" name="2310" href="#2310">2310</a>       <em class="jxr_comment">// annotate the response map with operation details</em>
-<a class="jxr_linenumber" name="2311" href="#2311">2311</a>       responseInfo.putAll(((Operation) params[1]).toMap());
-<a class="jxr_linenumber" name="2312" href="#2312">2312</a>       <em class="jxr_comment">// report to the log file</em>
-<a class="jxr_linenumber" name="2313" href="#2313">2313</a>       LOG.warn(<span class="jxr_string">"(operation"</span> + tag + <span class="jxr_string">"): "</span> +
-<a class="jxr_linenumber" name="2314" href="#2314">2314</a>                MAPPER.writeValueAsString(responseInfo));
-<a class="jxr_linenumber" name="2315" href="#2315">2315</a>     } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (params.length == 1 &amp;&amp; server instanceof HRegionServer &amp;&amp;
-<a class="jxr_linenumber" name="2316" href="#2316">2316</a>         params[0] instanceof <a href="../../../../../org/apache/hadoop/hbase/client/Operation.html">Operation</a>) {
-<a class="jxr_linenumber" name="2317" href="#2317">2317</a>       <em class="jxr_comment">// annotate the response map with operation details</em>
-<a class="jxr_linenumber" name="2318" href="#2318">2318</a>       responseInfo.putAll(((Operation) params[0]).toMap());
-<a class="jxr_linenumber" name="2319" href="#2319">2319</a>       <em class="jxr_comment">// report to the log file</em>
-<a class="jxr_linenumber" name="2320" href="#2320">2320</a>       LOG.warn(<span class="jxr_string">"(operation"</span> + tag + <span class="jxr_string">"): "</span> +
-<a class="jxr_linenumber" name="2321" href="#2321">2321</a>                MAPPER.writeValueAsString(responseInfo));
-<a class="jxr_linenumber" name="2322" href="#2322">2322</a>     } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="2323" href="#2323">2323</a>       <em class="jxr_comment">// can't get JSON details, so just report call.toString() along with</em>
-<a class="jxr_linenumber" name="2324" href="#2324">2324</a>       <em class="jxr_comment">// a more generic tag.</em>
-<a class="jxr_linenumber" name="2325" href="#2325">2325</a>       responseInfo.put(<span class="jxr_string">"call"</span>, call);
-<a class="jxr_linenumber" name="2326" href="#2326">2326</a>       LOG.warn(<span class="jxr_string">"(response"</span> + tag + <span class="jxr_string">"): "</span> + MAPPER.writeValueAsString(responseInfo));
-<a class="jxr_linenumber" name="2327" href="#2327">2327</a>     }
-<a class="jxr_linenumber" name="2328" href="#2328">2328</a>   }
-<a class="jxr_linenumber" name="2329" href="#2329">2329</a> 
-<a class="jxr_linenumber" name="2330" href="#2330">2330</a>   <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> Stops the service.  No new calls will be handled after this is called. */</em>
-<a class="jxr_linenumber" name="2331" href="#2331">2331</a>   @Override
-<a class="jxr_linenumber" name="2332" href="#2332">2332</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> stop() {
-<a class="jxr_linenumber" name="2333" href="#2333">2333</a>     LOG.info(<span class="jxr_string">"Stopping server on "</span> + port);
-<a class="jxr_linenumber" name="2334" href="#2334">2334</a>     running = false;
-<a class="jxr_linenumber" name="2335" href="#2335">2335</a>     <strong class="jxr_keyword">if</strong> (authTokenSecretMgr != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="2336" href="#2336">2336</a>       authTokenSecretMgr.stop();
-<a class="jxr_linenumber" name="2337" href="#2337">2337</a>       authTokenSecretMgr = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="2338" href="#2338">2338</a>     }
-<a class="jxr_linenumber" name="2339" href="#2339">2339</a>     listener.interrupt();
-<a class="jxr_linenumber" name="2340" href="#2340">2340</a>     listener.doStop();
-<a class="jxr_linenumber" name="2341" href="#2341">2341</a>     responder.interrupt();
-<a class="jxr_linenumber" name="2342" href="#2342">2342</a>     scheduler.stop();
-<a class="jxr_linenumber" name="2343" href="#2343">2343</a>     notifyAll();
-<a class="jxr_linenumber" name="2344" href="#2344">2344</a>   }
-<a class="jxr_linenumber" name="2345" href="#2345">2345</a> 
-<a class="jxr_linenumber" name="2346" href="#2346">2346</a>   <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> Wait for the server to be stopped.</em>
-<a class="jxr_linenumber" name="2347" href="#2347">2347</a> <em class="jxr_javadoccomment">   * Does not wait for all subthreads to finish.</em>
-<a class="jxr_linenumber" name="2348" href="#2348">2348</a> <em class="jxr_javadoccomment">   *  See {@link #stop()}.</em>
-<a class="jxr_linenumber" name="2349" href="#2349">2349</a> <em class="jxr_javadoccomment">   * @throws InterruptedException e</em>
-<a class="jxr_linenumber" name="2350" href="#2350">2350</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2351" href="#2351">2351</a>   @Override
-<a class="jxr_linenumber" name="2352" href="#2352">2352</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> join() <strong class="jxr_keyword">throws</strong> InterruptedException {
-<a class="jxr_linenumber" name="2353" href="#2353">2353</a>     <strong class="jxr_keyword">while</strong> (running) {
-<a class="jxr_linenumber" name="2354" href="#2354">2354</a>       wait();
-<a class="jxr_linenumber" name="2355" href="#2355">2355</a>     }
-<a class="jxr_linenumber" name="2356" href="#2356">2356</a>   }
-<a class="jxr_linenumber" name="2357" href="#2357">2357</a> 
-<a class="jxr_linenumber" name="2358" href="#2358">2358</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2359" href="#2359">2359</a> <em class="jxr_javadoccomment">   * Return the socket (ip+port) on which the RPC server is listening to. May return null if</em>
-<a class="jxr_linenumber" name="2360" href="#2360">2360</a> <em class="jxr_javadoccomment">   * the listener channel is closed.</em>
-<a class="jxr_linenumber" name="2361" href="#2361">2361</a> <em class="jxr_javadoccomment">   * @return the socket (ip+port) on which the RPC server is listening to, or null if this</em>
-<a class="jxr_linenumber" name="2362" href="#2362">2362</a> <em class="jxr_javadoccomment">   * information cannot be determined</em>
-<a class="jxr_linenumber" name="2363" href="#2363">2363</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2364" href="#2364">2364</a>   @Override
-<a class="jxr_linenumber" name="2365" href="#2365">2365</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> InetSocketAddress getListenerAddress() {
-<a class="jxr_linenumber" name="2366" href="#2366">2366</a>     <strong class="jxr_keyword">if</strong> (listener == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="2367" href="#2367">2367</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="2368" href="#2368">2368</a>     }
-<a class="jxr_linenumber" name="2369" href="#2369">2369</a>     <strong class="jxr_keyword">return</strong> listener.getAddress();
-<a class="jxr_linenumber" name="2370" href="#2370">2370</a>   }
-<a class="jxr_linenumber" name="2371" href="#2371">2371</a> 
-<a class="jxr_linenumber" name="2372" href="#2372">2372</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2373" href="#2373">2373</a> <em class="jxr_javadoccomment">   * Set the handler for calling out of RPC for error conditions.</em>
-<a class="jxr_linenumber" name="2374" href="#2374">2374</a> <em class="jxr_javadoccomment">   * @param handler the handler implementation</em>
-<a class="jxr_linenumber" name="2375" href="#2375">2375</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2376" href="#2376">2376</a>   @Override
-<a class="jxr_linenumber" name="2377" href="#2377">2377</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setErrorHandler(<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHandler.html">HBaseRPCErrorHandler</a> handler) {
-<a class="jxr_linenumber" name="2378" href="#2378">2378</a>     <strong class="jxr_keyword">this</strong>.errorHandler = handler;
-<a class="jxr_linenumber" name="2379" href="#2379">2379</a>   }
-<a class="jxr_linenumber" name="2380" href="#2380">2380</a> 
-<a class="jxr_linenumber" name="2381" href="#2381">2381</a>   @Override
-<a class="jxr_linenumber" name="2382" href="#2382">2382</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHandler.html">HBaseRPCErrorHandler</a> getErrorHandler() {
-<a class="jxr_linenumber" name="2383" href="#2383">2383</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.errorHandler;
-<a class="jxr_linenumber" name="2384" href="#2384">2384</a>   }
-<a class="jxr_linenumber" name="2385" href="#2385">2385</a> 
-<a class="jxr_linenumber" name="2386" href="#2386">2386</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2387" href="#2387">2387</a> <em class="jxr_javadoccomment">   * Returns the metrics instance for reporting RPC call statistics</em>
-<a class="jxr_linenumber" name="2388" href="#2388">2388</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2389" href="#2389">2389</a>   @Override
-<a class="jxr_linenumber" name="2390" href="#2390">2390</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html">MetricsHBaseServer</a> getMetrics() {
-<a class="jxr_linenumber" name="2391" href="#2391">2391</a>     <strong class="jxr_keyword">return</strong> metrics;
-<a class="jxr_linenumber" name="2392" href="#2392">2392</a>   }
-<a class="jxr_linenumber" name="2393" href="#2393">2393</a> 
-<a class="jxr_linenumber" name="2394" href="#2394">2394</a>   @Override
-<a class="jxr_linenumber" name="2395" href="#2395">2395</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> addCallSize(<strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> diff) {
-<a class="jxr_linenumber" name="2396" href="#2396">2396</a>     <strong class="jxr_keyword">this</strong>.callQueueSize.add(diff);
-<a class="jxr_linenumber" name="2397" href="#2397">2397</a>   }
-<a class="jxr_linenumber" name="2398" href="#2398">2398</a> 
-<a class="jxr_linenumber" name="2399" href="#2399">2399</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2400" href="#2400">2400</a> <em class="jxr_javadoccomment">   * Authorize the incoming client connection.</em>
-<a class="jxr_linenumber" name="2401" href="#2401">2401</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="2402" href="#2402">2402</a> <em class="jxr_javadoccomment">   * @param user client user</em>
-<a class="jxr_linenumber" name="2403" href="#2403">2403</a> <em class="jxr_javadoccomment">   * @param connection incoming connection</em>
-<a class="jxr_linenumber" name="2404" href="#2404">2404</a> <em class="jxr_javadoccomment">   * @param addr InetAddress of incoming connection</em>
-<a class="jxr_linenumber" name="2405" href="#2405">2405</a> <em class="jxr_javadoccomment">   * @throws org.apache.hadoop.security.authorize.AuthorizationException</em>
-<a class="jxr_linenumber" name="2406" href="#2406">2406</a> <em class="jxr_javadoccomment">   *         when the client isn't authorized to talk the protocol</em>
-<a class="jxr_linenumber" name="2407" href="#2407">2407</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2408" href="#2408">2408</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> authorize(UserGroupInformation user, ConnectionHeader connection,
-<a class="jxr_linenumber" name="2409" href="#2409">2409</a>       InetAddress addr)
-<a class="jxr_linenumber" name="2410" href="#2410">2410</a>   <strong class="jxr_keyword">throws</strong> AuthorizationException {
-<a class="jxr_linenumber" name="2411" href="#2411">2411</a>     <strong class="jxr_keyword">if</strong> (authorize) {
-<a class="jxr_linenumber" name="2412" href="#2412">2412</a>       Class&lt;?&gt; c = getServiceInterface(services, connection.getServiceName());
-<a class="jxr_linenumber" name="2413" href="#2413">2413</a>       <strong class="jxr_keyword">this</strong>.authManager.authorize(user != <strong class="jxr_keyword">null</strong> ? user : <strong class="jxr_keyword">null</strong>, c, getConf(), addr);
-<a class="jxr_linenumber" name="2414" href="#2414">2414</a>     }
-<a class="jxr_linenumber" name="2415" href="#2415">2415</a>   }
-<a class="jxr_linenumber" name="2416" href="#2416">2416</a> 
-<a class="jxr_linenumber" name="2417" href="#2417">2417</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2418" href="#2418">2418</a> <em class="jxr_javadoccomment">   * When the read or write buffer size is larger than this limit, i/o will be</em>
-<a class="jxr_linenumber" name="2419" href="#2419">2419</a> <em class="jxr_javadoccomment">   * done in chunks of this size. Most RPC requests and responses would be</em>
-<a class="jxr_linenumber" name="2420" href="#2420">2420</a> <em class="jxr_javadoccomment">   * be smaller.</em>
-<a class="jxr_linenumber" name="2421" href="#2421">2421</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2422" href="#2422">2422</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">int</strong> NIO_BUFFER_LIMIT = 64 * 1024; <em class="jxr_comment">//should not be more than 64KB.</em>
-<a class="jxr_linenumber" name="2423" href="#2423">2423</a> 
-<a class="jxr_linenumber" name="2424" href="#2424">2424</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2425" href="#2425">2425</a> <em class="jxr_javadoccomment">   * This is a wrapper around {@link java.nio.channels.WritableByteChannel#write(java.nio.ByteBuffer)}.</em>
-<a class="jxr_linenumber" name="2426" href="#2426">2426</a> <em class="jxr_javadoccomment">   * If the amount of data is large, it writes to channel in smaller chunks.</em>
-<a class="jxr_linenumber" name="2427" href="#2427">2427</a> <em class="jxr_javadoccomment">   * This is to avoid jdk from creating many direct buffers as the size of</em>
-<a class="jxr_linenumber" name="2428" href="#2428">2428</a> <em class="jxr_javadoccomment">   * buffer increases. This also minimizes extra copies in NIO layer</em>
-<a class="jxr_linenumber" name="2429" href="#2429">2429</a> <em class="jxr_javadoccomment">   * as a result of multiple write operations required to write a large</em>
-<a class="jxr_linenumber" name="2430" href="#2430">2430</a> <em class="jxr_javadoccomment">   * buffer.</em>
-<a class="jxr_linenumber" name="2431" href="#2431">2431</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="2432" href="#2432">2432</a> <em class="jxr_javadoccomment">   * @param channel writable byte channel to write to</em>
-<a class="jxr_linenumber" name="2433" href="#2433">2433</a> <em class="jxr_javadoccomment">   * @param bufferChain Chain of buffers to write</em>
-<a class="jxr_linenumber" name="2434" href="#2434">2434</a> <em class="jxr_javadoccomment">   * @return number of bytes written</em>
-<a class="jxr_linenumber" name="2435" href="#2435">2435</a> <em class="jxr_javadoccomment">   * @throws java.io.IOException e</em>
-<a class="jxr_linenumber" name="2436" href="#2436">2436</a> <em class="jxr_javadoccomment">   * @see java.nio.channels.WritableByteChannel#write(java.nio.ByteBuffer)</em>
-<a class="jxr_linenumber" name="2437" href="#2437">2437</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2438" href="#2438">2438</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">long</strong> channelWrite(GatheringByteChannel channel, <a href="../../../../../org/apache/hadoop/hbase/ipc/BufferChain.html">BufferChain</a> bufferChain)
-<a class="jxr_linenumber" name="2439" href="#2439">2439</a>   <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="2440" href="#2440">2440</a>     <strong class="jxr_keyword">long</strong> count =  bufferChain.write(channel, NIO_BUFFER_LIMIT);
-<a class="jxr_linenumber" name="2441" href="#2441">2441</a>     <strong class="jxr_keyword">if</strong> (count &gt; 0) <strong class="jxr_keyword">this</strong>.metrics.sentBytes(count);
-<a class="jxr_linenumber" name="2442" href="#2442">2442</a>     <strong class="jxr_keyword">return</strong> count;
-<a class="jxr_linenumber" name="2443" href="#2443">2443</a>   }
-<a class="jxr_linenumber" name="2444" href="#2444">2444</a> 
-<a class="jxr_linenumber" name="2445" href="#2445">2445</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2446" href="#2446">2446</a> <em class="jxr_javadoccomment">   * This is a wrapper around {@link java.nio.channels.ReadableByteChannel#read(java.nio.ByteBuffer)}.</em>
-<a class="jxr_linenumber" name="2447" href="#2447">2447</a> <em class="jxr_javadoccomment">   * If the amount of data is large, it writes to channel in smaller chunks.</em>
-<a class="jxr_linenumber" name="2448" href="#2448">2448</a> <em class="jxr_javadoccomment">   * This is to avoid jdk from creating many direct buffers as the size of</em>
-<a class="jxr_linenumber" name="2449" href="#2449">2449</a> <em class="jxr_javadoccomment">   * ByteBuffer increases. There should not be any performance degredation.</em>
-<a class="jxr_linenumber" name="2450" href="#2450">2450</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="2451" href="#2451">2451</a> <em class="jxr_javadoccomment">   * @param channel writable byte channel to write on</em>
-<a class="jxr_linenumber" name="2452" href="#2452">2452</a> <em class="jxr_javadoccomment">   * @param buffer buffer to write</em>
-<a class="jxr_linenumber" name="2453" href="#2453">2453</a> <em class="jxr_javadoccomment">   * @return number of bytes written</em>
-<a class="jxr_linenumber" name="2454" href="#2454">2454</a> <em class="jxr_javadoccomment">   * @throws java.io.IOException e</em>
-<a class="jxr_linenumber" name="2455" href="#2455">2455</a> <em class="jxr_javadoccomment">   * @see java.nio.channels.ReadableByteChannel#read(java.nio.ByteBuffer)</em>
-<a class="jxr_linenumber" name="2456" href="#2456">2456</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2457" href="#2457">2457</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">int</strong> channelRead(ReadableByteChannel channel,
-<a class="jxr_linenumber" name="2458" href="#2458">2458</a>                                    ByteBuffer buffer) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="2459" href="#2459">2459</a> 
-<a class="jxr_linenumber" name="2460" href="#2460">2460</a>     <strong class="jxr_keyword">int</strong> count = (buffer.remaining() &lt;= NIO_BUFFER_LIMIT) ?
-<a class="jxr_linenumber" name="2461" href="#2461">2461</a>            channel.read(buffer) : channelIO(channel, <strong class="jxr_keyword">null</strong>, buffer);
-<a class="jxr_linenumber" name="2462" href="#2462">2462</a>     <strong class="jxr_keyword">if</strong> (count &gt; 0) {
-<a class="jxr_linenumber" name="2463" href="#2463">2463</a>       metrics.receivedBytes(count);
-<a class="jxr_linenumber" name="2464" href="#2464">2464</a>     }
-<a class="jxr_linenumber" name="2465" href="#2465">2465</a>     <strong class="jxr_keyword">return</strong> count;
-<a class="jxr_linenumber" name="2466" href="#2466">2466</a>   }
-<a class="jxr_linenumber" name="2467" href="#2467">2467</a> 
-<a class="jxr_linenumber" name="2468" href="#2468">2468</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2469" href="#2469">2469</a> <em class="jxr_javadoccomment">   * Helper for {@link #channelRead(java.nio.channels.ReadableByteChannel, java.nio.ByteBuffer)}</em>
-<a class="jxr_linenumber" name="2470" href="#2470">2470</a> <em class="jxr_javadoccomment">   * and {@link #channelWrite(GatheringByteChannel, BufferChain)}. Only</em>
-<a class="jxr_linenumber" name="2471" href="#2471">2471</a> <em class="jxr_javadoccomment">   * one of readCh or writeCh should be non-null.</em>
-<a class="jxr_linenumber" name="2472" href="#2472">2472</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="2473" href="#2473">2473</a> <em class="jxr_javadoccomment">   * @param readCh read channel</em>
-<a class="jxr_linenumber" name="2474" href="#2474">2474</a> <em class="jxr_javadoccomment">   * @param writeCh write channel</em>
-<a class="jxr_linenumber" name="2475" href="#2475">2475</a> <em class="jxr_javadoccomment">   * @param buf buffer to read or write into/out of</em>
-<a class="jxr_linenumber" name="2476" href="#2476">2476</a> <em class="jxr_javadoccomment">   * @return bytes written</em>
-<a class="jxr_linenumber" name="2477" href="#2477">2477</a> <em class="jxr_javadoccomment">   * @throws java.io.IOException e</em>
-<a class="jxr_linenumber" name="2478" href="#2478">2478</a> <em class="jxr_javadoccomment">   * @see #channelRead(java.nio.channels.ReadableByteChannel, java.nio.ByteBuffer)</em>
-<a class="jxr_linenumber" name="2479" href="#2479">2479</a> <em class="jxr_javadoccomment">   * @see #channelWrite(GatheringByteChannel, BufferChain)</em>
-<a class="jxr_linenumber" name="2480" href="#2480">2480</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2481" href="#2481">2481</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">int</strong> channelIO(ReadableByteChannel readCh,
-<a class="jxr_linenumber" name="2482" href="#2482">2482</a>                                WritableByteChannel writeCh,
-<a class="jxr_linenumber" name="2483" href="#2483">2483</a>                                ByteBuffer buf) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="2484" href="#2484">2484</a> 
-<a class="jxr_linenumber" name="2485" href="#2485">2485</a>     <strong class="jxr_keyword">int</strong> originalLimit = buf.limit();
-<a class="jxr_linenumber" name="2486" href="#2486">2486</a>     <strong class="jxr_keyword">int</strong> initialRemaining = buf.remaining();
-<a class="jxr_linenumber" name="2487" href="#2487">2487</a>     <strong class="jxr_keyword">int</strong> ret = 0;
-<a class="jxr_linenumber" name="2488" href="#2488">2488</a> 
-<a class="jxr_linenumber" name="2489" href="#2489">2489</a>     <strong class="jxr_keyword">while</strong> (buf.remaining() &gt; 0) {
-<a class="jxr_linenumber" name="2490" href="#2490">2490</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="2491" href="#2491">2491</a>         <strong class="jxr_keyword">int</strong> ioSize = Math.min(buf.remaining(), NIO_BUFFER_LIMIT);
-<a class="jxr_linenumber" name="2492" href="#2492">2492</a>         buf.limit(buf.position() + ioSize);
-<a class="jxr_linenumber" name="2493" href="#2493">2493</a> 
-<a class="jxr_linenumber" name="2494" href="#2494">2494</a>         ret = (readCh == <strong class="jxr_keyword">null</strong>) ? writeCh.write(buf) : readCh.read(buf);
-<a class="jxr_linenumber" name="2495" href="#2495">2495</a> 
-<a class="jxr_linenumber" name="2496" href="#2496">2496</a>         <strong class="jxr_keyword">if</strong> (ret &lt; ioSize) {
-<a class="jxr_linenumber" name="2497" href="#2497">2497</a>           <strong class="jxr_keyword">break</strong>;
-<a class="jxr_linenumber" name="2498" href="#2498">2498</a>         }
-<a class="jxr_linenumber" name="2499" href="#2499">2499</a> 
-<a class="jxr_linenumber" name="2500" href="#2500">2500</a>       } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="2501" href="#2501">2501</a>         buf.limit(originalLimit);
-<a class="jxr_linenumber" name="2502" href="#2502">2502</a>       }
-<a class="jxr_linenumber" name="2503" href="#2503">2503</a>     }
-<a class="jxr_linenumber" name="2504" href="#2504">2504</a> 
-<a class="jxr_linenumber" name="2505" href="#2505">2505</a>     <strong class="jxr_keyword">int</strong> nBytes = initialRemaining - buf.remaining();
-<a class="jxr_linenumber" name="2506" href="#2506">2506</a>     <strong class="jxr_keyword">return</strong> (nBytes &gt; 0) ? nBytes : ret;
-<a class="jxr_linenumber" name="2507" href="#2507">2507</a>   }
-<a class="jxr_linenumber" name="2508" href="#2508">2508</a> 
-<a class="jxr_linenumber" name="2509" href="#2509">2509</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2510" href="#2510">2510</a> <em class="jxr_javadoccomment">   * Needed for features such as delayed calls.  We need to be able to store the current call</em>
-<a class="jxr_linenumber" name="2511" href="#2511">2511</a> <em class="jxr_javadoccomment">   * so that we can complete it later or ask questions of what is supported by the current ongoing</em>
-<a class="jxr_linenumber" name="2512" href="#2512">2512</a> <em class="jxr_javadoccomment">   * call.</em>
-<a class="jxr_linenumber" name="2513" href="#2513">2513</a> <em class="jxr_javadoccomment">   * @return An RpcCallContext backed by the currently ongoing call (gotten from a thread local)</em>
-<a class="jxr_linenumber" name="2514" href="#2514">2514</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2515" href="#2515">2515</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html">RpcCallContext</a> getCurrentCall() {
-<a class="jxr_linenumber" name="2516" href="#2516">2516</a>     <strong class="jxr_keyword">return</strong> CurCall.get();
-<a class="jxr_linenumber" name="2517" href="#2517">2517</a>   }
-<a class="jxr_linenumber" name="2518" href="#2518">2518</a> 
-<a class="jxr_linenumber" name="2519" href="#2519">2519</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isInRpcCallContext() {
-<a class="jxr_linenumber" name="2520" href="#2520">2520</a>     <strong class="jxr_keyword">return</strong> CurCall.get() != <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="2521" href="#2521">2521</a>   }
-<a class="jxr_linenumber" name="2522" href="#2522">2522</a> 
-<a class="jxr_linenumber" name="2523" href="#2523">2523</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2524" href="#2524">2524</a> <em class="jxr_javadoccomment">   * Returns the user credentials associated with the current RPC request or</em>
-<a class="jxr_linenumber" name="2525" href="#2525">2525</a> <em class="jxr_javadoccomment">   * &lt;code&gt;null&lt;/code&gt; if no credentials were provided.</em>
-<a class="jxr_linenumber" name="2526" href="#2526">2526</a> <em class="jxr_javadoccomment">   * @return A User</em>
-<a class="jxr_linenumber" name="2527" href="#2527">2527</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2528" href="#2528">2528</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../../org/apache/hadoop/hbase/security/User.html">User</a> getRequestUser() {
-<a class="jxr_linenumber" name="2529" href="#2529">2529</a>     <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html">RpcCallContext</a> ctx = getCurrentCall();
-<a class="jxr_linenumber" name="2530" href="#2530">2530</a>     <strong class="jxr_keyword">return</strong> ctx == <strong class="jxr_keyword">null</strong>? <strong class="jxr_keyword">null</strong>: ctx.getRequestUser();
-<a class="jxr_linenumber" name="2531" href="#2531">2531</a>   }
-<a class="jxr_linenumber" name="2532" href="#2532">2532</a> 
-<a class="jxr_linenumber" name="2533" href="#2533">2533</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2534" href="#2534">2534</a> <em class="jxr_javadoccomment">   * Returns the username for any user associated with the current RPC</em>
-<a class="jxr_linenumber" name="2535" href="#2535">2535</a> <em class="jxr_javadoccomment">   * request or &lt;code&gt;null&lt;/code&gt; if no user is set.</em>
-<a class="jxr_linenumber" name="2536" href="#2536">2536</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2537" href="#2537">2537</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String getRequestUserName() {
-<a class="jxr_linenumber" name="2538" href="#2538">2538</a>     <a href="../../../../../org/apache/hadoop/hbase/security/User.html">User</a> user = getRequestUser();
-<a class="jxr_linenumber" name="2539" href="#2539">2539</a>     <strong class="jxr_keyword">return</strong> user == <strong class="jxr_keyword">null</strong>? <strong class="jxr_keyword">null</strong>: user.getShortName();
-<a class="jxr_linenumber" name="2540" href="#2540">2540</a>   }
-<a class="jxr_linenumber" name="2541" href="#2541">2541</a> 
-<a class="jxr_linenumber" name="2542" href="#2542">2542</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2543" href="#2543">2543</a> <em class="jxr_javadoccomment">   * @return Address of remote client if a request is ongoing, else null</em>
-<a class="jxr_linenumber" name="2544" href="#2544">2544</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2545" href="#2545">2545</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> InetAddress getRemoteAddress() {
-<a class="jxr_linenumber" name="2546" href="#2546">2546</a>     <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html">RpcCallContext</a> ctx = getCurrentCall();
-<a class="jxr_linenumber" name="2547" href="#2547">2547</a>     <strong class="jxr_keyword">return</strong> ctx == <strong class="jxr_keyword">null</strong>? <strong class="jxr_keyword">null</strong>: ctx.getRemoteAddress();
-<a class="jxr_linenumber" name="2548" href="#2548">2548</a>   }
-<a class="jxr_linenumber" name="2549" href="#2549">2549</a> 
-<a class="jxr_linenumber" name="2550" href="#2550">2550</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2551" href="#2551">2551</a> <em class="jxr_javadoccomment">   * @param serviceName Some arbitrary string that represents a 'service'.</em>
-<a class="jxr_linenumber" name="2552" href="#2552">2552</a> <em class="jxr_javadoccomment">   * @param services Available service instances</em>
-<a class="jxr_linenumber" name="2553" href="#2553">2553</a> <em class="jxr_javadoccomment">   * @return Matching BlockingServiceAndInterface pair</em>
-<a class="jxr_linenumber" name="2554" href="#2554">2554</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2555" href="#2555">2555</a>   <strong class="jxr_keyword">static</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.html">BlockingServiceAndInterface</a> getServiceAndInterface(
-<a class="jxr_linenumber" name="2556" href="#2556">2556</a>       <strong class="jxr_keyword">final</strong> List&lt;BlockingServiceAndInterface&gt; services, <strong class="jxr_keyword">final</strong> String serviceName) {
-<a class="jxr_linenumber" name="2557" href="#2557">2557</a>     <strong class="jxr_keyword">for</strong> (BlockingServiceAndInterface bs : services) {
-<a class="jxr_linenumber" name="2558" href="#2558">2558</a>       <strong class="jxr_keyword">if</strong> (bs.getBlockingService().getDescriptorForType().getName().equals(serviceName)) {
-<a class="jxr_linenumber" name="2559" href="#2559">2559</a>         <strong class="jxr_keyword">return</strong> bs;
-<a class="jxr_linenumber" name="2560" href="#2560">2560</a>       }
-<a class="jxr_linenumber" name="2561" href="#2561">2561</a>     }
-<a class="jxr_linenumber" name="2562" href="#2562">2562</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="2563" href="#2563">2563</a>   }
-<a class="jxr_linenumber" name="2564" href="#2564">2564</a> 
-<a class="jxr_linenumber" name="2565" href="#2565">2565</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2566" href="#2566">2566</a> <em class="jxr_javadoccomment">   * @param serviceName Some arbitrary string that represents a 'service'.</em>
-<a class="jxr_linenumber" name="2567" href="#2567">2567</a> <em class="jxr_javadoccomment">   * @param services Available services and their service interfaces.</em>
-<a class="jxr_linenumber" name="2568" href="#2568">2568</a> <em class="jxr_javadoccomment">   * @return Service interface class for &lt;code&gt;serviceName&lt;/code&gt;</em>
-<a class="jxr_linenumber" name="2569" href="#2569">2569</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2570" href="#2570">2570</a>   <strong class="jxr_keyword">static</strong> Class&lt;?&gt; getServiceInterface(
-<a class="jxr_linenumber" name="2571" href="#2571">2571</a>       <strong class="jxr_keyword">final</strong> List&lt;BlockingServiceAndInterface&gt; services,
-<a class="jxr_linenumber" name="2572" href="#2572">2572</a>       <strong class="jxr_keyword">final</strong> String serviceName) {
-<a class="jxr_linenumber" name="2573" href="#2573">2573</a>     <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.html">BlockingServiceAndInterface</a> bsasi =
-<a class="jxr_linenumber" name="2574" href="#2574">2574</a>         getServiceAndInterface(services, serviceName);
-<a class="jxr_linenumber" name="2575" href="#2575">2575</a>     <strong class="jxr_keyword">return</strong> bsasi == <strong class="jxr_keyword">null</strong>? <strong class="jxr_keyword">null</strong>: bsasi.getServiceInterface();
-<a class="jxr_linenumber" name="2576" href="#2576">2576</a>   }
-<a class="jxr_linenumber" name="2577" href="#2577">2577</a> 
-<a class="jxr_linenumber" name="2578" href="#2578">2578</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2579" href="#2579">2579</a> <em class="jxr_javadoccomment">   * @param serviceName Some arbitrary string that represents a 'service'.</em>
-<a class="jxr_linenumber" name="2580" href="#2580">2580</a> <em class="jxr_javadoccomment">   * @param services Available services and their service interfaces.</em>
-<a class="jxr_linenumber" name="2581" href="#2581">2581</a> <em class="jxr_javadoccomment">   * @return BlockingService that goes with the passed &lt;code&gt;serviceName&lt;/code&gt;</em>
-<a class="jxr_linenumber" name="2582" href="#2582">2582</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2583" href="#2583">2583</a>   <strong class="jxr_keyword">static</strong> BlockingService getService(
-<a class="jxr_linenumber" name="2584" href="#2584">2584</a>       <strong class="jxr_keyword">final</strong> List&lt;BlockingServiceAndInterface&gt; services,
-<a class="jxr_linenumber" name="2585" href="#2585">2585</a>       <strong class="jxr_keyword">final</strong> String serviceName) {
-<a class="jxr_linenumber" name="2586" href="#2586">2586</a>     <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.html">BlockingServiceAndInterface</a> bsasi =
-<a class="jxr_linenumber" name="2587" href="#2587">2587</a>         getServiceAndInterface(services, serviceName);
-<a class="jxr_linenumber" name="2588" href="#2588">2588</a>     <strong class="jxr_keyword">return</strong> bsasi == <strong class="jxr_keyword">null</strong>? <strong class="jxr_keyword">null</strong>: bsasi.getBlockingService();
-<a class="jxr_linenumber" name="258

<TRUNCATED>