You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2013/04/06 08:06:09 UTC

svn commit: r1465198 [22/41] - in /hbase/hbase.apache.org/trunk: ./ css/ hbase-assembly/ images/ xref-test/ xref-test/org/apache/hadoop/hbase/ xref-test/org/apache/hadoop/hbase/client/ xref-test/org/apache/hadoop/hbase/client/replication/ xref-test/org...

Modified: hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/master/HMaster.html
URL: http://svn.apache.org/viewvc/hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/master/HMaster.html?rev=1465198&r1=1465197&r2=1465198&view=diff
==============================================================================
--- hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/master/HMaster.html (original)
+++ hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/master/HMaster.html Sat Apr  6 06:06:07 2013
@@ -628,7 +628,7 @@
 <a class="jxr_linenumber" name="618" href="#618">618</a>         <span class="jxr_string">", cluster-up flag was="</span> + wasUp);
 <a class="jxr_linenumber" name="619" href="#619">619</a> 
 <a class="jxr_linenumber" name="620" href="#620">620</a>     <em class="jxr_comment">// create the snapshot manager</em>
-<a class="jxr_linenumber" name="621" href="#621">621</a>     <strong class="jxr_keyword">this</strong>.snapshotManager = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html">SnapshotManager</a>(<strong class="jxr_keyword">this</strong>);
+<a class="jxr_linenumber" name="621" href="#621">621</a>     <strong class="jxr_keyword">this</strong>.snapshotManager = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html">SnapshotManager</a>(<strong class="jxr_keyword">this</strong>, <strong class="jxr_keyword">this</strong>.metricsMaster);
 <a class="jxr_linenumber" name="622" href="#622">622</a>   }
 <a class="jxr_linenumber" name="623" href="#623">623</a> 
 <a class="jxr_linenumber" name="624" href="#624">624</a>   <em class="jxr_javadoccomment">/**</em>
@@ -2277,389 +2277,392 @@
 <a class="jxr_linenumber" name="2267" href="#2267">2267</a>           <strong class="jxr_keyword">return</strong> urr;
 <a class="jxr_linenumber" name="2268" href="#2268">2268</a>         }
 <a class="jxr_linenumber" name="2269" href="#2269">2269</a>       }
-<a class="jxr_linenumber" name="2270" href="#2270">2270</a>       <strong class="jxr_keyword">if</strong> (force) {
-<a class="jxr_linenumber" name="2271" href="#2271">2271</a>         <strong class="jxr_keyword">this</strong>.assignmentManager.regionOffline(hri);
-<a class="jxr_linenumber" name="2272" href="#2272">2272</a>         assignRegion(hri);
-<a class="jxr_linenumber" name="2273" href="#2273">2273</a>       } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="2274" href="#2274">2274</a>         <strong class="jxr_keyword">this</strong>.assignmentManager.unassign(hri, force);
-<a class="jxr_linenumber" name="2275" href="#2275">2275</a>       }
-<a class="jxr_linenumber" name="2276" href="#2276">2276</a>       <strong class="jxr_keyword">if</strong> (cpHost != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="2277" href="#2277">2277</a>         cpHost.postUnassign(hri, force);
+<a class="jxr_linenumber" name="2270" href="#2270">2270</a>       LOG.debug(<span class="jxr_string">"Close region "</span> + hri.getRegionNameAsString()
+<a class="jxr_linenumber" name="2271" href="#2271">2271</a>           + <span class="jxr_string">" on current location if it is online and reassign.force="</span> + force);
+<a class="jxr_linenumber" name="2272" href="#2272">2272</a>       <strong class="jxr_keyword">this</strong>.assignmentManager.unassign(hri, force);
+<a class="jxr_linenumber" name="2273" href="#2273">2273</a>       <strong class="jxr_keyword">if</strong> (!<strong class="jxr_keyword">this</strong>.assignmentManager.getRegionStates().isRegionInTransition(hri)
+<a class="jxr_linenumber" name="2274" href="#2274">2274</a>           &amp;&amp; !<strong class="jxr_keyword">this</strong>.assignmentManager.getRegionStates().isRegionAssigned(hri)) {
+<a class="jxr_linenumber" name="2275" href="#2275">2275</a>         LOG.debug(<span class="jxr_string">"Region "</span> + hri.getRegionNameAsString()
+<a class="jxr_linenumber" name="2276" href="#2276">2276</a>             + <span class="jxr_string">" is not online on any region server, reassigning it."</span>);
+<a class="jxr_linenumber" name="2277" href="#2277">2277</a>         assignRegion(hri);
 <a class="jxr_linenumber" name="2278" href="#2278">2278</a>       }
-<a class="jxr_linenumber" name="2279" href="#2279">2279</a> 
-<a class="jxr_linenumber" name="2280" href="#2280">2280</a>       <strong class="jxr_keyword">return</strong> urr;
-<a class="jxr_linenumber" name="2281" href="#2281">2281</a>     } <strong class="jxr_keyword">catch</strong> (IOException ioe) {
-<a class="jxr_linenumber" name="2282" href="#2282">2282</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(ioe);
-<a class="jxr_linenumber" name="2283" href="#2283">2283</a>     }
-<a class="jxr_linenumber" name="2284" href="#2284">2284</a>   }
-<a class="jxr_linenumber" name="2285" href="#2285">2285</a> 
-<a class="jxr_linenumber" name="2286" href="#2286">2286</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2287" href="#2287">2287</a> <em class="jxr_javadoccomment">   * Get list of TableDescriptors for requested tables.</em>
-<a class="jxr_linenumber" name="2288" href="#2288">2288</a> <em class="jxr_javadoccomment">   * @param controller Unused (set to null).</em>
-<a class="jxr_linenumber" name="2289" href="#2289">2289</a> <em class="jxr_javadoccomment">   * @param req GetTableDescriptorsRequest that contains:</em>
-<a class="jxr_linenumber" name="2290" href="#2290">2290</a> <em class="jxr_javadoccomment">   * - tableNames: requested tables, or if empty, all are requested</em>
-<a class="jxr_linenumber" name="2291" href="#2291">2291</a> <em class="jxr_javadoccomment">   * @return GetTableDescriptorsResponse</em>
-<a class="jxr_linenumber" name="2292" href="#2292">2292</a> <em class="jxr_javadoccomment">   * @throws ServiceException</em>
-<a class="jxr_linenumber" name="2293" href="#2293">2293</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2294" href="#2294">2294</a>   <strong class="jxr_keyword">public</strong> GetTableDescriptorsResponse getTableDescriptors(
-<a class="jxr_linenumber" name="2295" href="#2295">2295</a> 	      RpcController controller, GetTableDescriptorsRequest req) <strong class="jxr_keyword">throws</strong> ServiceException {
-<a class="jxr_linenumber" name="2296" href="#2296">2296</a>     GetTableDescriptorsResponse.Builder builder = GetTableDescriptorsResponse.newBuilder();
-<a class="jxr_linenumber" name="2297" href="#2297">2297</a>     <strong class="jxr_keyword">if</strong> (req.getTableNamesCount() == 0) {
-<a class="jxr_linenumber" name="2298" href="#2298">2298</a>       <em class="jxr_comment">// request for all TableDescriptors</em>
-<a class="jxr_linenumber" name="2299" href="#2299">2299</a>       Map&lt;String, HTableDescriptor&gt; descriptors = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="2300" href="#2300">2300</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="2301" href="#2301">2301</a>         descriptors = <strong class="jxr_keyword">this</strong>.tableDescriptors.getAll();
-<a class="jxr_linenumber" name="2302" href="#2302">2302</a>       } <strong class="jxr_keyword">catch</strong> (IOException e) {
-<a class="jxr_linenumber" name="2303" href="#2303">2303</a>           LOG.warn(<span class="jxr_string">"Failed getting all descriptors"</span>, e);
-<a class="jxr_linenumber" name="2304" href="#2304">2304</a>       }
-<a class="jxr_linenumber" name="2305" href="#2305">2305</a>       <strong class="jxr_keyword">if</strong> (descriptors != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="2306" href="#2306">2306</a>         <strong class="jxr_keyword">for</strong> (HTableDescriptor htd : descriptors.values()) {
-<a class="jxr_linenumber" name="2307" href="#2307">2307</a>           builder.addTableSchema(htd.convert());
-<a class="jxr_linenumber" name="2308" href="#2308">2308</a>         }
-<a class="jxr_linenumber" name="2309" href="#2309">2309</a>       }
-<a class="jxr_linenumber" name="2310" href="#2310">2310</a>     }
-<a class="jxr_linenumber" name="2311" href="#2311">2311</a>     <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="2312" href="#2312">2312</a>       <strong class="jxr_keyword">for</strong> (String s: req.getTableNamesList()) {
-<a class="jxr_linenumber" name="2313" href="#2313">2313</a>         <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html">HTableDescriptor</a> htd = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="2314" href="#2314">2314</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="2315" href="#2315">2315</a>           htd = <strong class="jxr_keyword">this</strong>.tableDescriptors.get(s);
-<a class="jxr_linenumber" name="2316" href="#2316">2316</a>         } <strong class="jxr_keyword">catch</strong> (IOException e) {
-<a class="jxr_linenumber" name="2317" href="#2317">2317</a>           LOG.warn(<span class="jxr_string">"Failed getting descriptor for "</span> + s, e);
-<a class="jxr_linenumber" name="2318" href="#2318">2318</a>         }
-<a class="jxr_linenumber" name="2319" href="#2319">2319</a>         <strong class="jxr_keyword">if</strong> (htd == <strong class="jxr_keyword">null</strong>) <strong class="jxr_keyword">continue</strong>;
-<a class="jxr_linenumber" name="2320" href="#2320">2320</a>         builder.addTableSchema(htd.convert());
-<a class="jxr_linenumber" name="2321" href="#2321">2321</a>       }
-<a class="jxr_linenumber" name="2322" href="#2322">2322</a>     }
-<a class="jxr_linenumber" name="2323" href="#2323">2323</a>     <strong class="jxr_keyword">return</strong> builder.build();
-<a class="jxr_linenumber" name="2324" href="#2324">2324</a>   }
-<a class="jxr_linenumber" name="2325" href="#2325">2325</a> 
-<a class="jxr_linenumber" name="2326" href="#2326">2326</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2327" href="#2327">2327</a> <em class="jxr_javadoccomment">   * Compute the average load across all region servers.</em>
-<a class="jxr_linenumber" name="2328" href="#2328">2328</a> <em class="jxr_javadoccomment">   * Currently, this uses a very naive computation - just uses the number of</em>
-<a class="jxr_linenumber" name="2329" href="#2329">2329</a> <em class="jxr_javadoccomment">   * regions being served, ignoring stats about number of requests.</em>
-<a class="jxr_linenumber" name="2330" href="#2330">2330</a> <em class="jxr_javadoccomment">   * @return the average load</em>
-<a class="jxr_linenumber" name="2331" href="#2331">2331</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2332" href="#2332">2332</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">double</strong> getAverageLoad() {
-<a class="jxr_linenumber" name="2333" href="#2333">2333</a>     <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.assignmentManager == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="2334" href="#2334">2334</a>       <strong class="jxr_keyword">return</strong> 0;
-<a class="jxr_linenumber" name="2335" href="#2335">2335</a>     }
-<a class="jxr_linenumber" name="2336" href="#2336">2336</a> 
-<a class="jxr_linenumber" name="2337" href="#2337">2337</a>     <a href="../../../../../org/apache/hadoop/hbase/master/RegionStates.html">RegionStates</a> regionStates = <strong class="jxr_keyword">this</strong>.assignmentManager.getRegionStates();
-<a class="jxr_linenumber" name="2338" href="#2338">2338</a>     <strong class="jxr_keyword">if</strong> (regionStates == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="2339" href="#2339">2339</a>       <strong class="jxr_keyword">return</strong> 0;
-<a class="jxr_linenumber" name="2340" href="#2340">2340</a>     }
-<a class="jxr_linenumber" name="2341" href="#2341">2341</a>     <strong class="jxr_keyword">return</strong> regionStates.getAverageLoad();
-<a class="jxr_linenumber" name="2342" href="#2342">2342</a>   }
-<a class="jxr_linenumber" name="2343" href="#2343">2343</a> 
-<a class="jxr_linenumber" name="2344" href="#2344">2344</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2345" href="#2345">2345</a> <em class="jxr_javadoccomment">   * Offline specified region from master's in-memory state. It will not attempt to</em>
-<a class="jxr_linenumber" name="2346" href="#2346">2346</a> <em class="jxr_javadoccomment">   * reassign the region as in unassign.</em>
-<a class="jxr_linenumber" name="2347" href="#2347">2347</a> <em class="jxr_javadoccomment">   *  </em>
-<a class="jxr_linenumber" name="2348" href="#2348">2348</a> <em class="jxr_javadoccomment">   * This is a special method that should be used by experts or hbck.</em>
-<a class="jxr_linenumber" name="2349" href="#2349">2349</a> <em class="jxr_javadoccomment">   * </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> OfflineRegionResponse offlineRegion(RpcController controller, OfflineRegionRequest request)
-<a class="jxr_linenumber" name="2353" href="#2353">2353</a>   <strong class="jxr_keyword">throws</strong> ServiceException {
-<a class="jxr_linenumber" name="2354" href="#2354">2354</a>     <strong class="jxr_keyword">final</strong> byte [] regionName = request.getRegion().getValue().toByteArray();
-<a class="jxr_linenumber" name="2355" href="#2355">2355</a>     RegionSpecifierType type = request.getRegion().getType();
-<a class="jxr_linenumber" name="2356" href="#2356">2356</a>     <strong class="jxr_keyword">if</strong> (type != RegionSpecifierType.REGION_NAME) {
-<a class="jxr_linenumber" name="2357" href="#2357">2357</a>       LOG.warn(<span class="jxr_string">"moveRegion specifier type: expected: "</span> + RegionSpecifierType.REGION_NAME
-<a class="jxr_linenumber" name="2358" href="#2358">2358</a>         + <span class="jxr_string">" actual: "</span> + type);
-<a class="jxr_linenumber" name="2359" href="#2359">2359</a>     }
-<a class="jxr_linenumber" name="2360" href="#2360">2360</a> 
-<a class="jxr_linenumber" name="2361" href="#2361">2361</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="2362" href="#2362">2362</a>       Pair&lt;HRegionInfo, ServerName&gt; pair =
-<a class="jxr_linenumber" name="2363" href="#2363">2363</a>         MetaReader.getRegion(<strong class="jxr_keyword">this</strong>.catalogTracker, regionName);
-<a class="jxr_linenumber" name="2364" href="#2364">2364</a>       <strong class="jxr_keyword">if</strong> (pair == <strong class="jxr_keyword">null</strong>) <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> UnknownRegionException(Bytes.toStringBinary(regionName));
-<a class="jxr_linenumber" name="2365" href="#2365">2365</a>       <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html">HRegionInfo</a> hri = pair.getFirst();
-<a class="jxr_linenumber" name="2366" href="#2366">2366</a>       <strong class="jxr_keyword">if</strong> (cpHost != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="2367" href="#2367">2367</a>         cpHost.preRegionOffline(hri);
-<a class="jxr_linenumber" name="2368" href="#2368">2368</a>       }
-<a class="jxr_linenumber" name="2369" href="#2369">2369</a>       <strong class="jxr_keyword">this</strong>.assignmentManager.regionOffline(hri);
-<a class="jxr_linenumber" name="2370" href="#2370">2370</a>       <strong class="jxr_keyword">if</strong> (cpHost != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="2371" href="#2371">2371</a>         cpHost.postRegionOffline(hri);
-<a class="jxr_linenumber" name="2372" href="#2372">2372</a>       }
-<a class="jxr_linenumber" name="2373" href="#2373">2373</a>     } <strong class="jxr_keyword">catch</strong> (IOException ioe) {
-<a class="jxr_linenumber" name="2374" href="#2374">2374</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(ioe);
-<a class="jxr_linenumber" name="2375" href="#2375">2375</a>     }
-<a class="jxr_linenumber" name="2376" href="#2376">2376</a>     <strong class="jxr_keyword">return</strong> OfflineRegionResponse.newBuilder().build();
-<a class="jxr_linenumber" name="2377" href="#2377">2377</a>   }
-<a class="jxr_linenumber" name="2378" href="#2378">2378</a> 
-<a class="jxr_linenumber" name="2379" href="#2379">2379</a>   @Override
-<a class="jxr_linenumber" name="2380" href="#2380">2380</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> registerService(Service instance) {
-<a class="jxr_linenumber" name="2381" href="#2381">2381</a>     <em class="jxr_comment">/*</em>
-<a class="jxr_linenumber" name="2382" href="#2382">2382</a> <em class="jxr_comment">     * No stacking of instances is allowed for a single service name</em>
-<a class="jxr_linenumber" name="2383" href="#2383">2383</a> <em class="jxr_comment">     */</em>
-<a class="jxr_linenumber" name="2384" href="#2384">2384</a>     Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();
-<a class="jxr_linenumber" name="2385" href="#2385">2385</a>     <strong class="jxr_keyword">if</strong> (coprocessorServiceHandlers.containsKey(serviceDesc.getFullName())) {
-<a class="jxr_linenumber" name="2386" href="#2386">2386</a>       LOG.error(<span class="jxr_string">"Coprocessor service "</span>+serviceDesc.getFullName()+
-<a class="jxr_linenumber" name="2387" href="#2387">2387</a>           <span class="jxr_string">" already registered, rejecting request from "</span>+instance
-<a class="jxr_linenumber" name="2388" href="#2388">2388</a>       );
-<a class="jxr_linenumber" name="2389" href="#2389">2389</a>       <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="2390" href="#2390">2390</a>     }
-<a class="jxr_linenumber" name="2391" href="#2391">2391</a> 
-<a class="jxr_linenumber" name="2392" href="#2392">2392</a>     coprocessorServiceHandlers.put(serviceDesc.getFullName(), instance);
-<a class="jxr_linenumber" name="2393" href="#2393">2393</a>     <strong class="jxr_keyword">if</strong> (LOG.isDebugEnabled()) {
-<a class="jxr_linenumber" name="2394" href="#2394">2394</a>       LOG.debug(<span class="jxr_string">"Registered master coprocessor service: service="</span>+serviceDesc.getFullName());
-<a class="jxr_linenumber" name="2395" href="#2395">2395</a>     }
-<a class="jxr_linenumber" name="2396" href="#2396">2396</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<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>   @Override
-<a class="jxr_linenumber" name="2400" href="#2400">2400</a>   <strong class="jxr_keyword">public</strong> ClientProtos.CoprocessorServiceResponse execMasterService(<strong class="jxr_keyword">final</strong> RpcController controller,
-<a class="jxr_linenumber" name="2401" href="#2401">2401</a>       <strong class="jxr_keyword">final</strong> ClientProtos.CoprocessorServiceRequest request) <strong class="jxr_keyword">throws</strong> ServiceException {
-<a class="jxr_linenumber" name="2402" href="#2402">2402</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="2403" href="#2403">2403</a>       <a href="../../../../../org/apache/hadoop/hbase/ipc/ServerRpcController.html">ServerRpcController</a> execController = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/ServerRpcController.html">ServerRpcController</a>();
-<a class="jxr_linenumber" name="2404" href="#2404">2404</a> 
-<a class="jxr_linenumber" name="2405" href="#2405">2405</a>       ClientProtos.CoprocessorServiceCall call = request.getCall();
-<a class="jxr_linenumber" name="2406" href="#2406">2406</a>       String serviceName = call.getServiceName();
-<a class="jxr_linenumber" name="2407" href="#2407">2407</a>       String methodName = call.getMethodName();
-<a class="jxr_linenumber" name="2408" href="#2408">2408</a>       <strong class="jxr_keyword">if</strong> (!coprocessorServiceHandlers.containsKey(serviceName)) {
-<a class="jxr_linenumber" name="2409" href="#2409">2409</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/exceptions/UnknownProtocolException.html">UnknownProtocolException</a>(<strong class="jxr_keyword">null</strong>,
-<a class="jxr_linenumber" name="2410" href="#2410">2410</a>             <span class="jxr_string">"No registered master coprocessor service found for name "</span>+serviceName);
-<a class="jxr_linenumber" name="2411" href="#2411">2411</a>       }
-<a class="jxr_linenumber" name="2412" href="#2412">2412</a> 
-<a class="jxr_linenumber" name="2413" href="#2413">2413</a>       Service service = coprocessorServiceHandlers.get(serviceName);
-<a class="jxr_linenumber" name="2414" href="#2414">2414</a>       Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();
-<a class="jxr_linenumber" name="2415" href="#2415">2415</a>       Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);
-<a class="jxr_linenumber" name="2416" href="#2416">2416</a>       <strong class="jxr_keyword">if</strong> (methodDesc == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="2417" href="#2417">2417</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/exceptions/UnknownProtocolException.html">UnknownProtocolException</a>(service.getClass(),
-<a class="jxr_linenumber" name="2418" href="#2418">2418</a>             <span class="jxr_string">"Unknown method "</span>+methodName+<span class="jxr_string">" called on master service "</span>+serviceName);
-<a class="jxr_linenumber" name="2419" href="#2419">2419</a>       }
-<a class="jxr_linenumber" name="2420" href="#2420">2420</a> 
-<a class="jxr_linenumber" name="2421" href="#2421">2421</a>       <em class="jxr_comment">//invoke the method</em>
-<a class="jxr_linenumber" name="2422" href="#2422">2422</a>       Message execRequest = service.getRequestPrototype(methodDesc).newBuilderForType()
-<a class="jxr_linenumber" name="2423" href="#2423">2423</a>           .mergeFrom(call.getRequest()).build();
-<a class="jxr_linenumber" name="2424" href="#2424">2424</a>       <strong class="jxr_keyword">final</strong> Message.Builder responseBuilder =
-<a class="jxr_linenumber" name="2425" href="#2425">2425</a>           service.getResponsePrototype(methodDesc).newBuilderForType();
-<a class="jxr_linenumber" name="2426" href="#2426">2426</a>       service.callMethod(methodDesc, execController, execRequest, <strong class="jxr_keyword">new</strong> RpcCallback&lt;Message&gt;() {
-<a class="jxr_linenumber" name="2427" href="#2427">2427</a>         @Override
-<a class="jxr_linenumber" name="2428" href="#2428">2428</a>         <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> run(Message message) {
-<a class="jxr_linenumber" name="2429" href="#2429">2429</a>           <strong class="jxr_keyword">if</strong> (message != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="2430" href="#2430">2430</a>             responseBuilder.mergeFrom(message);
-<a class="jxr_linenumber" name="2431" href="#2431">2431</a>           }
-<a class="jxr_linenumber" name="2432" href="#2432">2432</a>         }
-<a class="jxr_linenumber" name="2433" href="#2433">2433</a>       });
-<a class="jxr_linenumber" name="2434" href="#2434">2434</a>       Message execResult = responseBuilder.build();
-<a class="jxr_linenumber" name="2435" href="#2435">2435</a> 
-<a class="jxr_linenumber" name="2436" href="#2436">2436</a>       <strong class="jxr_keyword">if</strong> (execController.getFailedOn() != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="2437" href="#2437">2437</a>         <strong class="jxr_keyword">throw</strong> execController.getFailedOn();
-<a class="jxr_linenumber" name="2438" href="#2438">2438</a>       }
-<a class="jxr_linenumber" name="2439" href="#2439">2439</a>       ClientProtos.CoprocessorServiceResponse.Builder builder =
-<a class="jxr_linenumber" name="2440" href="#2440">2440</a>           ClientProtos.CoprocessorServiceResponse.newBuilder();
-<a class="jxr_linenumber" name="2441" href="#2441">2441</a>       builder.setRegion(RequestConverter.buildRegionSpecifier(
-<a class="jxr_linenumber" name="2442" href="#2442">2442</a>           RegionSpecifierType.REGION_NAME, HConstants.EMPTY_BYTE_ARRAY));
-<a class="jxr_linenumber" name="2443" href="#2443">2443</a>       builder.setValue(
-<a class="jxr_linenumber" name="2444" href="#2444">2444</a>           builder.getValueBuilder().setName(execResult.getClass().getName())
-<a class="jxr_linenumber" name="2445" href="#2445">2445</a>               .setValue(execResult.toByteString()));
-<a class="jxr_linenumber" name="2446" href="#2446">2446</a>       <strong class="jxr_keyword">return</strong> builder.build();
-<a class="jxr_linenumber" name="2447" href="#2447">2447</a>     } <strong class="jxr_keyword">catch</strong> (IOException ie) {
-<a class="jxr_linenumber" name="2448" href="#2448">2448</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(ie);
-<a class="jxr_linenumber" name="2449" href="#2449">2449</a>     }
-<a class="jxr_linenumber" name="2450" href="#2450">2450</a>   }
-<a class="jxr_linenumber" name="2451" href="#2451">2451</a> 
-<a class="jxr_linenumber" name="2452" href="#2452">2452</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2453" href="#2453">2453</a> <em class="jxr_javadoccomment">   * Utility for constructing an instance of the passed HMaster class.</em>
-<a class="jxr_linenumber" name="2454" href="#2454">2454</a> <em class="jxr_javadoccomment">   * @param masterClass</em>
-<a class="jxr_linenumber" name="2455" href="#2455">2455</a> <em class="jxr_javadoccomment">   * @param conf</em>
-<a class="jxr_linenumber" name="2456" href="#2456">2456</a> <em class="jxr_javadoccomment">   * @return HMaster instance.</em>
-<a class="jxr_linenumber" name="2457" href="#2457">2457</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2458" href="#2458">2458</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html">HMaster</a> constructMaster(Class&lt;? <strong class="jxr_keyword">extends</strong> HMaster&gt; masterClass,
-<a class="jxr_linenumber" name="2459" href="#2459">2459</a>       <strong class="jxr_keyword">final</strong> Configuration conf)  {
-<a class="jxr_linenumber" name="2460" href="#2460">2460</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="2461" href="#2461">2461</a>       Constructor&lt;? <strong class="jxr_keyword">extends</strong> HMaster&gt; c =
-<a class="jxr_linenumber" name="2462" href="#2462">2462</a>         masterClass.getConstructor(Configuration.<strong class="jxr_keyword">class</strong>);
-<a class="jxr_linenumber" name="2463" href="#2463">2463</a>       <strong class="jxr_keyword">return</strong> c.newInstance(conf);
-<a class="jxr_linenumber" name="2464" href="#2464">2464</a>     } <strong class="jxr_keyword">catch</strong> (InvocationTargetException ite) {
-<a class="jxr_linenumber" name="2465" href="#2465">2465</a>       Throwable target = ite.getTargetException() != <strong class="jxr_keyword">null</strong>?
-<a class="jxr_linenumber" name="2466" href="#2466">2466</a>         ite.getTargetException(): ite;
-<a class="jxr_linenumber" name="2467" href="#2467">2467</a>       <strong class="jxr_keyword">if</strong> (target.getCause() != <strong class="jxr_keyword">null</strong>) target = target.getCause();
-<a class="jxr_linenumber" name="2468" href="#2468">2468</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> RuntimeException(<span class="jxr_string">"Failed construction of Master: "</span> +
-<a class="jxr_linenumber" name="2469" href="#2469">2469</a>         masterClass.toString(), target);
-<a class="jxr_linenumber" name="2470" href="#2470">2470</a>     } <strong class="jxr_keyword">catch</strong> (Exception e) {
+<a class="jxr_linenumber" name="2279" href="#2279">2279</a>       <strong class="jxr_keyword">if</strong> (cpHost != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="2280" href="#2280">2280</a>         cpHost.postUnassign(hri, force);
+<a class="jxr_linenumber" name="2281" href="#2281">2281</a>       }
+<a class="jxr_linenumber" name="2282" href="#2282">2282</a> 
+<a class="jxr_linenumber" name="2283" href="#2283">2283</a>       <strong class="jxr_keyword">return</strong> urr;
+<a class="jxr_linenumber" name="2284" href="#2284">2284</a>     } <strong class="jxr_keyword">catch</strong> (IOException ioe) {
+<a class="jxr_linenumber" name="2285" href="#2285">2285</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(ioe);
+<a class="jxr_linenumber" name="2286" href="#2286">2286</a>     }
+<a class="jxr_linenumber" name="2287" href="#2287">2287</a>   }
+<a class="jxr_linenumber" name="2288" href="#2288">2288</a> 
+<a class="jxr_linenumber" name="2289" href="#2289">2289</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="2290" href="#2290">2290</a> <em class="jxr_javadoccomment">   * Get list of TableDescriptors for requested tables.</em>
+<a class="jxr_linenumber" name="2291" href="#2291">2291</a> <em class="jxr_javadoccomment">   * @param controller Unused (set to null).</em>
+<a class="jxr_linenumber" name="2292" href="#2292">2292</a> <em class="jxr_javadoccomment">   * @param req GetTableDescriptorsRequest that contains:</em>
+<a class="jxr_linenumber" name="2293" href="#2293">2293</a> <em class="jxr_javadoccomment">   * - tableNames: requested tables, or if empty, all are requested</em>
+<a class="jxr_linenumber" name="2294" href="#2294">2294</a> <em class="jxr_javadoccomment">   * @return GetTableDescriptorsResponse</em>
+<a class="jxr_linenumber" name="2295" href="#2295">2295</a> <em class="jxr_javadoccomment">   * @throws ServiceException</em>
+<a class="jxr_linenumber" name="2296" href="#2296">2296</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="2297" href="#2297">2297</a>   <strong class="jxr_keyword">public</strong> GetTableDescriptorsResponse getTableDescriptors(
+<a class="jxr_linenumber" name="2298" href="#2298">2298</a> 	      RpcController controller, GetTableDescriptorsRequest req) <strong class="jxr_keyword">throws</strong> ServiceException {
+<a class="jxr_linenumber" name="2299" href="#2299">2299</a>     GetTableDescriptorsResponse.Builder builder = GetTableDescriptorsResponse.newBuilder();
+<a class="jxr_linenumber" name="2300" href="#2300">2300</a>     <strong class="jxr_keyword">if</strong> (req.getTableNamesCount() == 0) {
+<a class="jxr_linenumber" name="2301" href="#2301">2301</a>       <em class="jxr_comment">// request for all TableDescriptors</em>
+<a class="jxr_linenumber" name="2302" href="#2302">2302</a>       Map&lt;String, HTableDescriptor&gt; descriptors = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="2303" href="#2303">2303</a>       <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="2304" href="#2304">2304</a>         descriptors = <strong class="jxr_keyword">this</strong>.tableDescriptors.getAll();
+<a class="jxr_linenumber" name="2305" href="#2305">2305</a>       } <strong class="jxr_keyword">catch</strong> (IOException e) {
+<a class="jxr_linenumber" name="2306" href="#2306">2306</a>           LOG.warn(<span class="jxr_string">"Failed getting all descriptors"</span>, e);
+<a class="jxr_linenumber" name="2307" href="#2307">2307</a>       }
+<a class="jxr_linenumber" name="2308" href="#2308">2308</a>       <strong class="jxr_keyword">if</strong> (descriptors != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="2309" href="#2309">2309</a>         <strong class="jxr_keyword">for</strong> (HTableDescriptor htd : descriptors.values()) {
+<a class="jxr_linenumber" name="2310" href="#2310">2310</a>           builder.addTableSchema(htd.convert());
+<a class="jxr_linenumber" name="2311" href="#2311">2311</a>         }
+<a class="jxr_linenumber" name="2312" href="#2312">2312</a>       }
+<a class="jxr_linenumber" name="2313" href="#2313">2313</a>     }
+<a class="jxr_linenumber" name="2314" href="#2314">2314</a>     <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="2315" href="#2315">2315</a>       <strong class="jxr_keyword">for</strong> (String s: req.getTableNamesList()) {
+<a class="jxr_linenumber" name="2316" href="#2316">2316</a>         <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html">HTableDescriptor</a> htd = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="2317" href="#2317">2317</a>         <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="2318" href="#2318">2318</a>           htd = <strong class="jxr_keyword">this</strong>.tableDescriptors.get(s);
+<a class="jxr_linenumber" name="2319" href="#2319">2319</a>         } <strong class="jxr_keyword">catch</strong> (IOException e) {
+<a class="jxr_linenumber" name="2320" href="#2320">2320</a>           LOG.warn(<span class="jxr_string">"Failed getting descriptor for "</span> + s, e);
+<a class="jxr_linenumber" name="2321" href="#2321">2321</a>         }
+<a class="jxr_linenumber" name="2322" href="#2322">2322</a>         <strong class="jxr_keyword">if</strong> (htd == <strong class="jxr_keyword">null</strong>) <strong class="jxr_keyword">continue</strong>;
+<a class="jxr_linenumber" name="2323" href="#2323">2323</a>         builder.addTableSchema(htd.convert());
+<a class="jxr_linenumber" name="2324" href="#2324">2324</a>       }
+<a class="jxr_linenumber" name="2325" href="#2325">2325</a>     }
+<a class="jxr_linenumber" name="2326" href="#2326">2326</a>     <strong class="jxr_keyword">return</strong> builder.build();
+<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>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="2330" href="#2330">2330</a> <em class="jxr_javadoccomment">   * Compute the average load across all region servers.</em>
+<a class="jxr_linenumber" name="2331" href="#2331">2331</a> <em class="jxr_javadoccomment">   * Currently, this uses a very naive computation - just uses the number of</em>
+<a class="jxr_linenumber" name="2332" href="#2332">2332</a> <em class="jxr_javadoccomment">   * regions being served, ignoring stats about number of requests.</em>
+<a class="jxr_linenumber" name="2333" href="#2333">2333</a> <em class="jxr_javadoccomment">   * @return the average load</em>
+<a class="jxr_linenumber" name="2334" href="#2334">2334</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="2335" href="#2335">2335</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">double</strong> getAverageLoad() {
+<a class="jxr_linenumber" name="2336" href="#2336">2336</a>     <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.assignmentManager == <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="2337" href="#2337">2337</a>       <strong class="jxr_keyword">return</strong> 0;
+<a class="jxr_linenumber" name="2338" href="#2338">2338</a>     }
+<a class="jxr_linenumber" name="2339" href="#2339">2339</a> 
+<a class="jxr_linenumber" name="2340" href="#2340">2340</a>     <a href="../../../../../org/apache/hadoop/hbase/master/RegionStates.html">RegionStates</a> regionStates = <strong class="jxr_keyword">this</strong>.assignmentManager.getRegionStates();
+<a class="jxr_linenumber" name="2341" href="#2341">2341</a>     <strong class="jxr_keyword">if</strong> (regionStates == <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="2342" href="#2342">2342</a>       <strong class="jxr_keyword">return</strong> 0;
+<a class="jxr_linenumber" name="2343" href="#2343">2343</a>     }
+<a class="jxr_linenumber" name="2344" href="#2344">2344</a>     <strong class="jxr_keyword">return</strong> regionStates.getAverageLoad();
+<a class="jxr_linenumber" name="2345" href="#2345">2345</a>   }
+<a class="jxr_linenumber" name="2346" href="#2346">2346</a> 
+<a class="jxr_linenumber" name="2347" href="#2347">2347</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="2348" href="#2348">2348</a> <em class="jxr_javadoccomment">   * Offline specified region from master's in-memory state. It will not attempt to</em>
+<a class="jxr_linenumber" name="2349" href="#2349">2349</a> <em class="jxr_javadoccomment">   * reassign the region as in unassign.</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> <em class="jxr_javadoccomment">   * This is a special method that should be used by experts or hbck.</em>
+<a class="jxr_linenumber" name="2352" href="#2352">2352</a> <em class="jxr_javadoccomment">   * </em>
+<a class="jxr_linenumber" name="2353" href="#2353">2353</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="2354" href="#2354">2354</a>   @Override
+<a class="jxr_linenumber" name="2355" href="#2355">2355</a>   <strong class="jxr_keyword">public</strong> OfflineRegionResponse offlineRegion(RpcController controller, OfflineRegionRequest request)
+<a class="jxr_linenumber" name="2356" href="#2356">2356</a>   <strong class="jxr_keyword">throws</strong> ServiceException {
+<a class="jxr_linenumber" name="2357" href="#2357">2357</a>     <strong class="jxr_keyword">final</strong> byte [] regionName = request.getRegion().getValue().toByteArray();
+<a class="jxr_linenumber" name="2358" href="#2358">2358</a>     RegionSpecifierType type = request.getRegion().getType();
+<a class="jxr_linenumber" name="2359" href="#2359">2359</a>     <strong class="jxr_keyword">if</strong> (type != RegionSpecifierType.REGION_NAME) {
+<a class="jxr_linenumber" name="2360" href="#2360">2360</a>       LOG.warn(<span class="jxr_string">"moveRegion specifier type: expected: "</span> + RegionSpecifierType.REGION_NAME
+<a class="jxr_linenumber" name="2361" href="#2361">2361</a>         + <span class="jxr_string">" actual: "</span> + type);
+<a class="jxr_linenumber" name="2362" href="#2362">2362</a>     }
+<a class="jxr_linenumber" name="2363" href="#2363">2363</a> 
+<a class="jxr_linenumber" name="2364" href="#2364">2364</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="2365" href="#2365">2365</a>       Pair&lt;HRegionInfo, ServerName&gt; pair =
+<a class="jxr_linenumber" name="2366" href="#2366">2366</a>         MetaReader.getRegion(<strong class="jxr_keyword">this</strong>.catalogTracker, regionName);
+<a class="jxr_linenumber" name="2367" href="#2367">2367</a>       <strong class="jxr_keyword">if</strong> (pair == <strong class="jxr_keyword">null</strong>) <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> UnknownRegionException(Bytes.toStringBinary(regionName));
+<a class="jxr_linenumber" name="2368" href="#2368">2368</a>       <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html">HRegionInfo</a> hri = pair.getFirst();
+<a class="jxr_linenumber" name="2369" href="#2369">2369</a>       <strong class="jxr_keyword">if</strong> (cpHost != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="2370" href="#2370">2370</a>         cpHost.preRegionOffline(hri);
+<a class="jxr_linenumber" name="2371" href="#2371">2371</a>       }
+<a class="jxr_linenumber" name="2372" href="#2372">2372</a>       <strong class="jxr_keyword">this</strong>.assignmentManager.regionOffline(hri);
+<a class="jxr_linenumber" name="2373" href="#2373">2373</a>       <strong class="jxr_keyword">if</strong> (cpHost != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="2374" href="#2374">2374</a>         cpHost.postRegionOffline(hri);
+<a class="jxr_linenumber" name="2375" href="#2375">2375</a>       }
+<a class="jxr_linenumber" name="2376" href="#2376">2376</a>     } <strong class="jxr_keyword">catch</strong> (IOException ioe) {
+<a class="jxr_linenumber" name="2377" href="#2377">2377</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(ioe);
+<a class="jxr_linenumber" name="2378" href="#2378">2378</a>     }
+<a class="jxr_linenumber" name="2379" href="#2379">2379</a>     <strong class="jxr_keyword">return</strong> OfflineRegionResponse.newBuilder().build();
+<a class="jxr_linenumber" name="2380" href="#2380">2380</a>   }
+<a class="jxr_linenumber" name="2381" href="#2381">2381</a> 
+<a class="jxr_linenumber" name="2382" href="#2382">2382</a>   @Override
+<a class="jxr_linenumber" name="2383" href="#2383">2383</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> registerService(Service instance) {
+<a class="jxr_linenumber" name="2384" href="#2384">2384</a>     <em class="jxr_comment">/*</em>
+<a class="jxr_linenumber" name="2385" href="#2385">2385</a> <em class="jxr_comment">     * No stacking of instances is allowed for a single service name</em>
+<a class="jxr_linenumber" name="2386" href="#2386">2386</a> <em class="jxr_comment">     */</em>
+<a class="jxr_linenumber" name="2387" href="#2387">2387</a>     Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();
+<a class="jxr_linenumber" name="2388" href="#2388">2388</a>     <strong class="jxr_keyword">if</strong> (coprocessorServiceHandlers.containsKey(serviceDesc.getFullName())) {
+<a class="jxr_linenumber" name="2389" href="#2389">2389</a>       LOG.error(<span class="jxr_string">"Coprocessor service "</span>+serviceDesc.getFullName()+
+<a class="jxr_linenumber" name="2390" href="#2390">2390</a>           <span class="jxr_string">" already registered, rejecting request from "</span>+instance
+<a class="jxr_linenumber" name="2391" href="#2391">2391</a>       );
+<a class="jxr_linenumber" name="2392" href="#2392">2392</a>       <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="2393" href="#2393">2393</a>     }
+<a class="jxr_linenumber" name="2394" href="#2394">2394</a> 
+<a class="jxr_linenumber" name="2395" href="#2395">2395</a>     coprocessorServiceHandlers.put(serviceDesc.getFullName(), instance);
+<a class="jxr_linenumber" name="2396" href="#2396">2396</a>     <strong class="jxr_keyword">if</strong> (LOG.isDebugEnabled()) {
+<a class="jxr_linenumber" name="2397" href="#2397">2397</a>       LOG.debug(<span class="jxr_string">"Registered master coprocessor service: service="</span>+serviceDesc.getFullName());
+<a class="jxr_linenumber" name="2398" href="#2398">2398</a>     }
+<a class="jxr_linenumber" name="2399" href="#2399">2399</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="2400" href="#2400">2400</a>   }
+<a class="jxr_linenumber" name="2401" href="#2401">2401</a> 
+<a class="jxr_linenumber" name="2402" href="#2402">2402</a>   @Override
+<a class="jxr_linenumber" name="2403" href="#2403">2403</a>   <strong class="jxr_keyword">public</strong> ClientProtos.CoprocessorServiceResponse execMasterService(<strong class="jxr_keyword">final</strong> RpcController controller,
+<a class="jxr_linenumber" name="2404" href="#2404">2404</a>       <strong class="jxr_keyword">final</strong> ClientProtos.CoprocessorServiceRequest request) <strong class="jxr_keyword">throws</strong> ServiceException {
+<a class="jxr_linenumber" name="2405" href="#2405">2405</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="2406" href="#2406">2406</a>       <a href="../../../../../org/apache/hadoop/hbase/ipc/ServerRpcController.html">ServerRpcController</a> execController = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/ServerRpcController.html">ServerRpcController</a>();
+<a class="jxr_linenumber" name="2407" href="#2407">2407</a> 
+<a class="jxr_linenumber" name="2408" href="#2408">2408</a>       ClientProtos.CoprocessorServiceCall call = request.getCall();
+<a class="jxr_linenumber" name="2409" href="#2409">2409</a>       String serviceName = call.getServiceName();
+<a class="jxr_linenumber" name="2410" href="#2410">2410</a>       String methodName = call.getMethodName();
+<a class="jxr_linenumber" name="2411" href="#2411">2411</a>       <strong class="jxr_keyword">if</strong> (!coprocessorServiceHandlers.containsKey(serviceName)) {
+<a class="jxr_linenumber" name="2412" href="#2412">2412</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/exceptions/UnknownProtocolException.html">UnknownProtocolException</a>(<strong class="jxr_keyword">null</strong>,
+<a class="jxr_linenumber" name="2413" href="#2413">2413</a>             <span class="jxr_string">"No registered master coprocessor service found for name "</span>+serviceName);
+<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>       Service service = coprocessorServiceHandlers.get(serviceName);
+<a class="jxr_linenumber" name="2417" href="#2417">2417</a>       Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();
+<a class="jxr_linenumber" name="2418" href="#2418">2418</a>       Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);
+<a class="jxr_linenumber" name="2419" href="#2419">2419</a>       <strong class="jxr_keyword">if</strong> (methodDesc == <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="2420" href="#2420">2420</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/exceptions/UnknownProtocolException.html">UnknownProtocolException</a>(service.getClass(),
+<a class="jxr_linenumber" name="2421" href="#2421">2421</a>             <span class="jxr_string">"Unknown method "</span>+methodName+<span class="jxr_string">" called on master service "</span>+serviceName);
+<a class="jxr_linenumber" name="2422" href="#2422">2422</a>       }
+<a class="jxr_linenumber" name="2423" href="#2423">2423</a> 
+<a class="jxr_linenumber" name="2424" href="#2424">2424</a>       <em class="jxr_comment">//invoke the method</em>
+<a class="jxr_linenumber" name="2425" href="#2425">2425</a>       Message execRequest = service.getRequestPrototype(methodDesc).newBuilderForType()
+<a class="jxr_linenumber" name="2426" href="#2426">2426</a>           .mergeFrom(call.getRequest()).build();
+<a class="jxr_linenumber" name="2427" href="#2427">2427</a>       <strong class="jxr_keyword">final</strong> Message.Builder responseBuilder =
+<a class="jxr_linenumber" name="2428" href="#2428">2428</a>           service.getResponsePrototype(methodDesc).newBuilderForType();
+<a class="jxr_linenumber" name="2429" href="#2429">2429</a>       service.callMethod(methodDesc, execController, execRequest, <strong class="jxr_keyword">new</strong> RpcCallback&lt;Message&gt;() {
+<a class="jxr_linenumber" name="2430" href="#2430">2430</a>         @Override
+<a class="jxr_linenumber" name="2431" href="#2431">2431</a>         <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> run(Message message) {
+<a class="jxr_linenumber" name="2432" href="#2432">2432</a>           <strong class="jxr_keyword">if</strong> (message != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="2433" href="#2433">2433</a>             responseBuilder.mergeFrom(message);
+<a class="jxr_linenumber" name="2434" href="#2434">2434</a>           }
+<a class="jxr_linenumber" name="2435" href="#2435">2435</a>         }
+<a class="jxr_linenumber" name="2436" href="#2436">2436</a>       });
+<a class="jxr_linenumber" name="2437" href="#2437">2437</a>       Message execResult = responseBuilder.build();
+<a class="jxr_linenumber" name="2438" href="#2438">2438</a> 
+<a class="jxr_linenumber" name="2439" href="#2439">2439</a>       <strong class="jxr_keyword">if</strong> (execController.getFailedOn() != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="2440" href="#2440">2440</a>         <strong class="jxr_keyword">throw</strong> execController.getFailedOn();
+<a class="jxr_linenumber" name="2441" href="#2441">2441</a>       }
+<a class="jxr_linenumber" name="2442" href="#2442">2442</a>       ClientProtos.CoprocessorServiceResponse.Builder builder =
+<a class="jxr_linenumber" name="2443" href="#2443">2443</a>           ClientProtos.CoprocessorServiceResponse.newBuilder();
+<a class="jxr_linenumber" name="2444" href="#2444">2444</a>       builder.setRegion(RequestConverter.buildRegionSpecifier(
+<a class="jxr_linenumber" name="2445" href="#2445">2445</a>           RegionSpecifierType.REGION_NAME, HConstants.EMPTY_BYTE_ARRAY));
+<a class="jxr_linenumber" name="2446" href="#2446">2446</a>       builder.setValue(
+<a class="jxr_linenumber" name="2447" href="#2447">2447</a>           builder.getValueBuilder().setName(execResult.getClass().getName())
+<a class="jxr_linenumber" name="2448" href="#2448">2448</a>               .setValue(execResult.toByteString()));
+<a class="jxr_linenumber" name="2449" href="#2449">2449</a>       <strong class="jxr_keyword">return</strong> builder.build();
+<a class="jxr_linenumber" name="2450" href="#2450">2450</a>     } <strong class="jxr_keyword">catch</strong> (IOException ie) {
+<a class="jxr_linenumber" name="2451" href="#2451">2451</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(ie);
+<a class="jxr_linenumber" name="2452" href="#2452">2452</a>     }
+<a class="jxr_linenumber" name="2453" href="#2453">2453</a>   }
+<a class="jxr_linenumber" name="2454" href="#2454">2454</a> 
+<a class="jxr_linenumber" name="2455" href="#2455">2455</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="2456" href="#2456">2456</a> <em class="jxr_javadoccomment">   * Utility for constructing an instance of the passed HMaster class.</em>
+<a class="jxr_linenumber" name="2457" href="#2457">2457</a> <em class="jxr_javadoccomment">   * @param masterClass</em>
+<a class="jxr_linenumber" name="2458" href="#2458">2458</a> <em class="jxr_javadoccomment">   * @param conf</em>
+<a class="jxr_linenumber" name="2459" href="#2459">2459</a> <em class="jxr_javadoccomment">   * @return HMaster instance.</em>
+<a class="jxr_linenumber" name="2460" href="#2460">2460</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="2461" href="#2461">2461</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html">HMaster</a> constructMaster(Class&lt;? <strong class="jxr_keyword">extends</strong> HMaster&gt; masterClass,
+<a class="jxr_linenumber" name="2462" href="#2462">2462</a>       <strong class="jxr_keyword">final</strong> Configuration conf)  {
+<a class="jxr_linenumber" name="2463" href="#2463">2463</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="2464" href="#2464">2464</a>       Constructor&lt;? <strong class="jxr_keyword">extends</strong> HMaster&gt; c =
+<a class="jxr_linenumber" name="2465" href="#2465">2465</a>         masterClass.getConstructor(Configuration.<strong class="jxr_keyword">class</strong>);
+<a class="jxr_linenumber" name="2466" href="#2466">2466</a>       <strong class="jxr_keyword">return</strong> c.newInstance(conf);
+<a class="jxr_linenumber" name="2467" href="#2467">2467</a>     } <strong class="jxr_keyword">catch</strong> (InvocationTargetException ite) {
+<a class="jxr_linenumber" name="2468" href="#2468">2468</a>       Throwable target = ite.getTargetException() != <strong class="jxr_keyword">null</strong>?
+<a class="jxr_linenumber" name="2469" href="#2469">2469</a>         ite.getTargetException(): ite;
+<a class="jxr_linenumber" name="2470" href="#2470">2470</a>       <strong class="jxr_keyword">if</strong> (target.getCause() != <strong class="jxr_keyword">null</strong>) target = target.getCause();
 <a class="jxr_linenumber" name="2471" href="#2471">2471</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> RuntimeException(<span class="jxr_string">"Failed construction of Master: "</span> +
-<a class="jxr_linenumber" name="2472" href="#2472">2472</a>         masterClass.toString() + ((e.getCause() != <strong class="jxr_keyword">null</strong>)?
-<a class="jxr_linenumber" name="2473" href="#2473">2473</a>           e.getCause().getMessage(): <span class="jxr_string">""</span>), e);
-<a class="jxr_linenumber" name="2474" href="#2474">2474</a>     }
-<a class="jxr_linenumber" name="2475" href="#2475">2475</a>   }
-<a class="jxr_linenumber" name="2476" href="#2476">2476</a> 
-<a class="jxr_linenumber" name="2477" href="#2477">2477</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2478" href="#2478">2478</a> <em class="jxr_javadoccomment">   * @see org.apache.hadoop.hbase.master.HMasterCommandLine</em>
-<a class="jxr_linenumber" name="2479" href="#2479">2479</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2480" href="#2480">2480</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> main(String [] args) {
-<a class="jxr_linenumber" name="2481" href="#2481">2481</a>     VersionInfo.logVersion();
-<a class="jxr_linenumber" name="2482" href="#2482">2482</a>     <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/master/HMasterCommandLine.html">HMasterCommandLine</a>(HMaster.<strong class="jxr_keyword">class</strong>).doMain(args);
-<a class="jxr_linenumber" name="2483" href="#2483">2483</a>   }
-<a class="jxr_linenumber" name="2484" href="#2484">2484</a> 
-<a class="jxr_linenumber" name="2485" href="#2485">2485</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html">HFileCleaner</a> getHFileCleaner() {
-<a class="jxr_linenumber" name="2486" href="#2486">2486</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.hfileCleaner;
-<a class="jxr_linenumber" name="2487" href="#2487">2487</a>   }
-<a class="jxr_linenumber" name="2488" href="#2488">2488</a> 
-<a class="jxr_linenumber" name="2489" href="#2489">2489</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2490" href="#2490">2490</a> <em class="jxr_javadoccomment">   * Exposed for TESTING!</em>
-<a class="jxr_linenumber" name="2491" href="#2491">2491</a> <em class="jxr_javadoccomment">   * @return the underlying snapshot manager</em>
-<a class="jxr_linenumber" name="2492" href="#2492">2492</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2493" href="#2493">2493</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html">SnapshotManager</a> getSnapshotManagerForTesting() {
-<a class="jxr_linenumber" name="2494" href="#2494">2494</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.snapshotManager;
-<a class="jxr_linenumber" name="2495" href="#2495">2495</a>   }
-<a class="jxr_linenumber" name="2496" href="#2496">2496</a> 
-<a class="jxr_linenumber" name="2497" href="#2497">2497</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2498" href="#2498">2498</a> <em class="jxr_javadoccomment">   * Triggers an asynchronous attempt to take a snapshot.</em>
-<a class="jxr_linenumber" name="2499" href="#2499">2499</a> <em class="jxr_javadoccomment">   * {@inheritDoc}</em>
-<a class="jxr_linenumber" name="2500" href="#2500">2500</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2501" href="#2501">2501</a>   @Override
-<a class="jxr_linenumber" name="2502" href="#2502">2502</a>   <strong class="jxr_keyword">public</strong> TakeSnapshotResponse snapshot(RpcController controller, TakeSnapshotRequest request)
-<a class="jxr_linenumber" name="2503" href="#2503">2503</a>       <strong class="jxr_keyword">throws</strong> ServiceException {
-<a class="jxr_linenumber" name="2504" href="#2504">2504</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="2505" href="#2505">2505</a>       <strong class="jxr_keyword">this</strong>.snapshotManager.checkSnapshotSupport();
-<a class="jxr_linenumber" name="2506" href="#2506">2506</a>     } <strong class="jxr_keyword">catch</strong> (UnsupportedOperationException e) {
-<a class="jxr_linenumber" name="2507" href="#2507">2507</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(e);
-<a class="jxr_linenumber" name="2508" href="#2508">2508</a>     }
-<a class="jxr_linenumber" name="2509" href="#2509">2509</a> 
-<a class="jxr_linenumber" name="2510" href="#2510">2510</a>     LOG.debug(<span class="jxr_string">"Submitting snapshot request for:"</span> +
-<a class="jxr_linenumber" name="2511" href="#2511">2511</a>         ClientSnapshotDescriptionUtils.toString(request.getSnapshot()));
-<a class="jxr_linenumber" name="2512" href="#2512">2512</a>     <em class="jxr_comment">// get the snapshot information</em>
-<a class="jxr_linenumber" name="2513" href="#2513">2513</a>     SnapshotDescription snapshot = SnapshotDescriptionUtils.validate(request.getSnapshot(),
-<a class="jxr_linenumber" name="2514" href="#2514">2514</a>       <strong class="jxr_keyword">this</strong>.conf);
-<a class="jxr_linenumber" name="2515" href="#2515">2515</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="2516" href="#2516">2516</a>       snapshotManager.takeSnapshot(snapshot);
-<a class="jxr_linenumber" name="2517" href="#2517">2517</a>     } <strong class="jxr_keyword">catch</strong> (IOException e) {
-<a class="jxr_linenumber" name="2518" href="#2518">2518</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(e);
-<a class="jxr_linenumber" name="2519" href="#2519">2519</a>     }
-<a class="jxr_linenumber" name="2520" href="#2520">2520</a> 
-<a class="jxr_linenumber" name="2521" href="#2521">2521</a>     <em class="jxr_comment">// send back the max amount of time the client should wait for the snapshot to complete</em>
-<a class="jxr_linenumber" name="2522" href="#2522">2522</a>     <strong class="jxr_keyword">long</strong> waitTime = SnapshotDescriptionUtils.getMaxMasterTimeout(conf, snapshot.getType(),
-<a class="jxr_linenumber" name="2523" href="#2523">2523</a>       SnapshotDescriptionUtils.DEFAULT_MAX_WAIT_TIME);
-<a class="jxr_linenumber" name="2524" href="#2524">2524</a>     <strong class="jxr_keyword">return</strong> TakeSnapshotResponse.newBuilder().setExpectedTimeout(waitTime).build();
-<a class="jxr_linenumber" name="2525" href="#2525">2525</a>   }
-<a class="jxr_linenumber" name="2526" href="#2526">2526</a> 
-<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> <em class="jxr_javadoccomment">   * List the currently available/stored snapshots. Any in-progress snapshots are ignored</em>
-<a class="jxr_linenumber" name="2529" href="#2529">2529</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2530" href="#2530">2530</a>   @Override
-<a class="jxr_linenumber" name="2531" href="#2531">2531</a>   <strong class="jxr_keyword">public</strong> ListSnapshotResponse getCompletedSnapshots(RpcController controller,
-<a class="jxr_linenumber" name="2532" href="#2532">2532</a>       ListSnapshotRequest request) <strong class="jxr_keyword">throws</strong> ServiceException {
-<a class="jxr_linenumber" name="2533" href="#2533">2533</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="2534" href="#2534">2534</a>       ListSnapshotResponse.Builder builder = ListSnapshotResponse.newBuilder();
-<a class="jxr_linenumber" name="2535" href="#2535">2535</a>       List&lt;SnapshotDescription&gt; snapshots = snapshotManager.getCompletedSnapshots();
-<a class="jxr_linenumber" name="2536" href="#2536">2536</a> 
-<a class="jxr_linenumber" name="2537" href="#2537">2537</a>       <em class="jxr_comment">// convert to protobuf</em>
-<a class="jxr_linenumber" name="2538" href="#2538">2538</a>       <strong class="jxr_keyword">for</strong> (SnapshotDescription snapshot : snapshots) {
-<a class="jxr_linenumber" name="2539" href="#2539">2539</a>         builder.addSnapshots(snapshot);
-<a class="jxr_linenumber" name="2540" href="#2540">2540</a>       }
-<a class="jxr_linenumber" name="2541" href="#2541">2541</a>       <strong class="jxr_keyword">return</strong> builder.build();
-<a class="jxr_linenumber" name="2542" href="#2542">2542</a>     } <strong class="jxr_keyword">catch</strong> (IOException e) {
-<a class="jxr_linenumber" name="2543" href="#2543">2543</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(e);
-<a class="jxr_linenumber" name="2544" href="#2544">2544</a>     }
-<a class="jxr_linenumber" name="2545" href="#2545">2545</a>   }
-<a class="jxr_linenumber" name="2546" href="#2546">2546</a> 
-<a class="jxr_linenumber" name="2547" href="#2547">2547</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2548" href="#2548">2548</a> <em class="jxr_javadoccomment">   * Execute Delete Snapshot operation.</em>
-<a class="jxr_linenumber" name="2549" href="#2549">2549</a> <em class="jxr_javadoccomment">   * @return DeleteSnapshotResponse (a protobuf wrapped void) if the snapshot existed and was</em>
-<a class="jxr_linenumber" name="2550" href="#2550">2550</a> <em class="jxr_javadoccomment">   *    deleted properly.</em>
-<a class="jxr_linenumber" name="2551" href="#2551">2551</a> <em class="jxr_javadoccomment">   * @throws ServiceException wrapping SnapshotDoesNotExistException if specified snapshot did not</em>
-<a class="jxr_linenumber" name="2552" href="#2552">2552</a> <em class="jxr_javadoccomment">   *    exist.</em>
-<a class="jxr_linenumber" name="2553" href="#2553">2553</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2554" href="#2554">2554</a>   @Override
-<a class="jxr_linenumber" name="2555" href="#2555">2555</a>   <strong class="jxr_keyword">public</strong> DeleteSnapshotResponse deleteSnapshot(RpcController controller,
-<a class="jxr_linenumber" name="2556" href="#2556">2556</a>       DeleteSnapshotRequest request) <strong class="jxr_keyword">throws</strong> ServiceException {
-<a class="jxr_linenumber" name="2557" href="#2557">2557</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="2558" href="#2558">2558</a>       <strong class="jxr_keyword">this</strong>.snapshotManager.checkSnapshotSupport();
-<a class="jxr_linenumber" name="2559" href="#2559">2559</a>     } <strong class="jxr_keyword">catch</strong> (UnsupportedOperationException e) {
-<a class="jxr_linenumber" name="2560" href="#2560">2560</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(e);
-<a class="jxr_linenumber" name="2561" href="#2561">2561</a>     }
-<a class="jxr_linenumber" name="2562" href="#2562">2562</a> 
-<a class="jxr_linenumber" name="2563" href="#2563">2563</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="2564" href="#2564">2564</a>       snapshotManager.deleteSnapshot(request.getSnapshot());
-<a class="jxr_linenumber" name="2565" href="#2565">2565</a>       <strong class="jxr_keyword">return</strong> DeleteSnapshotResponse.newBuilder().build();
-<a class="jxr_linenumber" name="2566" href="#2566">2566</a>     } <strong class="jxr_keyword">catch</strong> (IOException e) {
-<a class="jxr_linenumber" name="2567" href="#2567">2567</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(e);
-<a class="jxr_linenumber" name="2568" href="#2568">2568</a>     }
-<a class="jxr_linenumber" name="2569" href="#2569">2569</a>   }
-<a class="jxr_linenumber" name="2570" href="#2570">2570</a> 
-<a class="jxr_linenumber" name="2571" href="#2571">2571</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2572" href="#2572">2572</a> <em class="jxr_javadoccomment">   * Checks if the specified snapshot is done.</em>
-<a class="jxr_linenumber" name="2573" href="#2573">2573</a> <em class="jxr_javadoccomment">   * @return true if the snapshot is in file system ready to use,</em>
-<a class="jxr_linenumber" name="2574" href="#2574">2574</a> <em class="jxr_javadoccomment">   *   false if the snapshot is in the process of completing</em>
-<a class="jxr_linenumber" name="2575" href="#2575">2575</a> <em class="jxr_javadoccomment">   * @throws ServiceException wrapping UnknownSnapshotException if invalid snapshot, or</em>
-<a class="jxr_linenumber" name="2576" href="#2576">2576</a> <em class="jxr_javadoccomment">   *  a wrapped HBaseSnapshotException with progress failure reason.</em>
-<a class="jxr_linenumber" name="2577" href="#2577">2577</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2578" href="#2578">2578</a>   @Override
-<a class="jxr_linenumber" name="2579" href="#2579">2579</a>   <strong class="jxr_keyword">public</strong> IsSnapshotDoneResponse isSnapshotDone(RpcController controller,
-<a class="jxr_linenumber" name="2580" href="#2580">2580</a>       IsSnapshotDoneRequest request) <strong class="jxr_keyword">throws</strong> ServiceException {
-<a class="jxr_linenumber" name="2581" href="#2581">2581</a>     LOG.debug(<span class="jxr_string">"Checking to see if snapshot from request:"</span> +
-<a class="jxr_linenumber" name="2582" href="#2582">2582</a>         ClientSnapshotDescriptionUtils.toString(request.getSnapshot()) + <span class="jxr_string">" is done"</span>);
-<a class="jxr_linenumber" name="2583" href="#2583">2583</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="2584" href="#2584">2584</a>       IsSnapshotDoneResponse.Builder builder = IsSnapshotDoneResponse.newBuilder();
-<a class="jxr_linenumber" name="2585" href="#2585">2585</a>       <strong class="jxr_keyword">boolean</strong> done = snapshotManager.isSnapshotDone(request.getSnapshot());
-<a class="jxr_linenumber" name="2586" href="#2586">2586</a>       builder.setDone(done);
-<a class="jxr_linenumber" name="2587" href="#2587">2587</a>       <strong class="jxr_keyword">return</strong> builder.build();
-<a class="jxr_linenumber" name="2588" href="#2588">2588</a>     } <strong class="jxr_keyword">catch</strong> (IOException e) {
-<a class="jxr_linenumber" name="2589" href="#2589">2589</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(e);
-<a class="jxr_linenumber" name="2590" href="#2590">2590</a>     }
-<a class="jxr_linenumber" name="2591" href="#2591">2591</a>   }
-<a class="jxr_linenumber" name="2592" href="#2592">2592</a> 
-<a class="jxr_linenumber" name="2593" href="#2593">2593</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2594" href="#2594">2594</a> <em class="jxr_javadoccomment">   * Execute Restore/Clone snapshot operation.</em>
-<a class="jxr_linenumber" name="2595" href="#2595">2595</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="2596" href="#2596">2596</a> <em class="jxr_javadoccomment">   * &lt;p&gt;If the specified table exists a "Restore" is executed, replacing the table</em>
-<a class="jxr_linenumber" name="2597" href="#2597">2597</a> <em class="jxr_javadoccomment">   * schema and directory data with the content of the snapshot.</em>
-<a class="jxr_linenumber" name="2598" href="#2598">2598</a> <em class="jxr_javadoccomment">   * The table must be disabled, or a UnsupportedOperationException will be thrown.</em>
-<a class="jxr_linenumber" name="2599" href="#2599">2599</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="2600" href="#2600">2600</a> <em class="jxr_javadoccomment">   * &lt;p&gt;If the table doesn't exist a "Clone" is executed, a new table is created</em>
-<a class="jxr_linenumber" name="2601" href="#2601">2601</a> <em class="jxr_javadoccomment">   * using the schema at the time of the snapshot, and the content of the snapshot.</em>
+<a class="jxr_linenumber" name="2472" href="#2472">2472</a>         masterClass.toString(), target);
+<a class="jxr_linenumber" name="2473" href="#2473">2473</a>     } <strong class="jxr_keyword">catch</strong> (Exception e) {
+<a class="jxr_linenumber" name="2474" href="#2474">2474</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> RuntimeException(<span class="jxr_string">"Failed construction of Master: "</span> +
+<a class="jxr_linenumber" name="2475" href="#2475">2475</a>         masterClass.toString() + ((e.getCause() != <strong class="jxr_keyword">null</strong>)?
+<a class="jxr_linenumber" name="2476" href="#2476">2476</a>           e.getCause().getMessage(): <span class="jxr_string">""</span>), e);
+<a class="jxr_linenumber" name="2477" href="#2477">2477</a>     }
+<a class="jxr_linenumber" name="2478" href="#2478">2478</a>   }
+<a class="jxr_linenumber" name="2479" href="#2479">2479</a> 
+<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> <em class="jxr_javadoccomment">   * @see org.apache.hadoop.hbase.master.HMasterCommandLine</em>
+<a class="jxr_linenumber" name="2482" href="#2482">2482</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="2483" href="#2483">2483</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> main(String [] args) {
+<a class="jxr_linenumber" name="2484" href="#2484">2484</a>     VersionInfo.logVersion();
+<a class="jxr_linenumber" name="2485" href="#2485">2485</a>     <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/master/HMasterCommandLine.html">HMasterCommandLine</a>(HMaster.<strong class="jxr_keyword">class</strong>).doMain(args);
+<a class="jxr_linenumber" name="2486" href="#2486">2486</a>   }
+<a class="jxr_linenumber" name="2487" href="#2487">2487</a> 
+<a class="jxr_linenumber" name="2488" href="#2488">2488</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html">HFileCleaner</a> getHFileCleaner() {
+<a class="jxr_linenumber" name="2489" href="#2489">2489</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.hfileCleaner;
+<a class="jxr_linenumber" name="2490" href="#2490">2490</a>   }
+<a class="jxr_linenumber" name="2491" href="#2491">2491</a> 
+<a class="jxr_linenumber" name="2492" href="#2492">2492</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="2493" href="#2493">2493</a> <em class="jxr_javadoccomment">   * Exposed for TESTING!</em>
+<a class="jxr_linenumber" name="2494" href="#2494">2494</a> <em class="jxr_javadoccomment">   * @return the underlying snapshot manager</em>
+<a class="jxr_linenumber" name="2495" href="#2495">2495</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="2496" href="#2496">2496</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html">SnapshotManager</a> getSnapshotManagerForTesting() {
+<a class="jxr_linenumber" name="2497" href="#2497">2497</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.snapshotManager;
+<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>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="2501" href="#2501">2501</a> <em class="jxr_javadoccomment">   * Triggers an asynchronous attempt to take a snapshot.</em>
+<a class="jxr_linenumber" name="2502" href="#2502">2502</a> <em class="jxr_javadoccomment">   * {@inheritDoc}</em>
+<a class="jxr_linenumber" name="2503" href="#2503">2503</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="2504" href="#2504">2504</a>   @Override
+<a class="jxr_linenumber" name="2505" href="#2505">2505</a>   <strong class="jxr_keyword">public</strong> TakeSnapshotResponse snapshot(RpcController controller, TakeSnapshotRequest request)
+<a class="jxr_linenumber" name="2506" href="#2506">2506</a>       <strong class="jxr_keyword">throws</strong> ServiceException {
+<a class="jxr_linenumber" name="2507" href="#2507">2507</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="2508" href="#2508">2508</a>       <strong class="jxr_keyword">this</strong>.snapshotManager.checkSnapshotSupport();
+<a class="jxr_linenumber" name="2509" href="#2509">2509</a>     } <strong class="jxr_keyword">catch</strong> (UnsupportedOperationException e) {
+<a class="jxr_linenumber" name="2510" href="#2510">2510</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(e);
+<a class="jxr_linenumber" name="2511" href="#2511">2511</a>     }
+<a class="jxr_linenumber" name="2512" href="#2512">2512</a> 
+<a class="jxr_linenumber" name="2513" href="#2513">2513</a>     LOG.debug(<span class="jxr_string">"Submitting snapshot request for:"</span> +
+<a class="jxr_linenumber" name="2514" href="#2514">2514</a>         ClientSnapshotDescriptionUtils.toString(request.getSnapshot()));
+<a class="jxr_linenumber" name="2515" href="#2515">2515</a>     <em class="jxr_comment">// get the snapshot information</em>
+<a class="jxr_linenumber" name="2516" href="#2516">2516</a>     SnapshotDescription snapshot = SnapshotDescriptionUtils.validate(request.getSnapshot(),
+<a class="jxr_linenumber" name="2517" href="#2517">2517</a>       <strong class="jxr_keyword">this</strong>.conf);
+<a class="jxr_linenumber" name="2518" href="#2518">2518</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="2519" href="#2519">2519</a>       snapshotManager.takeSnapshot(snapshot);
+<a class="jxr_linenumber" name="2520" href="#2520">2520</a>     } <strong class="jxr_keyword">catch</strong> (IOException e) {
+<a class="jxr_linenumber" name="2521" href="#2521">2521</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(e);
+<a class="jxr_linenumber" name="2522" href="#2522">2522</a>     }
+<a class="jxr_linenumber" name="2523" href="#2523">2523</a> 
+<a class="jxr_linenumber" name="2524" href="#2524">2524</a>     <em class="jxr_comment">// send back the max amount of time the client should wait for the snapshot to complete</em>
+<a class="jxr_linenumber" name="2525" href="#2525">2525</a>     <strong class="jxr_keyword">long</strong> waitTime = SnapshotDescriptionUtils.getMaxMasterTimeout(conf, snapshot.getType(),
+<a class="jxr_linenumber" name="2526" href="#2526">2526</a>       SnapshotDescriptionUtils.DEFAULT_MAX_WAIT_TIME);
+<a class="jxr_linenumber" name="2527" href="#2527">2527</a>     <strong class="jxr_keyword">return</strong> TakeSnapshotResponse.newBuilder().setExpectedTimeout(waitTime).build();
+<a class="jxr_linenumber" name="2528" href="#2528">2528</a>   }
+<a class="jxr_linenumber" name="2529" href="#2529">2529</a> 
+<a class="jxr_linenumber" name="2530" href="#2530">2530</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="2531" href="#2531">2531</a> <em class="jxr_javadoccomment">   * List the currently available/stored snapshots. Any in-progress snapshots are ignored</em>
+<a class="jxr_linenumber" name="2532" href="#2532">2532</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="2533" href="#2533">2533</a>   @Override
+<a class="jxr_linenumber" name="2534" href="#2534">2534</a>   <strong class="jxr_keyword">public</strong> ListSnapshotResponse getCompletedSnapshots(RpcController controller,
+<a class="jxr_linenumber" name="2535" href="#2535">2535</a>       ListSnapshotRequest request) <strong class="jxr_keyword">throws</strong> ServiceException {
+<a class="jxr_linenumber" name="2536" href="#2536">2536</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="2537" href="#2537">2537</a>       ListSnapshotResponse.Builder builder = ListSnapshotResponse.newBuilder();
+<a class="jxr_linenumber" name="2538" href="#2538">2538</a>       List&lt;SnapshotDescription&gt; snapshots = snapshotManager.getCompletedSnapshots();
+<a class="jxr_linenumber" name="2539" href="#2539">2539</a> 
+<a class="jxr_linenumber" name="2540" href="#2540">2540</a>       <em class="jxr_comment">// convert to protobuf</em>
+<a class="jxr_linenumber" name="2541" href="#2541">2541</a>       <strong class="jxr_keyword">for</strong> (SnapshotDescription snapshot : snapshots) {
+<a class="jxr_linenumber" name="2542" href="#2542">2542</a>         builder.addSnapshots(snapshot);
+<a class="jxr_linenumber" name="2543" href="#2543">2543</a>       }
+<a class="jxr_linenumber" name="2544" href="#2544">2544</a>       <strong class="jxr_keyword">return</strong> builder.build();
+<a class="jxr_linenumber" name="2545" href="#2545">2545</a>     } <strong class="jxr_keyword">catch</strong> (IOException e) {
+<a class="jxr_linenumber" name="2546" href="#2546">2546</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(e);
+<a class="jxr_linenumber" name="2547" href="#2547">2547</a>     }
+<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">   * Execute Delete Snapshot operation.</em>
+<a class="jxr_linenumber" name="2552" href="#2552">2552</a> <em class="jxr_javadoccomment">   * @return DeleteSnapshotResponse (a protobuf wrapped void) if the snapshot existed and was</em>
+<a class="jxr_linenumber" name="2553" href="#2553">2553</a> <em class="jxr_javadoccomment">   *    deleted properly.</em>
+<a class="jxr_linenumber" name="2554" href="#2554">2554</a> <em class="jxr_javadoccomment">   * @throws ServiceException wrapping SnapshotDoesNotExistException if specified snapshot did not</em>
+<a class="jxr_linenumber" name="2555" href="#2555">2555</a> <em class="jxr_javadoccomment">   *    exist.</em>
+<a class="jxr_linenumber" name="2556" href="#2556">2556</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="2557" href="#2557">2557</a>   @Override
+<a class="jxr_linenumber" name="2558" href="#2558">2558</a>   <strong class="jxr_keyword">public</strong> DeleteSnapshotResponse deleteSnapshot(RpcController controller,
+<a class="jxr_linenumber" name="2559" href="#2559">2559</a>       DeleteSnapshotRequest request) <strong class="jxr_keyword">throws</strong> ServiceException {
+<a class="jxr_linenumber" name="2560" href="#2560">2560</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="2561" href="#2561">2561</a>       <strong class="jxr_keyword">this</strong>.snapshotManager.checkSnapshotSupport();
+<a class="jxr_linenumber" name="2562" href="#2562">2562</a>     } <strong class="jxr_keyword">catch</strong> (UnsupportedOperationException e) {
+<a class="jxr_linenumber" name="2563" href="#2563">2563</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(e);
+<a class="jxr_linenumber" name="2564" href="#2564">2564</a>     }
+<a class="jxr_linenumber" name="2565" href="#2565">2565</a> 
+<a class="jxr_linenumber" name="2566" href="#2566">2566</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="2567" href="#2567">2567</a>       snapshotManager.deleteSnapshot(request.getSnapshot());
+<a class="jxr_linenumber" name="2568" href="#2568">2568</a>       <strong class="jxr_keyword">return</strong> DeleteSnapshotResponse.newBuilder().build();
+<a class="jxr_linenumber" name="2569" href="#2569">2569</a>     } <strong class="jxr_keyword">catch</strong> (IOException e) {
+<a class="jxr_linenumber" name="2570" href="#2570">2570</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(e);
+<a class="jxr_linenumber" name="2571" href="#2571">2571</a>     }
+<a class="jxr_linenumber" name="2572" href="#2572">2572</a>   }
+<a class="jxr_linenumber" name="2573" href="#2573">2573</a> 
+<a class="jxr_linenumber" name="2574" href="#2574">2574</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="2575" href="#2575">2575</a> <em class="jxr_javadoccomment">   * Checks if the specified snapshot is done.</em>
+<a class="jxr_linenumber" name="2576" href="#2576">2576</a> <em class="jxr_javadoccomment">   * @return true if the snapshot is in file system ready to use,</em>
+<a class="jxr_linenumber" name="2577" href="#2577">2577</a> <em class="jxr_javadoccomment">   *   false if the snapshot is in the process of completing</em>
+<a class="jxr_linenumber" name="2578" href="#2578">2578</a> <em class="jxr_javadoccomment">   * @throws ServiceException wrapping UnknownSnapshotException if invalid snapshot, or</em>
+<a class="jxr_linenumber" name="2579" href="#2579">2579</a> <em class="jxr_javadoccomment">   *  a wrapped HBaseSnapshotException with progress failure reason.</em>
+<a class="jxr_linenumber" name="2580" href="#2580">2580</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="2581" href="#2581">2581</a>   @Override
+<a class="jxr_linenumber" name="2582" href="#2582">2582</a>   <strong class="jxr_keyword">public</strong> IsSnapshotDoneResponse isSnapshotDone(RpcController controller,
+<a class="jxr_linenumber" name="2583" href="#2583">2583</a>       IsSnapshotDoneRequest request) <strong class="jxr_keyword">throws</strong> ServiceException {
+<a class="jxr_linenumber" name="2584" href="#2584">2584</a>     LOG.debug(<span class="jxr_string">"Checking to see if snapshot from request:"</span> +
+<a class="jxr_linenumber" name="2585" href="#2585">2585</a>         ClientSnapshotDescriptionUtils.toString(request.getSnapshot()) + <span class="jxr_string">" is done"</span>);
+<a class="jxr_linenumber" name="2586" href="#2586">2586</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="2587" href="#2587">2587</a>       IsSnapshotDoneResponse.Builder builder = IsSnapshotDoneResponse.newBuilder();
+<a class="jxr_linenumber" name="2588" href="#2588">2588</a>       <strong class="jxr_keyword">boolean</strong> done = snapshotManager.isSnapshotDone(request.getSnapshot());
+<a class="jxr_linenumber" name="2589" href="#2589">2589</a>       builder.setDone(done);
+<a class="jxr_linenumber" name="2590" href="#2590">2590</a>       <strong class="jxr_keyword">return</strong> builder.build();
+<a class="jxr_linenumber" name="2591" href="#2591">2591</a>     } <strong class="jxr_keyword">catch</strong> (IOException e) {
+<a class="jxr_linenumber" name="2592" href="#2592">2592</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(e);
+<a class="jxr_linenumber" name="2593" href="#2593">2593</a>     }
+<a class="jxr_linenumber" name="2594" href="#2594">2594</a>   }
+<a class="jxr_linenumber" name="2595" href="#2595">2595</a> 
+<a class="jxr_linenumber" name="2596" href="#2596">2596</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="2597" href="#2597">2597</a> <em class="jxr_javadoccomment">   * Execute Restore/Clone snapshot operation.</em>
+<a class="jxr_linenumber" name="2598" href="#2598">2598</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="2599" href="#2599">2599</a> <em class="jxr_javadoccomment">   * &lt;p&gt;If the specified table exists a "Restore" is executed, replacing the table</em>
+<a class="jxr_linenumber" name="2600" href="#2600">2600</a> <em class="jxr_javadoccomment">   * schema and directory data with the content of the snapshot.</em>
+<a class="jxr_linenumber" name="2601" href="#2601">2601</a> <em class="jxr_javadoccomment">   * The table must be disabled, or a UnsupportedOperationException will be thrown.</em>
 <a class="jxr_linenumber" name="2602" href="#2602">2602</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="2603" href="#2603">2603</a> <em class="jxr_javadoccomment">   * &lt;p&gt;The restore/clone operation does not require copying HFiles. Since HFiles</em>
