You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2018/01/10 15:31:26 UTC
[10/16] hbase-site git commit: Published site at .
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/828b306f/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
index 4f74984..fa489c5 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
@@ -46,37 +46,37 @@
<span class="sourceLineNo">038</span>import java.util.Map;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import java.util.Map.Entry;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import java.util.Objects;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.Optional;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.Set;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import java.util.concurrent.CountDownLatch;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import java.util.concurrent.ExecutionException;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import java.util.concurrent.Future;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import java.util.concurrent.TimeUnit;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import java.util.concurrent.TimeoutException;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import java.util.function.Function;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import java.util.regex.Pattern;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import java.util.stream.Collectors;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import javax.servlet.ServletException;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import javax.servlet.http.HttpServlet;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import javax.servlet.http.HttpServletRequest;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import javax.servlet.http.HttpServletResponse;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.conf.Configuration;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.fs.Path;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.ClusterMetricsBuilder;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.CoordinatedStateException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.HConstants;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.InvalidFamilyOperationException;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.71"></a>
+<span class="sourceLineNo">041</span>import java.util.Set;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.concurrent.CountDownLatch;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import java.util.concurrent.ExecutionException;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import java.util.concurrent.Future;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import java.util.concurrent.TimeUnit;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import java.util.concurrent.TimeoutException;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import java.util.function.Function;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import java.util.regex.Pattern;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import java.util.stream.Collectors;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import javax.servlet.ServletException;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import javax.servlet.http.HttpServlet;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import javax.servlet.http.HttpServletRequest;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import javax.servlet.http.HttpServletResponse;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.conf.Configuration;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.fs.Path;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.ClusterMetricsBuilder;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.CoordinatedStateException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.HConstants;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.InvalidFamilyOperationException;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;<a name="line.71"></a>
<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.ServerLoad;<a name="line.72"></a>
<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.73"></a>
<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.ServerName;<a name="line.74"></a>
@@ -3350,186 +3350,185 @@
<span class="sourceLineNo">3342</span> cpHost.preGetReplicationPeerConfig(peerId);<a name="line.3342"></a>
<span class="sourceLineNo">3343</span> }<a name="line.3343"></a>
<span class="sourceLineNo">3344</span> LOG.info(getClientIdAuditPrefix() + " get replication peer config, id=" + peerId);<a name="line.3344"></a>
-<span class="sourceLineNo">3345</span> Optional<ReplicationPeerConfig> peerConfig =<a name="line.3345"></a>
-<span class="sourceLineNo">3346</span> this.replicationPeerManager.getPeerConfig(peerId);<a name="line.3346"></a>
-<span class="sourceLineNo">3347</span><a name="line.3347"></a>
-<span class="sourceLineNo">3348</span> if (cpHost != null) {<a name="line.3348"></a>
-<span class="sourceLineNo">3349</span> cpHost.postGetReplicationPeerConfig(peerId);<a name="line.3349"></a>
-<span class="sourceLineNo">3350</span> }<a name="line.3350"></a>
-<span class="sourceLineNo">3351</span> return peerConfig.orElse(null);<a name="line.3351"></a>
-<span class="sourceLineNo">3352</span> }<a name="line.3352"></a>
-<span class="sourceLineNo">3353</span><a name="line.3353"></a>
-<span class="sourceLineNo">3354</span> @Override<a name="line.3354"></a>
-<span class="sourceLineNo">3355</span> public long updateReplicationPeerConfig(String peerId, ReplicationPeerConfig peerConfig)<a name="line.3355"></a>
-<span class="sourceLineNo">3356</span> throws ReplicationException, IOException {<a name="line.3356"></a>
-<span class="sourceLineNo">3357</span> LOG.info(getClientIdAuditPrefix() + " update replication peer config, id=" + peerId +<a name="line.3357"></a>
-<span class="sourceLineNo">3358</span> ", config=" + peerConfig);<a name="line.3358"></a>
-<span class="sourceLineNo">3359</span> return executePeerProcedure(new UpdatePeerConfigProcedure(peerId, peerConfig));<a name="line.3359"></a>
-<span class="sourceLineNo">3360</span> }<a name="line.3360"></a>
-<span class="sourceLineNo">3361</span><a name="line.3361"></a>
-<span class="sourceLineNo">3362</span> @Override<a name="line.3362"></a>
-<span class="sourceLineNo">3363</span> public List<ReplicationPeerDescription> listReplicationPeers(String regex)<a name="line.3363"></a>
-<span class="sourceLineNo">3364</span> throws ReplicationException, IOException {<a name="line.3364"></a>
-<span class="sourceLineNo">3365</span> if (cpHost != null) {<a name="line.3365"></a>
-<span class="sourceLineNo">3366</span> cpHost.preListReplicationPeers(regex);<a name="line.3366"></a>
-<span class="sourceLineNo">3367</span> }<a name="line.3367"></a>
-<span class="sourceLineNo">3368</span> LOG.info(getClientIdAuditPrefix() + " list replication peers, regex=" + regex);<a name="line.3368"></a>
-<span class="sourceLineNo">3369</span> Pattern pattern = regex == null ? null : Pattern.compile(regex);<a name="line.3369"></a>
-<span class="sourceLineNo">3370</span> List<ReplicationPeerDescription> peers =<a name="line.3370"></a>
-<span class="sourceLineNo">3371</span> this.replicationPeerManager.listPeers(pattern);<a name="line.3371"></a>
-<span class="sourceLineNo">3372</span> if (cpHost != null) {<a name="line.3372"></a>
-<span class="sourceLineNo">3373</span> cpHost.postListReplicationPeers(regex);<a name="line.3373"></a>
-<span class="sourceLineNo">3374</span> }<a name="line.3374"></a>
-<span class="sourceLineNo">3375</span> return peers;<a name="line.3375"></a>
-<span class="sourceLineNo">3376</span> }<a name="line.3376"></a>
-<span class="sourceLineNo">3377</span><a name="line.3377"></a>
-<span class="sourceLineNo">3378</span> /**<a name="line.3378"></a>
-<span class="sourceLineNo">3379</span> * Mark region server(s) as decommissioned (previously called 'draining') to prevent additional<a name="line.3379"></a>
-<span class="sourceLineNo">3380</span> * regions from getting assigned to them. Also unload the regions on the servers asynchronously.0<a name="line.3380"></a>
-<span class="sourceLineNo">3381</span> * @param servers Region servers to decommission.<a name="line.3381"></a>
-<span class="sourceLineNo">3382</span> * @throws HBaseIOException<a name="line.3382"></a>
-<span class="sourceLineNo">3383</span> */<a name="line.3383"></a>
-<span class="sourceLineNo">3384</span> public void decommissionRegionServers(final List<ServerName> servers, final boolean offload)<a name="line.3384"></a>
-<span class="sourceLineNo">3385</span> throws HBaseIOException {<a name="line.3385"></a>
-<span class="sourceLineNo">3386</span> List<ServerName> serversAdded = new ArrayList<>(servers.size());<a name="line.3386"></a>
-<span class="sourceLineNo">3387</span> // Place the decommission marker first.<a name="line.3387"></a>
-<span class="sourceLineNo">3388</span> String parentZnode = getZooKeeper().znodePaths.drainingZNode;<a name="line.3388"></a>
-<span class="sourceLineNo">3389</span> for (ServerName server : servers) {<a name="line.3389"></a>
-<span class="sourceLineNo">3390</span> try {<a name="line.3390"></a>
-<span class="sourceLineNo">3391</span> String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3391"></a>
-<span class="sourceLineNo">3392</span> ZKUtil.createAndFailSilent(getZooKeeper(), node);<a name="line.3392"></a>
-<span class="sourceLineNo">3393</span> } catch (KeeperException ke) {<a name="line.3393"></a>
-<span class="sourceLineNo">3394</span> throw new HBaseIOException(<a name="line.3394"></a>
-<span class="sourceLineNo">3395</span> this.zooKeeper.prefix("Unable to decommission '" + server.getServerName() + "'."), ke);<a name="line.3395"></a>
-<span class="sourceLineNo">3396</span> }<a name="line.3396"></a>
-<span class="sourceLineNo">3397</span> if (this.serverManager.addServerToDrainList(server)) {<a name="line.3397"></a>
-<span class="sourceLineNo">3398</span> serversAdded.add(server);<a name="line.3398"></a>
-<span class="sourceLineNo">3399</span> }<a name="line.3399"></a>
-<span class="sourceLineNo">3400</span> }<a name="line.3400"></a>
-<span class="sourceLineNo">3401</span> // Move the regions off the decommissioned servers.<a name="line.3401"></a>
-<span class="sourceLineNo">3402</span> if (offload) {<a name="line.3402"></a>
-<span class="sourceLineNo">3403</span> final List<ServerName> destServers = this.serverManager.createDestinationServersList();<a name="line.3403"></a>
-<span class="sourceLineNo">3404</span> for (ServerName server : serversAdded) {<a name="line.3404"></a>
-<span class="sourceLineNo">3405</span> final List<RegionInfo> regionsOnServer =<a name="line.3405"></a>
-<span class="sourceLineNo">3406</span> this.assignmentManager.getRegionStates().getServerRegionInfoSet(server);<a name="line.3406"></a>
-<span class="sourceLineNo">3407</span> for (RegionInfo hri : regionsOnServer) {<a name="line.3407"></a>
-<span class="sourceLineNo">3408</span> ServerName dest = balancer.randomAssignment(hri, destServers);<a name="line.3408"></a>
-<span class="sourceLineNo">3409</span> if (dest == null) {<a name="line.3409"></a>
-<span class="sourceLineNo">3410</span> throw new HBaseIOException("Unable to determine a plan to move " + hri);<a name="line.3410"></a>
-<span class="sourceLineNo">3411</span> }<a name="line.3411"></a>
-<span class="sourceLineNo">3412</span> RegionPlan rp = new RegionPlan(hri, server, dest);<a name="line.3412"></a>
-<span class="sourceLineNo">3413</span> this.assignmentManager.moveAsync(rp);<a name="line.3413"></a>
-<span class="sourceLineNo">3414</span> }<a name="line.3414"></a>
-<span class="sourceLineNo">3415</span> }<a name="line.3415"></a>
-<span class="sourceLineNo">3416</span> }<a name="line.3416"></a>
-<span class="sourceLineNo">3417</span> }<a name="line.3417"></a>
-<span class="sourceLineNo">3418</span><a name="line.3418"></a>
-<span class="sourceLineNo">3419</span> /**<a name="line.3419"></a>
-<span class="sourceLineNo">3420</span> * List region servers marked as decommissioned (previously called 'draining') to not get regions<a name="line.3420"></a>
-<span class="sourceLineNo">3421</span> * assigned to them.<a name="line.3421"></a>
-<span class="sourceLineNo">3422</span> * @return List of decommissioned servers.<a name="line.3422"></a>
-<span class="sourceLineNo">3423</span> */<a name="line.3423"></a>
-<span class="sourceLineNo">3424</span> public List<ServerName> listDecommissionedRegionServers() {<a name="line.3424"></a>
-<span class="sourceLineNo">3425</span> return this.serverManager.getDrainingServersList();<a name="line.3425"></a>
-<span class="sourceLineNo">3426</span> }<a name="line.3426"></a>
-<span class="sourceLineNo">3427</span><a name="line.3427"></a>
-<span class="sourceLineNo">3428</span> /**<a name="line.3428"></a>
-<span class="sourceLineNo">3429</span> * Remove decommission marker (previously called 'draining') from a region server to allow regions<a name="line.3429"></a>
-<span class="sourceLineNo">3430</span> * assignments. Load regions onto the server asynchronously if a list of regions is given<a name="line.3430"></a>
-<span class="sourceLineNo">3431</span> * @param server Region server to remove decommission marker from.<a name="line.3431"></a>
-<span class="sourceLineNo">3432</span> * @throws HBaseIOException<a name="line.3432"></a>
-<span class="sourceLineNo">3433</span> */<a name="line.3433"></a>
-<span class="sourceLineNo">3434</span> public void recommissionRegionServer(final ServerName server,<a name="line.3434"></a>
-<span class="sourceLineNo">3435</span> final List<byte[]> encodedRegionNames) throws HBaseIOException {<a name="line.3435"></a>
-<span class="sourceLineNo">3436</span> // Remove the server from decommissioned (draining) server list.<a name="line.3436"></a>
-<span class="sourceLineNo">3437</span> String parentZnode = getZooKeeper().znodePaths.drainingZNode;<a name="line.3437"></a>
-<span class="sourceLineNo">3438</span> String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3438"></a>
-<span class="sourceLineNo">3439</span> try {<a name="line.3439"></a>
-<span class="sourceLineNo">3440</span> ZKUtil.deleteNodeFailSilent(getZooKeeper(), node);<a name="line.3440"></a>
-<span class="sourceLineNo">3441</span> } catch (KeeperException ke) {<a name="line.3441"></a>
-<span class="sourceLineNo">3442</span> throw new HBaseIOException(<a name="line.3442"></a>
-<span class="sourceLineNo">3443</span> this.zooKeeper.prefix("Unable to recommission '" + server.getServerName() + "'."), ke);<a name="line.3443"></a>
-<span class="sourceLineNo">3444</span> }<a name="line.3444"></a>
-<span class="sourceLineNo">3445</span> this.serverManager.removeServerFromDrainList(server);<a name="line.3445"></a>
-<span class="sourceLineNo">3446</span><a name="line.3446"></a>
-<span class="sourceLineNo">3447</span> // Load the regions onto the server if we are given a list of regions.<a name="line.3447"></a>
-<span class="sourceLineNo">3448</span> if (encodedRegionNames == null || encodedRegionNames.isEmpty()) {<a name="line.3448"></a>
-<span class="sourceLineNo">3449</span> return;<a name="line.3449"></a>
-<span class="sourceLineNo">3450</span> }<a name="line.3450"></a>
-<span class="sourceLineNo">3451</span> if (!this.serverManager.isServerOnline(server)) {<a name="line.3451"></a>
-<span class="sourceLineNo">3452</span> return;<a name="line.3452"></a>
-<span class="sourceLineNo">3453</span> }<a name="line.3453"></a>
-<span class="sourceLineNo">3454</span> for (byte[] encodedRegionName : encodedRegionNames) {<a name="line.3454"></a>
-<span class="sourceLineNo">3455</span> RegionState regionState =<a name="line.3455"></a>
-<span class="sourceLineNo">3456</span> assignmentManager.getRegionStates().getRegionState(Bytes.toString(encodedRegionName));<a name="line.3456"></a>
-<span class="sourceLineNo">3457</span> if (regionState == null) {<a name="line.3457"></a>
-<span class="sourceLineNo">3458</span> LOG.warn("Unknown region " + Bytes.toStringBinary(encodedRegionName));<a name="line.3458"></a>
-<span class="sourceLineNo">3459</span> continue;<a name="line.3459"></a>
-<span class="sourceLineNo">3460</span> }<a name="line.3460"></a>
-<span class="sourceLineNo">3461</span> RegionInfo hri = regionState.getRegion();<a name="line.3461"></a>
-<span class="sourceLineNo">3462</span> if (server.equals(regionState.getServerName())) {<a name="line.3462"></a>
-<span class="sourceLineNo">3463</span> LOG.info("Skipping move of region " + hri.getRegionNameAsString()<a name="line.3463"></a>
-<span class="sourceLineNo">3464</span> + " because region already assigned to the same server " + server + ".");<a name="line.3464"></a>
-<span class="sourceLineNo">3465</span> continue;<a name="line.3465"></a>
-<span class="sourceLineNo">3466</span> }<a name="line.3466"></a>
-<span class="sourceLineNo">3467</span> RegionPlan rp = new RegionPlan(hri, regionState.getServerName(), server);<a name="line.3467"></a>
-<span class="sourceLineNo">3468</span> this.assignmentManager.moveAsync(rp);<a name="line.3468"></a>
-<span class="sourceLineNo">3469</span> }<a name="line.3469"></a>
-<span class="sourceLineNo">3470</span> }<a name="line.3470"></a>
-<span class="sourceLineNo">3471</span><a name="line.3471"></a>
-<span class="sourceLineNo">3472</span> @Override<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span> public LockManager getLockManager() {<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span> return lockManager;<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span> }<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span><a name="line.3476"></a>
-<span class="sourceLineNo">3477</span> @Override<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span> public boolean recoverMeta() throws IOException {<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createLatch(2, 0);<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span> LOG.info("Running RecoverMetaProcedure to ensure proper hbase:meta deploy.");<a name="line.3480"></a>
-<span class="sourceLineNo">3481</span> long procId = procedureExecutor.submitProcedure(new RecoverMetaProcedure(null, true, latch));<a name="line.3481"></a>
-<span class="sourceLineNo">3482</span> latch.await();<a name="line.3482"></a>
-<span class="sourceLineNo">3483</span> LOG.info("hbase:meta (default replica) deployed at=" +<a name="line.3483"></a>
-<span class="sourceLineNo">3484</span> getMetaTableLocator().getMetaRegionLocation(getZooKeeper()));<a name="line.3484"></a>
-<span class="sourceLineNo">3485</span> return assignmentManager.isMetaInitialized();<a name="line.3485"></a>
-<span class="sourceLineNo">3486</span> }<a name="line.3486"></a>
-<span class="sourceLineNo">3487</span><a name="line.3487"></a>
-<span class="sourceLineNo">3488</span> public QuotaObserverChore getQuotaObserverChore() {<a name="line.3488"></a>
-<span class="sourceLineNo">3489</span> return this.quotaObserverChore;<a name="line.3489"></a>
-<span class="sourceLineNo">3490</span> }<a name="line.3490"></a>
-<span class="sourceLineNo">3491</span><a name="line.3491"></a>
-<span class="sourceLineNo">3492</span> public SpaceQuotaSnapshotNotifier getSpaceQuotaSnapshotNotifier() {<a name="line.3492"></a>
-<span class="sourceLineNo">3493</span> return this.spaceQuotaSnapshotNotifier;<a name="line.3493"></a>
-<span class="sourceLineNo">3494</span> }<a name="line.3494"></a>
-<span class="sourceLineNo">3495</span><a name="line.3495"></a>
-<span class="sourceLineNo">3496</span> @SuppressWarnings("unchecked")<a name="line.3496"></a>
-<span class="sourceLineNo">3497</span> private RemoteProcedure<MasterProcedureEnv, ?> getRemoteProcedure(long procId) {<a name="line.3497"></a>
-<span class="sourceLineNo">3498</span> Procedure<?> procedure = procedureExecutor.getProcedure(procId);<a name="line.3498"></a>
-<span class="sourceLineNo">3499</span> if (procedure == null) {<a name="line.3499"></a>
-<span class="sourceLineNo">3500</span> return null;<a name="line.3500"></a>
-<span class="sourceLineNo">3501</span> }<a name="line.3501"></a>
-<span class="sourceLineNo">3502</span> assert procedure instanceof RemoteProcedure;<a name="line.3502"></a>
-<span class="sourceLineNo">3503</span> return (RemoteProcedure<MasterProcedureEnv, ?>) procedure;<a name="line.3503"></a>
-<span class="sourceLineNo">3504</span> }<a name="line.3504"></a>
-<span class="sourceLineNo">3505</span><a name="line.3505"></a>
-<span class="sourceLineNo">3506</span> public void remoteProcedureCompleted(long procId) {<a name="line.3506"></a>
-<span class="sourceLineNo">3507</span> RemoteProcedure<MasterProcedureEnv, ?> procedure = getRemoteProcedure(procId);<a name="line.3507"></a>
-<span class="sourceLineNo">3508</span> if (procedure != null) {<a name="line.3508"></a>
-<span class="sourceLineNo">3509</span> procedure.remoteOperationCompleted(procedureExecutor.getEnvironment());<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span> }<a name="line.3510"></a>
-<span class="sourceLineNo">3511</span> }<a name="line.3511"></a>
-<span class="sourceLineNo">3512</span><a name="line.3512"></a>
-<span class="sourceLineNo">3513</span> public void remoteProcedureFailed(long procId, RemoteProcedureException error) {<a name="line.3513"></a>
-<span class="sourceLineNo">3514</span> RemoteProcedure<MasterProcedureEnv, ?> procedure = getRemoteProcedure(procId);<a name="line.3514"></a>
-<span class="sourceLineNo">3515</span> if (procedure != null) {<a name="line.3515"></a>
-<span class="sourceLineNo">3516</span> procedure.remoteOperationFailed(procedureExecutor.getEnvironment(), error);<a name="line.3516"></a>
-<span class="sourceLineNo">3517</span> }<a name="line.3517"></a>
-<span class="sourceLineNo">3518</span> }<a name="line.3518"></a>
-<span class="sourceLineNo">3519</span><a name="line.3519"></a>
-<span class="sourceLineNo">3520</span> @Override<a name="line.3520"></a>
-<span class="sourceLineNo">3521</span> public ReplicationPeerManager getReplicationPeerManager() {<a name="line.3521"></a>
-<span class="sourceLineNo">3522</span> return replicationPeerManager;<a name="line.3522"></a>
-<span class="sourceLineNo">3523</span> }<a name="line.3523"></a>
-<span class="sourceLineNo">3524</span>}<a name="line.3524"></a>
+<span class="sourceLineNo">3345</span> ReplicationPeerConfig peerConfig = this.replicationPeerManager.getPeerConfig(peerId)<a name="line.3345"></a>
+<span class="sourceLineNo">3346</span> .orElseThrow(() -> new ReplicationPeerNotFoundException(peerId));<a name="line.3346"></a>
+<span class="sourceLineNo">3347</span> if (cpHost != null) {<a name="line.3347"></a>
+<span class="sourceLineNo">3348</span> cpHost.postGetReplicationPeerConfig(peerId);<a name="line.3348"></a>
+<span class="sourceLineNo">3349</span> }<a name="line.3349"></a>
+<span class="sourceLineNo">3350</span> return peerConfig;<a name="line.3350"></a>
+<span class="sourceLineNo">3351</span> }<a name="line.3351"></a>
+<span class="sourceLineNo">3352</span><a name="line.3352"></a>
+<span class="sourceLineNo">3353</span> @Override<a name="line.3353"></a>
+<span class="sourceLineNo">3354</span> public long updateReplicationPeerConfig(String peerId, ReplicationPeerConfig peerConfig)<a name="line.3354"></a>
+<span class="sourceLineNo">3355</span> throws ReplicationException, IOException {<a name="line.3355"></a>
+<span class="sourceLineNo">3356</span> LOG.info(getClientIdAuditPrefix() + " update replication peer config, id=" + peerId +<a name="line.3356"></a>
+<span class="sourceLineNo">3357</span> ", config=" + peerConfig);<a name="line.3357"></a>
+<span class="sourceLineNo">3358</span> return executePeerProcedure(new UpdatePeerConfigProcedure(peerId, peerConfig));<a name="line.3358"></a>
+<span class="sourceLineNo">3359</span> }<a name="line.3359"></a>
+<span class="sourceLineNo">3360</span><a name="line.3360"></a>
+<span class="sourceLineNo">3361</span> @Override<a name="line.3361"></a>
+<span class="sourceLineNo">3362</span> public List<ReplicationPeerDescription> listReplicationPeers(String regex)<a name="line.3362"></a>
+<span class="sourceLineNo">3363</span> throws ReplicationException, IOException {<a name="line.3363"></a>
+<span class="sourceLineNo">3364</span> if (cpHost != null) {<a name="line.3364"></a>
+<span class="sourceLineNo">3365</span> cpHost.preListReplicationPeers(regex);<a name="line.3365"></a>
+<span class="sourceLineNo">3366</span> }<a name="line.3366"></a>
+<span class="sourceLineNo">3367</span> LOG.info(getClientIdAuditPrefix() + " list replication peers, regex=" + regex);<a name="line.3367"></a>
+<span class="sourceLineNo">3368</span> Pattern pattern = regex == null ? null : Pattern.compile(regex);<a name="line.3368"></a>
+<span class="sourceLineNo">3369</span> List<ReplicationPeerDescription> peers =<a name="line.3369"></a>
+<span class="sourceLineNo">3370</span> this.replicationPeerManager.listPeers(pattern);<a name="line.3370"></a>
+<span class="sourceLineNo">3371</span> if (cpHost != null) {<a name="line.3371"></a>
+<span class="sourceLineNo">3372</span> cpHost.postListReplicationPeers(regex);<a name="line.3372"></a>
+<span class="sourceLineNo">3373</span> }<a name="line.3373"></a>
+<span class="sourceLineNo">3374</span> return peers;<a name="line.3374"></a>
+<span class="sourceLineNo">3375</span> }<a name="line.3375"></a>
+<span class="sourceLineNo">3376</span><a name="line.3376"></a>
+<span class="sourceLineNo">3377</span> /**<a name="line.3377"></a>
+<span class="sourceLineNo">3378</span> * Mark region server(s) as decommissioned (previously called 'draining') to prevent additional<a name="line.3378"></a>
+<span class="sourceLineNo">3379</span> * regions from getting assigned to them. Also unload the regions on the servers asynchronously.0<a name="line.3379"></a>
+<span class="sourceLineNo">3380</span> * @param servers Region servers to decommission.<a name="line.3380"></a>
+<span class="sourceLineNo">3381</span> * @throws HBaseIOException<a name="line.3381"></a>
+<span class="sourceLineNo">3382</span> */<a name="line.3382"></a>
+<span class="sourceLineNo">3383</span> public void decommissionRegionServers(final List<ServerName> servers, final boolean offload)<a name="line.3383"></a>
+<span class="sourceLineNo">3384</span> throws HBaseIOException {<a name="line.3384"></a>
+<span class="sourceLineNo">3385</span> List<ServerName> serversAdded = new ArrayList<>(servers.size());<a name="line.3385"></a>
+<span class="sourceLineNo">3386</span> // Place the decommission marker first.<a name="line.3386"></a>
+<span class="sourceLineNo">3387</span> String parentZnode = getZooKeeper().znodePaths.drainingZNode;<a name="line.3387"></a>
+<span class="sourceLineNo">3388</span> for (ServerName server : servers) {<a name="line.3388"></a>
+<span class="sourceLineNo">3389</span> try {<a name="line.3389"></a>
+<span class="sourceLineNo">3390</span> String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3390"></a>
+<span class="sourceLineNo">3391</span> ZKUtil.createAndFailSilent(getZooKeeper(), node);<a name="line.3391"></a>
+<span class="sourceLineNo">3392</span> } catch (KeeperException ke) {<a name="line.3392"></a>
+<span class="sourceLineNo">3393</span> throw new HBaseIOException(<a name="line.3393"></a>
+<span class="sourceLineNo">3394</span> this.zooKeeper.prefix("Unable to decommission '" + server.getServerName() + "'."), ke);<a name="line.3394"></a>
+<span class="sourceLineNo">3395</span> }<a name="line.3395"></a>
+<span class="sourceLineNo">3396</span> if (this.serverManager.addServerToDrainList(server)) {<a name="line.3396"></a>
+<span class="sourceLineNo">3397</span> serversAdded.add(server);<a name="line.3397"></a>
+<span class="sourceLineNo">3398</span> }<a name="line.3398"></a>
+<span class="sourceLineNo">3399</span> }<a name="line.3399"></a>
+<span class="sourceLineNo">3400</span> // Move the regions off the decommissioned servers.<a name="line.3400"></a>
+<span class="sourceLineNo">3401</span> if (offload) {<a name="line.3401"></a>
+<span class="sourceLineNo">3402</span> final List<ServerName> destServers = this.serverManager.createDestinationServersList();<a name="line.3402"></a>
+<span class="sourceLineNo">3403</span> for (ServerName server : serversAdded) {<a name="line.3403"></a>
+<span class="sourceLineNo">3404</span> final List<RegionInfo> regionsOnServer =<a name="line.3404"></a>
+<span class="sourceLineNo">3405</span> this.assignmentManager.getRegionStates().getServerRegionInfoSet(server);<a name="line.3405"></a>
+<span class="sourceLineNo">3406</span> for (RegionInfo hri : regionsOnServer) {<a name="line.3406"></a>
+<span class="sourceLineNo">3407</span> ServerName dest = balancer.randomAssignment(hri, destServers);<a name="line.3407"></a>
+<span class="sourceLineNo">3408</span> if (dest == null) {<a name="line.3408"></a>
+<span class="sourceLineNo">3409</span> throw new HBaseIOException("Unable to determine a plan to move " + hri);<a name="line.3409"></a>
+<span class="sourceLineNo">3410</span> }<a name="line.3410"></a>
+<span class="sourceLineNo">3411</span> RegionPlan rp = new RegionPlan(hri, server, dest);<a name="line.3411"></a>
+<span class="sourceLineNo">3412</span> this.assignmentManager.moveAsync(rp);<a name="line.3412"></a>
+<span class="sourceLineNo">3413</span> }<a name="line.3413"></a>
+<span class="sourceLineNo">3414</span> }<a name="line.3414"></a>
+<span class="sourceLineNo">3415</span> }<a name="line.3415"></a>
+<span class="sourceLineNo">3416</span> }<a name="line.3416"></a>
+<span class="sourceLineNo">3417</span><a name="line.3417"></a>
+<span class="sourceLineNo">3418</span> /**<a name="line.3418"></a>
+<span class="sourceLineNo">3419</span> * List region servers marked as decommissioned (previously called 'draining') to not get regions<a name="line.3419"></a>
+<span class="sourceLineNo">3420</span> * assigned to them.<a name="line.3420"></a>
+<span class="sourceLineNo">3421</span> * @return List of decommissioned servers.<a name="line.3421"></a>
+<span class="sourceLineNo">3422</span> */<a name="line.3422"></a>
+<span class="sourceLineNo">3423</span> public List<ServerName> listDecommissionedRegionServers() {<a name="line.3423"></a>
+<span class="sourceLineNo">3424</span> return this.serverManager.getDrainingServersList();<a name="line.3424"></a>
+<span class="sourceLineNo">3425</span> }<a name="line.3425"></a>
+<span class="sourceLineNo">3426</span><a name="line.3426"></a>
+<span class="sourceLineNo">3427</span> /**<a name="line.3427"></a>
+<span class="sourceLineNo">3428</span> * Remove decommission marker (previously called 'draining') from a region server to allow regions<a name="line.3428"></a>
+<span class="sourceLineNo">3429</span> * assignments. Load regions onto the server asynchronously if a list of regions is given<a name="line.3429"></a>
+<span class="sourceLineNo">3430</span> * @param server Region server to remove decommission marker from.<a name="line.3430"></a>
+<span class="sourceLineNo">3431</span> * @throws HBaseIOException<a name="line.3431"></a>
+<span class="sourceLineNo">3432</span> */<a name="line.3432"></a>
+<span class="sourceLineNo">3433</span> public void recommissionRegionServer(final ServerName server,<a name="line.3433"></a>
+<span class="sourceLineNo">3434</span> final List<byte[]> encodedRegionNames) throws HBaseIOException {<a name="line.3434"></a>
+<span class="sourceLineNo">3435</span> // Remove the server from decommissioned (draining) server list.<a name="line.3435"></a>
+<span class="sourceLineNo">3436</span> String parentZnode = getZooKeeper().znodePaths.drainingZNode;<a name="line.3436"></a>
+<span class="sourceLineNo">3437</span> String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3437"></a>
+<span class="sourceLineNo">3438</span> try {<a name="line.3438"></a>
+<span class="sourceLineNo">3439</span> ZKUtil.deleteNodeFailSilent(getZooKeeper(), node);<a name="line.3439"></a>
+<span class="sourceLineNo">3440</span> } catch (KeeperException ke) {<a name="line.3440"></a>
+<span class="sourceLineNo">3441</span> throw new HBaseIOException(<a name="line.3441"></a>
+<span class="sourceLineNo">3442</span> this.zooKeeper.prefix("Unable to recommission '" + server.getServerName() + "'."), ke);<a name="line.3442"></a>
+<span class="sourceLineNo">3443</span> }<a name="line.3443"></a>
+<span class="sourceLineNo">3444</span> this.serverManager.removeServerFromDrainList(server);<a name="line.3444"></a>
+<span class="sourceLineNo">3445</span><a name="line.3445"></a>
+<span class="sourceLineNo">3446</span> // Load the regions onto the server if we are given a list of regions.<a name="line.3446"></a>
+<span class="sourceLineNo">3447</span> if (encodedRegionNames == null || encodedRegionNames.isEmpty()) {<a name="line.3447"></a>
+<span class="sourceLineNo">3448</span> return;<a name="line.3448"></a>
+<span class="sourceLineNo">3449</span> }<a name="line.3449"></a>
+<span class="sourceLineNo">3450</span> if (!this.serverManager.isServerOnline(server)) {<a name="line.3450"></a>
+<span class="sourceLineNo">3451</span> return;<a name="line.3451"></a>
+<span class="sourceLineNo">3452</span> }<a name="line.3452"></a>
+<span class="sourceLineNo">3453</span> for (byte[] encodedRegionName : encodedRegionNames) {<a name="line.3453"></a>
+<span class="sourceLineNo">3454</span> RegionState regionState =<a name="line.3454"></a>
+<span class="sourceLineNo">3455</span> assignmentManager.getRegionStates().getRegionState(Bytes.toString(encodedRegionName));<a name="line.3455"></a>
+<span class="sourceLineNo">3456</span> if (regionState == null) {<a name="line.3456"></a>
+<span class="sourceLineNo">3457</span> LOG.warn("Unknown region " + Bytes.toStringBinary(encodedRegionName));<a name="line.3457"></a>
+<span class="sourceLineNo">3458</span> continue;<a name="line.3458"></a>
+<span class="sourceLineNo">3459</span> }<a name="line.3459"></a>
+<span class="sourceLineNo">3460</span> RegionInfo hri = regionState.getRegion();<a name="line.3460"></a>
+<span class="sourceLineNo">3461</span> if (server.equals(regionState.getServerName())) {<a name="line.3461"></a>
+<span class="sourceLineNo">3462</span> LOG.info("Skipping move of region " + hri.getRegionNameAsString()<a name="line.3462"></a>
+<span class="sourceLineNo">3463</span> + " because region already assigned to the same server " + server + ".");<a name="line.3463"></a>
+<span class="sourceLineNo">3464</span> continue;<a name="line.3464"></a>
+<span class="sourceLineNo">3465</span> }<a name="line.3465"></a>
+<span class="sourceLineNo">3466</span> RegionPlan rp = new RegionPlan(hri, regionState.getServerName(), server);<a name="line.3466"></a>
+<span class="sourceLineNo">3467</span> this.assignmentManager.moveAsync(rp);<a name="line.3467"></a>
+<span class="sourceLineNo">3468</span> }<a name="line.3468"></a>
+<span class="sourceLineNo">3469</span> }<a name="line.3469"></a>
+<span class="sourceLineNo">3470</span><a name="line.3470"></a>
+<span class="sourceLineNo">3471</span> @Override<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span> public LockManager getLockManager() {<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span> return lockManager;<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span> }<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span><a name="line.3475"></a>
+<span class="sourceLineNo">3476</span> @Override<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span> public boolean recoverMeta() throws IOException {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createLatch(2, 0);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span> LOG.info("Running RecoverMetaProcedure to ensure proper hbase:meta deploy.");<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span> long procId = procedureExecutor.submitProcedure(new RecoverMetaProcedure(null, true, latch));<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span> latch.await();<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span> LOG.info("hbase:meta (default replica) deployed at=" +<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span> getMetaTableLocator().getMetaRegionLocation(getZooKeeper()));<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span> return assignmentManager.isMetaInitialized();<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span> }<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span><a name="line.3486"></a>
+<span class="sourceLineNo">3487</span> public QuotaObserverChore getQuotaObserverChore() {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span> return this.quotaObserverChore;<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span> }<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span><a name="line.3490"></a>
+<span class="sourceLineNo">3491</span> public SpaceQuotaSnapshotNotifier getSpaceQuotaSnapshotNotifier() {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span> return this.spaceQuotaSnapshotNotifier;<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span> }<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span><a name="line.3494"></a>
+<span class="sourceLineNo">3495</span> @SuppressWarnings("unchecked")<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span> private RemoteProcedure<MasterProcedureEnv, ?> getRemoteProcedure(long procId) {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span> Procedure<?> procedure = procedureExecutor.getProcedure(procId);<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span> if (procedure == null) {<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span> return null;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span> }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span> assert procedure instanceof RemoteProcedure;<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span> return (RemoteProcedure<MasterProcedureEnv, ?>) procedure;<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span> }<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span><a name="line.3504"></a>
+<span class="sourceLineNo">3505</span> public void remoteProcedureCompleted(long procId) {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span> RemoteProcedure<MasterProcedureEnv, ?> procedure = getRemoteProcedure(procId);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span> if (procedure != null) {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span> procedure.remoteOperationCompleted(procedureExecutor.getEnvironment());<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span> }<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span> }<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span><a name="line.3511"></a>
+<span class="sourceLineNo">3512</span> public void remoteProcedureFailed(long procId, RemoteProcedureException error) {<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span> RemoteProcedure<MasterProcedureEnv, ?> procedure = getRemoteProcedure(procId);<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span> if (procedure != null) {<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span> procedure.remoteOperationFailed(procedureExecutor.getEnvironment(), error);<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span> }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span> }<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span><a name="line.3518"></a>
+<span class="sourceLineNo">3519</span> @Override<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span> public ReplicationPeerManager getReplicationPeerManager() {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span> return replicationPeerManager;<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span> }<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>}<a name="line.3523"></a>