-<a class="jxr_linenumber" name="2604" href="#2604">2604</a> <em class="jxr_javadoccomment">   * are immutable the table can point to and use the same files as the original one.</em>
-<a class="jxr_linenumber" name="2605" href="#2605">2605</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="2606" href="#2606">2606</a>   @Override
-<a class="jxr_linenumber" name="2607" href="#2607">2607</a>   <strong class="jxr_keyword">public</strong> RestoreSnapshotResponse restoreSnapshot(RpcController controller,
-<a class="jxr_linenumber" name="2608" href="#2608">2608</a>       RestoreSnapshotRequest request) <strong class="jxr_keyword">throws</strong> ServiceException {
-<a class="jxr_linenumber" name="2609" href="#2609">2609</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="2610" href="#2610">2610</a>       <strong class="jxr_keyword">this</strong>.snapshotManager.checkSnapshotSupport();
-<a class="jxr_linenumber" name="2611" href="#2611">2611</a>     } <strong class="jxr_keyword">catch</strong> (UnsupportedOperationException e) {
-<a class="jxr_linenumber" name="2612" href="#2612">2612</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(e);
-<a class="jxr_linenumber" name="2613" href="#2613">2613</a>     }
-<a class="jxr_linenumber" name="2614" href="#2614">2614</a> 
-<a class="jxr_linenumber" name="2615" href="#2615">2615</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="2616" href="#2616">2616</a>       SnapshotDescription reqSnapshot = request.getSnapshot();
-<a class="jxr_linenumber" name="2617" href="#2617">2617</a>       snapshotManager.restoreSnapshot(reqSnapshot);
-<a class="jxr_linenumber" name="2618" href="#2618">2618</a>       <strong class="jxr_keyword">return</strong> RestoreSnapshotResponse.newBuilder().build();
-<a class="jxr_linenumber" name="2619" href="#2619">2619</a>     } <strong class="jxr_keyword">catch</strong> (IOException e) {
-<a class="jxr_linenumber" name="2620" href="#2620">2620</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServiceException(e);
-<a class="jxr_linenumber" name="2621" href="#2621">2621</a>     }
-<a class="jxr_linenumber" name="2622" href="#2622">2622</a>   }
-<a class="jxr_linenumber" name="2623" href="#2623">2623</a> 
-<a class="jxr_linenumber" name="2624" href="#2624">2624</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="2625" href="#2625">2625</a> <em class="jxr_javadoccomment">   * Returns the status of the requested snapshot restore/clone operation.</em>
-<a class="jxr_linenumber" name="2626" href="#2626">2626</a> <em class="jxr_javadoccomment">   * This method is not exposed to the user, it is just used internally by HBaseAdmin</em>
-<a class="jxr_linenumber" name="2627" href="#2627">2627</a> <em class="jxr_javadoccomment">   * to verify if the restore is completed.</em>
-<a class="jxr_linenumber" name="2628" href="#2628">2628</a> <em class="jxr_javadoccomment">   *</em>

[... 81 lines stripped ...]